diff options
| author | Martin Hořeňovský | 2026-04-08 10:26:57 +0200 |
|---|---|---|
| committer | Martin Hořeňovský | 2026-04-08 12:57:09 +0200 |
| commit | 47200ddbee03eaf4a9d3d99d18cb692381d8f5bc (patch) | |
| tree | ec947545e5f35b38ea5592c6fafcd7861081648c /tests | |
| parent | e51dcdcc595371828de2b1d28985e8d8c1895345 (diff) | |
| download | catch3-47200ddbee03eaf4a9d3d99d18cb692381d8f5bc.tar.gz | |
Rework internals of CATCH_REGISTER_ENUM
The old internals reached into the global hub to stash the allocation(s)
for enum value -> string value there, then kept around a potentially
invalid (in case the hub was cleaned up) reference into it, going through
whole bunch of virtual dispatch in the process.
The new internals just store the data in a static variable inside the
`StringMaker` specialization. This avoids potential lifetime issues,
avoids all virtual dispatch and (almost) reduces the include bloat in
the main header path.
The reason for (almost) there is that for full include correctness,
`EnumInfo` needs `<utility>` include for `std::pair`. However, this brings
in things like `std::relops`, because the std headers in C++ are dumb.
As this was not included before, and instead we relied on `std::pair`
existing in an internal stdlib header that we transitively included, the
full include size ends up bigger than before.
Diffstat (limited to 'tests')
20 files changed, 321 insertions, 179 deletions
diff --git a/tests/SelfTest/Baselines/automake.sw.approved.txt b/tests/SelfTest/Baselines/automake.sw.approved.txt index f5c2fa97..5018a19a 100644 --- a/tests/SelfTest/Baselines/automake.sw.approved.txt +++ b/tests/SelfTest/Baselines/automake.sw.approved.txt @@ -144,6 +144,7 @@ Nor would this :test-result: SKIP Empty generators can SKIP in constructor :test-result: PASS Empty stream name opens cout stream :test-result: FAIL EndsWith string matcher +:test-result: PASS Enum backed by larger underlying type :test-result: PASS Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM :test-result: PASS Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM :test-result: PASS Epsilon only applies to Approx's value diff --git a/tests/SelfTest/Baselines/automake.sw.multi.approved.txt b/tests/SelfTest/Baselines/automake.sw.multi.approved.txt index 973e2f53..4f9a9441 100644 --- a/tests/SelfTest/Baselines/automake.sw.multi.approved.txt +++ b/tests/SelfTest/Baselines/automake.sw.multi.approved.txt @@ -142,6 +142,7 @@ :test-result: SKIP Empty generators can SKIP in constructor :test-result: PASS Empty stream name opens cout stream :test-result: FAIL EndsWith string matcher +:test-result: PASS Enum backed by larger underlying type :test-result: PASS Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM :test-result: PASS Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM :test-result: PASS Epsilon only applies to Approx's value diff --git a/tests/SelfTest/Baselines/compact.sw.approved.txt b/tests/SelfTest/Baselines/compact.sw.approved.txt index e4258ecb..cb90a0f5 100644 --- a/tests/SelfTest/Baselines/compact.sw.approved.txt +++ b/tests/SelfTest/Baselines/compact.sw.approved.txt @@ -576,15 +576,18 @@ Approx.tests.cpp:<line number>: passed: 101.000001 != Approx(100).epsilon(0.01) Approx.tests.cpp:<line number>: passed: std::pow(10, -5) != Approx(std::pow(10, -7)) for: 0.00001 != Approx( 0.0000001 ) Message.tests.cpp:<line number>: passed: true with 1 message: 'a' Message.tests.cpp:<line number>: failed: false with 1 message: 'b' -ToString.tests.cpp:<line number>: passed: enumInfo->lookup(0) == "Value1" for: Value1 == "Value1" -ToString.tests.cpp:<line number>: passed: enumInfo->lookup(1) == "Value2" for: Value2 == "Value2" -ToString.tests.cpp:<line number>: passed: enumInfo->lookup(3) == "{** unexpected enum value **}" for: {** unexpected enum value **} +EnumToString.tests.cpp:<line number>: passed: enumInfo.lookup(0) == "Value1" for: Value1 == "Value1" +EnumToString.tests.cpp:<line number>: passed: enumInfo.lookup(1) == "Value2" for: Value2 == "Value2" +EnumToString.tests.cpp:<line number>: passed: enumInfo.lookup(3) == "{** unexpected enum value **}" for: {** unexpected enum value **} == "{** unexpected enum value **}" Skip.tests.cpp:<line number>: skipped: 'This generator is empty' Stream.tests.cpp:<line number>: passed: Catch::makeStream( "" )->isConsole() for: true Matchers.tests.cpp:<line number>: failed: testStringForMatching(), EndsWith( "Substring" ) for: "this string contains 'abc' as a substring" ends with: "Substring" Matchers.tests.cpp:<line number>: failed: testStringForMatching(), EndsWith( "this", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" ends with: "this" (case insensitive) +EnumToString.tests.cpp:<line number>: passed: stringify( LargeEnum::Flag1 ) == "Flag1" for: "Flag1" == "Flag1" +EnumToString.tests.cpp:<line number>: passed: stringify( LargeEnum::Flag2 ) == "Flag2" for: "Flag2" == "Flag2" +EnumToString.tests.cpp:<line number>: passed: stringify( LargeEnum::Flag5 ) == "Flag5" for: "Flag5" == "Flag5" EnumToString.tests.cpp:<line number>: passed: stringify( EnumClass3::Value1 ) == "Value1" for: "Value1" == "Value1" EnumToString.tests.cpp:<line number>: passed: stringify( EnumClass3::Value2 ) == "Value2" for: "Value2" == "Value2" EnumToString.tests.cpp:<line number>: passed: stringify( EnumClass3::Value3 ) == "Value3" for: "Value3" == "Value3" @@ -2755,13 +2758,13 @@ Tricky.tests.cpp:<line number>: passed: ptr.get() == 0 for: 0 == 0 ToStringPair.tests.cpp:<line number>: passed: ::Catch::Detail::stringify( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" for: "{ { 42, "Arthur" }, { "Ford", 24 } }" == "{ { 42, "Arthur" }, { "Ford", 24 } }" -ToString.tests.cpp:<line number>: passed: parseEnums( "" ), Equals( std::vector<Catch::StringRef>{} ) for: { } Equals: { } -ToString.tests.cpp:<line number>: passed: parseEnums( "ClassName::EnumName::Value1" ), Equals(std::vector<Catch::StringRef>{"Value1"} ) for: { Value1 } Equals: { Value1 } -ToString.tests.cpp:<line number>: passed: parseEnums( "Value1" ), Equals( std::vector<Catch::StringRef>{"Value1"} ) for: { Value1 } Equals: { Value1 } -ToString.tests.cpp:<line number>: passed: parseEnums( "EnumName::Value1" ), Equals(std::vector<Catch::StringRef>{"Value1"} ) for: { Value1 } Equals: { Value1 } -ToString.tests.cpp:<line number>: passed: parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2"} ) for: { Value1, Value2 } Equals: { Value1, Value2 } -ToString.tests.cpp:<line number>: passed: parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2, ClassName::EnumName::Value3" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) for: { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } -ToString.tests.cpp:<line number>: passed: parseEnums( "ClassName::EnumName::Value1,ClassName::EnumName::Value2 , ClassName::EnumName::Value3" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) for: { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } +EnumToString.tests.cpp:<line number>: passed: parseEnums( "" ), Equals( std::vector<Catch::StringRef>{} ) for: { } Equals: { } +EnumToString.tests.cpp:<line number>: passed: parseEnums( "ClassName::EnumName::Value1" ), Equals(std::vector<Catch::StringRef>{"Value1"} ) for: { Value1 } Equals: { Value1 } +EnumToString.tests.cpp:<line number>: passed: parseEnums( "Value1" ), Equals( std::vector<Catch::StringRef>{"Value1"} ) for: { Value1 } Equals: { Value1 } +EnumToString.tests.cpp:<line number>: passed: parseEnums( "EnumName::Value1" ), Equals(std::vector<Catch::StringRef>{"Value1"} ) for: { Value1 } Equals: { Value1 } +EnumToString.tests.cpp:<line number>: passed: parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2"} ) for: { Value1, Value2 } Equals: { Value1, Value2 } +EnumToString.tests.cpp:<line number>: passed: parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2, ClassName::EnumName::Value3" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) for: { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } +EnumToString.tests.cpp:<line number>: passed: parseEnums( "ClassName::EnumName::Value1,ClassName::EnumName::Value2 , ClassName::EnumName::Value3" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) for: { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } Tricky.tests.cpp:<line number>: passed: p == 0 for: 0 == 0 Message.tests.cpp:<line number>: passed: true with 1 message: 'this MAY be seen IF info is printed for passing assertions' Message.tests.cpp:<line number>: failed: false with 2 messages: 'this SHOULD be seen' and 'this SHOULD also be seen' @@ -2997,7 +3000,7 @@ InternalBenchmark.tests.cpp:<line number>: passed: med == 18. for: 18.0 == 18.0 InternalBenchmark.tests.cpp:<line number>: passed: q3 == 23. for: 23.0 == 23.0 Misc.tests.cpp:<line number>: passed: Misc.tests.cpp:<line number>: passed: -test cases: 450 | 330 passed | 96 failed | 6 skipped | 18 failed as expected -assertions: 2413 | 2212 passed | 158 failed | 43 failed as expected +test cases: 451 | 331 passed | 96 failed | 6 skipped | 18 failed as expected +assertions: 2416 | 2215 passed | 158 failed | 43 failed as expected diff --git a/tests/SelfTest/Baselines/compact.sw.multi.approved.txt b/tests/SelfTest/Baselines/compact.sw.multi.approved.txt index 19309e5a..39c260af 100644 --- a/tests/SelfTest/Baselines/compact.sw.multi.approved.txt +++ b/tests/SelfTest/Baselines/compact.sw.multi.approved.txt @@ -574,15 +574,18 @@ Approx.tests.cpp:<line number>: passed: 101.000001 != Approx(100).epsilon(0.01) Approx.tests.cpp:<line number>: passed: std::pow(10, -5) != Approx(std::pow(10, -7)) for: 0.00001 != Approx( 0.0000001 ) Message.tests.cpp:<line number>: passed: true with 1 message: 'a' Message.tests.cpp:<line number>: failed: false with 1 message: 'b' -ToString.tests.cpp:<line number>: passed: enumInfo->lookup(0) == "Value1" for: Value1 == "Value1" -ToString.tests.cpp:<line number>: passed: enumInfo->lookup(1) == "Value2" for: Value2 == "Value2" -ToString.tests.cpp:<line number>: passed: enumInfo->lookup(3) == "{** unexpected enum value **}" for: {** unexpected enum value **} +EnumToString.tests.cpp:<line number>: passed: enumInfo.lookup(0) == "Value1" for: Value1 == "Value1" +EnumToString.tests.cpp:<line number>: passed: enumInfo.lookup(1) == "Value2" for: Value2 == "Value2" +EnumToString.tests.cpp:<line number>: passed: enumInfo.lookup(3) == "{** unexpected enum value **}" for: {** unexpected enum value **} == "{** unexpected enum value **}" Skip.tests.cpp:<line number>: skipped: 'This generator is empty' Stream.tests.cpp:<line number>: passed: Catch::makeStream( "" )->isConsole() for: true Matchers.tests.cpp:<line number>: failed: testStringForMatching(), EndsWith( "Substring" ) for: "this string contains 'abc' as a substring" ends with: "Substring" Matchers.tests.cpp:<line number>: failed: testStringForMatching(), EndsWith( "this", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" ends with: "this" (case insensitive) +EnumToString.tests.cpp:<line number>: passed: stringify( LargeEnum::Flag1 ) == "Flag1" for: "Flag1" == "Flag1" +EnumToString.tests.cpp:<line number>: passed: stringify( LargeEnum::Flag2 ) == "Flag2" for: "Flag2" == "Flag2" +EnumToString.tests.cpp:<line number>: passed: stringify( LargeEnum::Flag5 ) == "Flag5" for: "Flag5" == "Flag5" EnumToString.tests.cpp:<line number>: passed: stringify( EnumClass3::Value1 ) == "Value1" for: "Value1" == "Value1" EnumToString.tests.cpp:<line number>: passed: stringify( EnumClass3::Value2 ) == "Value2" for: "Value2" == "Value2" EnumToString.tests.cpp:<line number>: passed: stringify( EnumClass3::Value3 ) == "Value3" for: "Value3" == "Value3" @@ -2744,13 +2747,13 @@ Tricky.tests.cpp:<line number>: passed: ptr.get() == 0 for: 0 == 0 ToStringPair.tests.cpp:<line number>: passed: ::Catch::Detail::stringify( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" for: "{ { 42, "Arthur" }, { "Ford", 24 } }" == "{ { 42, "Arthur" }, { "Ford", 24 } }" -ToString.tests.cpp:<line number>: passed: parseEnums( "" ), Equals( std::vector<Catch::StringRef>{} ) for: { } Equals: { } -ToString.tests.cpp:<line number>: passed: parseEnums( "ClassName::EnumName::Value1" ), Equals(std::vector<Catch::StringRef>{"Value1"} ) for: { Value1 } Equals: { Value1 } -ToString.tests.cpp:<line number>: passed: parseEnums( "Value1" ), Equals( std::vector<Catch::StringRef>{"Value1"} ) for: { Value1 } Equals: { Value1 } -ToString.tests.cpp:<line number>: passed: parseEnums( "EnumName::Value1" ), Equals(std::vector<Catch::StringRef>{"Value1"} ) for: { Value1 } Equals: { Value1 } -ToString.tests.cpp:<line number>: passed: parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2"} ) for: { Value1, Value2 } Equals: { Value1, Value2 } -ToString.tests.cpp:<line number>: passed: parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2, ClassName::EnumName::Value3" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) for: { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } -ToString.tests.cpp:<line number>: passed: parseEnums( "ClassName::EnumName::Value1,ClassName::EnumName::Value2 , ClassName::EnumName::Value3" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) for: { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } +EnumToString.tests.cpp:<line number>: passed: parseEnums( "" ), Equals( std::vector<Catch::StringRef>{} ) for: { } Equals: { } +EnumToString.tests.cpp:<line number>: passed: parseEnums( "ClassName::EnumName::Value1" ), Equals(std::vector<Catch::StringRef>{"Value1"} ) for: { Value1 } Equals: { Value1 } +EnumToString.tests.cpp:<line number>: passed: parseEnums( "Value1" ), Equals( std::vector<Catch::StringRef>{"Value1"} ) for: { Value1 } Equals: { Value1 } +EnumToString.tests.cpp:<line number>: passed: parseEnums( "EnumName::Value1" ), Equals(std::vector<Catch::StringRef>{"Value1"} ) for: { Value1 } Equals: { Value1 } +EnumToString.tests.cpp:<line number>: passed: parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2"} ) for: { Value1, Value2 } Equals: { Value1, Value2 } +EnumToString.tests.cpp:<line number>: passed: parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2, ClassName::EnumName::Value3" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) for: { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } +EnumToString.tests.cpp:<line number>: passed: parseEnums( "ClassName::EnumName::Value1,ClassName::EnumName::Value2 , ClassName::EnumName::Value3" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) for: { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } Tricky.tests.cpp:<line number>: passed: p == 0 for: 0 == 0 Message.tests.cpp:<line number>: passed: true with 1 message: 'this MAY be seen IF info is printed for passing assertions' Message.tests.cpp:<line number>: failed: false with 2 messages: 'this SHOULD be seen' and 'this SHOULD also be seen' @@ -2986,7 +2989,7 @@ InternalBenchmark.tests.cpp:<line number>: passed: med == 18. for: 18.0 == 18.0 InternalBenchmark.tests.cpp:<line number>: passed: q3 == 23. for: 23.0 == 23.0 Misc.tests.cpp:<line number>: passed: Misc.tests.cpp:<line number>: passed: -test cases: 450 | 330 passed | 96 failed | 6 skipped | 18 failed as expected -assertions: 2413 | 2212 passed | 158 failed | 43 failed as expected +test cases: 451 | 331 passed | 96 failed | 6 skipped | 18 failed as expected +assertions: 2416 | 2215 passed | 158 failed | 43 failed as expected diff --git a/tests/SelfTest/Baselines/console.std.approved.txt b/tests/SelfTest/Baselines/console.std.approved.txt index c890017e..78c3d640 100644 --- a/tests/SelfTest/Baselines/console.std.approved.txt +++ b/tests/SelfTest/Baselines/console.std.approved.txt @@ -1743,6 +1743,6 @@ due to unexpected exception with message: Why would you throw a std::string? =============================================================================== -test cases: 450 | 348 passed | 76 failed | 7 skipped | 19 failed as expected -assertions: 2391 | 2212 passed | 136 failed | 43 failed as expected +test cases: 451 | 349 passed | 76 failed | 7 skipped | 19 failed as expected +assertions: 2394 | 2215 passed | 136 failed | 43 failed as expected diff --git a/tests/SelfTest/Baselines/console.sw.approved.txt b/tests/SelfTest/Baselines/console.sw.approved.txt index 9024aa34..add1eaaf 100644 --- a/tests/SelfTest/Baselines/console.sw.approved.txt +++ b/tests/SelfTest/Baselines/console.sw.approved.txt @@ -4241,21 +4241,21 @@ with message: ------------------------------------------------------------------------------- Directly creating an EnumInfo ------------------------------------------------------------------------------- -ToString.tests.cpp:<line number> +EnumToString.tests.cpp:<line number> ............................................................................... -ToString.tests.cpp:<line number>: PASSED: - CHECK( enumInfo->lookup(0) == "Value1" ) +EnumToString.tests.cpp:<line number>: PASSED: + CHECK( enumInfo.lookup(0) == "Value1" ) with expansion: Value1 == "Value1" -ToString.tests.cpp:<line number>: PASSED: - CHECK( enumInfo->lookup(1) == "Value2" ) +EnumToString.tests.cpp:<line number>: PASSED: + CHECK( enumInfo.lookup(1) == "Value2" ) with expansion: Value2 == "Value2" -ToString.tests.cpp:<line number>: PASSED: - CHECK( enumInfo->lookup(3) == "{** unexpected enum value **}" ) +EnumToString.tests.cpp:<line number>: PASSED: + CHECK( enumInfo.lookup(3) == "{** unexpected enum value **}" ) with expansion: {** unexpected enum value **} == @@ -4300,6 +4300,27 @@ with expansion: insensitive) ------------------------------------------------------------------------------- +Enum backed by larger underlying type +------------------------------------------------------------------------------- +EnumToString.tests.cpp:<line number> +............................................................................... + +EnumToString.tests.cpp:<line number>: PASSED: + REQUIRE( stringify( LargeEnum::Flag1 ) == "Flag1" ) +with expansion: + "Flag1" == "Flag1" + +EnumToString.tests.cpp:<line number>: PASSED: + REQUIRE( stringify( LargeEnum::Flag2 ) == "Flag2" ) +with expansion: + "Flag2" == "Flag2" + +EnumToString.tests.cpp:<line number>: PASSED: + REQUIRE( stringify( LargeEnum::Flag5 ) == "Flag5" ) +with expansion: + "Flag5" == "Flag5" + +------------------------------------------------------------------------------- Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM ------------------------------------------------------------------------------- EnumToString.tests.cpp:<line number> @@ -18383,10 +18404,10 @@ with expansion: parseEnums No enums ------------------------------------------------------------------------------- -ToString.tests.cpp:<line number> +EnumToString.tests.cpp:<line number> ............................................................................... -ToString.tests.cpp:<line number>: PASSED: +EnumToString.tests.cpp:<line number>: PASSED: CHECK_THAT( parseEnums( "" ), Equals( std::vector<Catch::StringRef>{} ) ) with expansion: { } Equals: { } @@ -18395,20 +18416,20 @@ with expansion: parseEnums One enum value ------------------------------------------------------------------------------- -ToString.tests.cpp:<line number> +EnumToString.tests.cpp:<line number> ............................................................................... -ToString.tests.cpp:<line number>: PASSED: +EnumToString.tests.cpp:<line number>: PASSED: CHECK_THAT( parseEnums( "ClassName::EnumName::Value1" ), Equals(std::vector<Catch::StringRef>{"Value1"} ) ) with expansion: { Value1 } Equals: { Value1 } -ToString.tests.cpp:<line number>: PASSED: +EnumToString.tests.cpp:<line number>: PASSED: CHECK_THAT( parseEnums( "Value1" ), Equals( std::vector<Catch::StringRef>{"Value1"} ) ) with expansion: { Value1 } Equals: { Value1 } -ToString.tests.cpp:<line number>: PASSED: +EnumToString.tests.cpp:<line number>: PASSED: CHECK_THAT( parseEnums( "EnumName::Value1" ), Equals(std::vector<Catch::StringRef>{"Value1"} ) ) with expansion: { Value1 } Equals: { Value1 } @@ -18417,20 +18438,20 @@ with expansion: parseEnums Multiple enum values ------------------------------------------------------------------------------- -ToString.tests.cpp:<line number> +EnumToString.tests.cpp:<line number> ............................................................................... -ToString.tests.cpp:<line number>: PASSED: +EnumToString.tests.cpp:<line number>: PASSED: CHECK_THAT( parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2"} ) ) with expansion: { Value1, Value2 } Equals: { Value1, Value2 } -ToString.tests.cpp:<line number>: PASSED: +EnumToString.tests.cpp:<line number>: PASSED: CHECK_THAT( parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2, ClassName::EnumName::Value3" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) ) with expansion: { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } -ToString.tests.cpp:<line number>: PASSED: +EnumToString.tests.cpp:<line number>: PASSED: CHECK_THAT( parseEnums( "ClassName::EnumName::Value1,ClassName::EnumName::Value2 , ClassName::EnumName::Value3" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) ) with expansion: { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } @@ -20113,6 +20134,6 @@ Misc.tests.cpp:<line number> Misc.tests.cpp:<line number>: PASSED: =============================================================================== -test cases: 450 | 330 passed | 96 failed | 6 skipped | 18 failed as expected -assertions: 2413 | 2212 passed | 158 failed | 43 failed as expected +test cases: 451 | 331 passed | 96 failed | 6 skipped | 18 failed as expected +assertions: 2416 | 2215 passed | 158 failed | 43 failed as expected diff --git a/tests/SelfTest/Baselines/console.sw.multi.approved.txt b/tests/SelfTest/Baselines/console.sw.multi.approved.txt index f4c6dc10..07195577 100644 --- a/tests/SelfTest/Baselines/console.sw.multi.approved.txt +++ b/tests/SelfTest/Baselines/console.sw.multi.approved.txt @@ -4239,21 +4239,21 @@ with message: ------------------------------------------------------------------------------- Directly creating an EnumInfo ------------------------------------------------------------------------------- -ToString.tests.cpp:<line number> +EnumToString.tests.cpp:<line number> ............................................................................... -ToString.tests.cpp:<line number>: PASSED: - CHECK( enumInfo->lookup(0) == "Value1" ) +EnumToString.tests.cpp:<line number>: PASSED: + CHECK( enumInfo.lookup(0) == "Value1" ) with expansion: Value1 == "Value1" -ToString.tests.cpp:<line number>: PASSED: - CHECK( enumInfo->lookup(1) == "Value2" ) +EnumToString.tests.cpp:<line number>: PASSED: + CHECK( enumInfo.lookup(1) == "Value2" ) with expansion: Value2 == "Value2" -ToString.tests.cpp:<line number>: PASSED: - CHECK( enumInfo->lookup(3) == "{** unexpected enum value **}" ) +EnumToString.tests.cpp:<line number>: PASSED: + CHECK( enumInfo.lookup(3) == "{** unexpected enum value **}" ) with expansion: {** unexpected enum value **} == @@ -4298,6 +4298,27 @@ with expansion: insensitive) ------------------------------------------------------------------------------- +Enum backed by larger underlying type +------------------------------------------------------------------------------- +EnumToString.tests.cpp:<line number> +............................................................................... + +EnumToString.tests.cpp:<line number>: PASSED: + REQUIRE( stringify( LargeEnum::Flag1 ) == "Flag1" ) +with expansion: + "Flag1" == "Flag1" + +EnumToString.tests.cpp:<line number>: PASSED: + REQUIRE( stringify( LargeEnum::Flag2 ) == "Flag2" ) +with expansion: + "Flag2" == "Flag2" + +EnumToString.tests.cpp:<line number>: PASSED: + REQUIRE( stringify( LargeEnum::Flag5 ) == "Flag5" ) +with expansion: + "Flag5" == "Flag5" + +------------------------------------------------------------------------------- Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM ------------------------------------------------------------------------------- EnumToString.tests.cpp:<line number> @@ -18372,10 +18393,10 @@ with expansion: parseEnums No enums ------------------------------------------------------------------------------- -ToString.tests.cpp:<line number> +EnumToString.tests.cpp:<line number> ............................................................................... -ToString.tests.cpp:<line number>: PASSED: +EnumToString.tests.cpp:<line number>: PASSED: CHECK_THAT( parseEnums( "" ), Equals( std::vector<Catch::StringRef>{} ) ) with expansion: { } Equals: { } @@ -18384,20 +18405,20 @@ with expansion: parseEnums One enum value ------------------------------------------------------------------------------- -ToString.tests.cpp:<line number> +EnumToString.tests.cpp:<line number> ............................................................................... -ToString.tests.cpp:<line number>: PASSED: +EnumToString.tests.cpp:<line number>: PASSED: CHECK_THAT( parseEnums( "ClassName::EnumName::Value1" ), Equals(std::vector<Catch::StringRef>{"Value1"} ) ) with expansion: { Value1 } Equals: { Value1 } -ToString.tests.cpp:<line number>: PASSED: +EnumToString.tests.cpp:<line number>: PASSED: CHECK_THAT( parseEnums( "Value1" ), Equals( std::vector<Catch::StringRef>{"Value1"} ) ) with expansion: { Value1 } Equals: { Value1 } -ToString.tests.cpp:<line number>: PASSED: +EnumToString.tests.cpp:<line number>: PASSED: CHECK_THAT( parseEnums( "EnumName::Value1" ), Equals(std::vector<Catch::StringRef>{"Value1"} ) ) with expansion: { Value1 } Equals: { Value1 } @@ -18406,20 +18427,20 @@ with expansion: parseEnums Multiple enum values ------------------------------------------------------------------------------- -ToString.tests.cpp:<line number> +EnumToString.tests.cpp:<line number> ............................................................................... -ToString.tests.cpp:<line number>: PASSED: +EnumToString.tests.cpp:<line number>: PASSED: CHECK_THAT( parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2"} ) ) with expansion: { Value1, Value2 } Equals: { Value1, Value2 } -ToString.tests.cpp:<line number>: PASSED: +EnumToString.tests.cpp:<line number>: PASSED: CHECK_THAT( parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2, ClassName::EnumName::Value3" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) ) with expansion: { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } -ToString.tests.cpp:<line number>: PASSED: +EnumToString.tests.cpp:<line number>: PASSED: CHECK_THAT( parseEnums( "ClassName::EnumName::Value1,ClassName::EnumName::Value2 , ClassName::EnumName::Value3" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) ) with expansion: { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } @@ -20102,6 +20123,6 @@ Misc.tests.cpp:<line number> Misc.tests.cpp:<line number>: PASSED: =============================================================================== -test cases: 450 | 330 passed | 96 failed | 6 skipped | 18 failed as expected -assertions: 2413 | 2212 passed | 158 failed | 43 failed as expected +test cases: 451 | 331 passed | 96 failed | 6 skipped | 18 failed as expected +assertions: 2416 | 2215 passed | 158 failed | 43 failed as expected diff --git a/tests/SelfTest/Baselines/junit.sw.approved.txt b/tests/SelfTest/Baselines/junit.sw.approved.txt index f191b33f..328b466c 100644 --- a/tests/SelfTest/Baselines/junit.sw.approved.txt +++ b/tests/SelfTest/Baselines/junit.sw.approved.txt @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <testsuitesloose text artifact > - <testsuite name="<exe-name>" errors="17" failures="141" skipped="12" tests="2425" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}"> + <testsuite name="<exe-name>" errors="17" failures="141" skipped="12" tests="2428" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}"> <properties> <property name="random-seed" value="1"/> <property name="filters" value=""*" ~[!nonportable] ~[!benchmark] ~[approvals]"/> @@ -506,6 +506,7 @@ with expansion: at Matchers.tests.cpp:<line number> </failure> </testcase> + <testcase classname="<exe-name>.global" name="Enum backed by larger underlying type" time="{duration}" status="run"/> <testcase classname="<exe-name>.global" name="Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM" time="{duration}" status="run"/> <testcase classname="<exe-name>.global" name="Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM" time="{duration}" status="run"/> <testcase classname="<exe-name>.global" name="Epsilon only applies to Approx's value" time="{duration}" status="run"/> diff --git a/tests/SelfTest/Baselines/junit.sw.multi.approved.txt b/tests/SelfTest/Baselines/junit.sw.multi.approved.txt index 3c152dc7..403ed251 100644 --- a/tests/SelfTest/Baselines/junit.sw.multi.approved.txt +++ b/tests/SelfTest/Baselines/junit.sw.multi.approved.txt @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <testsuites> - <testsuite name="<exe-name>" errors="17" failures="141" skipped="12" tests="2425" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}"> + <testsuite name="<exe-name>" errors="17" failures="141" skipped="12" tests="2428" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}"> <properties> <property name="random-seed" value="1"/> <property name="filters" value=""*" ~[!nonportable] ~[!benchmark] ~[approvals]"/> @@ -505,6 +505,7 @@ with expansion: at Matchers.tests.cpp:<line number> </failure> </testcase> + <testcase classname="<exe-name>.global" name="Enum backed by larger underlying type" time="{duration}" status="run"/> <testcase classname="<exe-name>.global" name="Enums can quickly have stringification enabled using CATCH_REGISTER_ENUM" time="{duration}" status="run"/> <testcase classname="<exe-name>.global" name="Enums in namespaces can quickly have stringification enabled using CATCH_REGISTER_ENUM" time="{duration}" status="run"/> <testcase classname="<exe-name>.global" name="Epsilon only applies to Approx's value" time="{duration}" status="run"/> diff --git a/tests/SelfTest/Baselines/sonarqube.sw.approved.txt b/tests/SelfTest/Baselines/sonarqube.sw.approved.txt index fa472c71..f9e851fc 100644 --- a/tests/SelfTest/Baselines/sonarqube.sw.approved.txt +++ b/tests/SelfTest/Baselines/sonarqube.sw.approved.txt @@ -422,16 +422,11 @@ at AssertionHandler.tests.cpp:<line number> <testCase name="Parsing tags with non-alphabetical characters is pass-through" duration="{duration}"/> </file> <file path="tests/<exe-name>/IntrospectiveTests/ToString.tests.cpp"> - <testCase name="Directly creating an EnumInfo" duration="{duration}"/> <testCase name="Exception thrown inside stringify does not fail the test" duration="{duration}"/> <testCase name="Range type with sentinel" duration="{duration}"/> <testCase name="Stringifying char arrays with statically known sizes - char" duration="{duration}"/> <testCase name="Stringifying char arrays with statically known sizes - signed char" duration="{duration}"/> <testCase name="Stringifying char arrays with statically known sizes - unsigned char" duration="{duration}"/> - <testCase name="parseEnums" duration="{duration}"/> - <testCase name="parseEnums/No enums" duration="{duration}"/> - <testCase name="parseEnums/One enum value" duration="{duration}"/> - <t |