~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ is a host application. Run with -? for options ------------------------------------------------------------------------------- # A test name that starts with a # ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: with message: yay ------------------------------------------------------------------------------- #1005: Comparing pointer to int and long (NULL can be either on various systems) ------------------------------------------------------------------------------- Decomposition.tests.cpp: ............................................................................... Decomposition.tests.cpp:: PASSED: REQUIRE( fptr == 0 ) with expansion: 0 == 0 Decomposition.tests.cpp:: PASSED: REQUIRE( fptr == 0l ) with expansion: 0 == 0 ------------------------------------------------------------------------------- #1027 ------------------------------------------------------------------------------- Compilation.tests.cpp: ............................................................................... Compilation.tests.cpp:: PASSED: REQUIRE( y.v == 0 ) with expansion: 0 == 0 Compilation.tests.cpp:: PASSED: REQUIRE( 0 == y.v ) with expansion: 0 == 0 ------------------------------------------------------------------------------- #1147 ------------------------------------------------------------------------------- Compilation.tests.cpp: ............................................................................... Compilation.tests.cpp:: PASSED: REQUIRE( t1 == t2 ) with expansion: {?} == {?} Compilation.tests.cpp:: PASSED: REQUIRE( t1 != t2 ) with expansion: {?} != {?} Compilation.tests.cpp:: PASSED: REQUIRE( t1 < t2 ) with expansion: {?} < {?} Compilation.tests.cpp:: PASSED: REQUIRE( t1 > t2 ) with expansion: {?} > {?} Compilation.tests.cpp:: PASSED: REQUIRE( t1 <= t2 ) with expansion: {?} <= {?} Compilation.tests.cpp:: PASSED: REQUIRE( t1 >= t2 ) with expansion: {?} >= {?} ------------------------------------------------------------------------------- #1175 - Hidden Test ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: ------------------------------------------------------------------------------- #748 - captures with unexpected exceptions outside assertions ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: FAILED: due to unexpected exception with messages: answer := 42 expected exception ------------------------------------------------------------------------------- #748 - captures with unexpected exceptions inside REQUIRE_NOTHROW ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: FAILED: REQUIRE_NOTHROW( thisThrows() ) due to unexpected exception with messages: answer := 42 expected exception ------------------------------------------------------------------------------- #748 - captures with unexpected exceptions inside REQUIRE_THROWS ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: PASSED: REQUIRE_THROWS( thisThrows() ) with message: answer := 42 ------------------------------------------------------------------------------- #809 ------------------------------------------------------------------------------- Compilation.tests.cpp: ............................................................................... Compilation.tests.cpp:: PASSED: REQUIRE( 42 == f ) with expansion: 42 == {?} ------------------------------------------------------------------------------- #833 ------------------------------------------------------------------------------- Compilation.tests.cpp: ............................................................................... Compilation.tests.cpp:: PASSED: REQUIRE( a == t ) with expansion: 3 == 3 Compilation.tests.cpp:: PASSED: CHECK( a == t ) with expansion: 3 == 3 Compilation.tests.cpp:: PASSED: REQUIRE_THROWS( throws_int(true) ) Compilation.tests.cpp:: PASSED: CHECK_THROWS_AS( throws_int(true), int ) Compilation.tests.cpp:: PASSED: REQUIRE_NOTHROW( throws_int(false) ) Compilation.tests.cpp:: PASSED: REQUIRE_THAT( "aaa", Catch::EndsWith("aaa") ) with expansion: "aaa" ends with: "aaa" Compilation.tests.cpp:: PASSED: REQUIRE( templated_tests(3) ) with expansion: true ------------------------------------------------------------------------------- #835 -- errno should not be touched by Catch ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: FAILED: CHECK( f() == 0 ) with expansion: 1 == 0 Misc.tests.cpp:: PASSED: REQUIRE( errno == 1 ) with expansion: 1 == 1 ------------------------------------------------------------------------------- #872 ------------------------------------------------------------------------------- Compilation.tests.cpp: ............................................................................... Compilation.tests.cpp:: PASSED: REQUIRE( x == 4 ) with expansion: {?} == 4 with message: dummy := 0 ------------------------------------------------------------------------------- #961 -- Dynamically created sections should all be reported Looped section 0 ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: with message: Everything is OK ------------------------------------------------------------------------------- #961 -- Dynamically created sections should all be reported Looped section 1 ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: with message: Everything is OK ------------------------------------------------------------------------------- #961 -- Dynamically created sections should all be reported Looped section 2 ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: with message: Everything is OK ------------------------------------------------------------------------------- #961 -- Dynamically created sections should all be reported Looped section 3 ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: with message: Everything is OK ------------------------------------------------------------------------------- #961 -- Dynamically created sections should all be reported Looped section 4 ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: with message: Everything is OK ------------------------------------------------------------------------------- 'Not' checks that should fail ------------------------------------------------------------------------------- Condition.tests.cpp: ............................................................................... Condition.tests.cpp:: FAILED: CHECK( false != false ) Condition.tests.cpp:: FAILED: CHECK( true != true ) Condition.tests.cpp:: FAILED: CHECK( !true ) with expansion: false Condition.tests.cpp:: FAILED: CHECK_FALSE( true ) with expansion: !true Condition.tests.cpp:: FAILED: CHECK( !trueValue ) with expansion: false Condition.tests.cpp:: FAILED: CHECK_FALSE( trueValue ) with expansion: !true Condition.tests.cpp:: FAILED: CHECK( !(1 == 1) ) with expansion: false Condition.tests.cpp:: FAILED: CHECK_FALSE( 1 == 1 ) ------------------------------------------------------------------------------- 'Not' checks that should succeed ------------------------------------------------------------------------------- Condition.tests.cpp: ............................................................................... Condition.tests.cpp:: PASSED: REQUIRE( false == false ) Condition.tests.cpp:: PASSED: REQUIRE( true == true ) Condition.tests.cpp:: PASSED: REQUIRE( !false ) with expansion: true Condition.tests.cpp:: PASSED: REQUIRE_FALSE( false ) with expansion: !false Condition.tests.cpp:: PASSED: REQUIRE( !falseValue ) with expansion: true Condition.tests.cpp:: PASSED: REQUIRE_FALSE( falseValue ) with expansion: !false Condition.tests.cpp:: PASSED: REQUIRE( !(1 == 2) ) with expansion: true Condition.tests.cpp:: PASSED: REQUIRE_FALSE( 1 == 2 ) ------------------------------------------------------------------------------- (unimplemented) static bools can be evaluated compare to true ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( is_true::value == true ) with expansion: true == true Tricky.tests.cpp:: PASSED: REQUIRE( true == is_true::value ) with expansion: true == true ------------------------------------------------------------------------------- (unimplemented) static bools can be evaluated compare to false ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( is_true::value == false ) with expansion: false == false Tricky.tests.cpp:: PASSED: REQUIRE( false == is_true::value ) with expansion: false == false ------------------------------------------------------------------------------- (unimplemented) static bools can be evaluated negation ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( !is_true::value ) with expansion: true ------------------------------------------------------------------------------- (unimplemented) static bools can be evaluated double negation ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( !!is_true::value ) with expansion: true ------------------------------------------------------------------------------- (unimplemented) static bools can be evaluated direct ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( is_true::value ) with expansion: true Tricky.tests.cpp:: PASSED: REQUIRE_FALSE( is_true::value ) with expansion: !false ------------------------------------------------------------------------------- A METHOD_AS_TEST_CASE based test run that fails ------------------------------------------------------------------------------- Class.tests.cpp: ............................................................................... Class.tests.cpp:: FAILED: REQUIRE( s == "world" ) with expansion: "hello" == "world" ------------------------------------------------------------------------------- A METHOD_AS_TEST_CASE based test run that succeeds ------------------------------------------------------------------------------- Class.tests.cpp: ............................................................................... Class.tests.cpp:: PASSED: REQUIRE( s == "hello" ) with expansion: "hello" == "hello" ------------------------------------------------------------------------------- A TEST_CASE_METHOD based test run that fails ------------------------------------------------------------------------------- Class.tests.cpp: ............................................................................... Class.tests.cpp:: FAILED: REQUIRE( m_a == 2 ) with expansion: 1 == 2 ------------------------------------------------------------------------------- A TEST_CASE_METHOD based test run that succeeds ------------------------------------------------------------------------------- Class.tests.cpp: ............................................................................... Class.tests.cpp:: PASSED: REQUIRE( m_a == 1 ) with expansion: 1 == 1 ------------------------------------------------------------------------------- A couple of nested sections followed by a failure Outer Inner ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: with message: that's not flying - that's failing in style ------------------------------------------------------------------------------- A couple of nested sections followed by a failure ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: FAILED: explicitly with message: to infinity and beyond ------------------------------------------------------------------------------- A failing expression with a non streamable type is still captured ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: FAILED: CHECK( &o1 == &o2 ) with expansion: 0x == 0x Tricky.tests.cpp:: FAILED: CHECK( o1 == o2 ) with expansion: {?} == {?} ------------------------------------------------------------------------------- Absolute margin ------------------------------------------------------------------------------- Approx.tests.cpp: ............................................................................... Approx.tests.cpp:: PASSED: REQUIRE( 104.0 != Approx(100.0) ) with expansion: 104.0 != Approx( 100.0 ) Approx.tests.cpp:: PASSED: REQUIRE( 104.0 == Approx(100.0).margin(5) ) with expansion: 104.0 == Approx( 100.0 ) Approx.tests.cpp:: PASSED: REQUIRE( 104.0 == Approx(100.0).margin(4) ) with expansion: 104.0 == Approx( 100.0 ) Approx.tests.cpp:: PASSED: REQUIRE( 104.0 != Approx(100.0).margin(3) ) with expansion: 104.0 != Approx( 100.0 ) Approx.tests.cpp:: PASSED: REQUIRE( 100.3 != Approx(100.0) ) with expansion: 100.3 != Approx( 100.0 ) Approx.tests.cpp:: PASSED: REQUIRE( 100.3 == Approx(100.0).margin(0.5) ) with expansion: 100.3 == Approx( 100.0 ) ------------------------------------------------------------------------------- An empty test with no assertions ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... No assertions in test case 'An empty test with no assertions' ------------------------------------------------------------------------------- An expression with side-effects should only be evaluated once ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( i++ == 7 ) with expansion: 7 == 7 Tricky.tests.cpp:: PASSED: REQUIRE( i++ == 8 ) with expansion: 8 == 8 ------------------------------------------------------------------------------- An unchecked exception reports the line of the last assertion ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: PASSED: CHECK( 1 == 1 ) Exception.tests.cpp:: FAILED: {Unknown expression after the reported line} due to unexpected exception with message: unexpected exception ------------------------------------------------------------------------------- Anonymous test case 1 ------------------------------------------------------------------------------- VariadicMacros.tests.cpp: ............................................................................... VariadicMacros.tests.cpp:: PASSED: with message: anonymous test case ------------------------------------------------------------------------------- Approx setters validate their arguments ------------------------------------------------------------------------------- Approx.tests.cpp: ............................................................................... Approx.tests.cpp:: PASSED: REQUIRE_NOTHROW( Approx(0).margin(0) ) Approx.tests.cpp:: PASSED: REQUIRE_NOTHROW( Approx(0).margin(1234656) ) Approx.tests.cpp:: PASSED: REQUIRE_THROWS_AS( Approx(0).margin(-2), std::domain_error ) Approx.tests.cpp:: PASSED: REQUIRE_NOTHROW( Approx(0).epsilon(0) ) Approx.tests.cpp:: PASSED: REQUIRE_NOTHROW( Approx(0).epsilon(1) ) Approx.tests.cpp:: PASSED: REQUIRE_THROWS_AS( Approx(0).epsilon(-0.001), std::domain_error ) Approx.tests.cpp:: PASSED: REQUIRE_THROWS_AS( Approx(0).epsilon(1.0001), std::domain_error ) ------------------------------------------------------------------------------- Approx with exactly-representable margin ------------------------------------------------------------------------------- Approx.tests.cpp: ............................................................................... Approx.tests.cpp:: PASSED: CHECK( 0.25f == Approx(0.0f).margin(0.25f) ) with expansion: 0.25f == Approx( 0.0 ) Approx.tests.cpp:: PASSED: CHECK( 0.0f == Approx(0.25f).margin(0.25f) ) with expansion: 0.0f == Approx( 0.25 ) Approx.tests.cpp:: PASSED: CHECK( 0.5f == Approx(0.25f).margin(0.25f) ) with expansion: 0.5f == Approx( 0.25 ) Approx.tests.cpp:: PASSED: CHECK( 245.0f == Approx(245.25f).margin(0.25f) ) with expansion: 245.0f == Approx( 245.25 ) Approx.tests.cpp:: PASSED: CHECK( 245.5f == Approx(245.25f).margin(0.25f) ) with expansion: 245.5f == Approx( 245.25 ) ------------------------------------------------------------------------------- Approximate PI ------------------------------------------------------------------------------- Approx.tests.cpp: ............................................................................... Approx.tests.cpp:: PASSED: REQUIRE( divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) ) with expansion: 3.1428571429 == Approx( 3.141 ) Approx.tests.cpp:: PASSED: REQUIRE( divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) ) with expansion: 3.1428571429 != Approx( 3.141 ) ------------------------------------------------------------------------------- Approximate comparisons with different epsilons ------------------------------------------------------------------------------- Approx.tests.cpp: ............................................................................... Approx.tests.cpp:: PASSED: REQUIRE( d != Approx( 1.231 ) ) with expansion: 1.23 != Approx( 1.231 ) Approx.tests.cpp:: PASSED: REQUIRE( d == Approx( 1.231 ).epsilon( 0.1 ) ) with expansion: 1.23 == Approx( 1.231 ) ------------------------------------------------------------------------------- Approximate comparisons with floats ------------------------------------------------------------------------------- Approx.tests.cpp: ............................................................................... Approx.tests.cpp:: PASSED: REQUIRE( 1.23f == Approx( 1.23f ) ) with expansion: 1.23f == Approx( 1.2300000191 ) Approx.tests.cpp:: PASSED: REQUIRE( 0.0f == Approx( 0.0f ) ) with expansion: 0.0f == Approx( 0.0 ) ------------------------------------------------------------------------------- Approximate comparisons with ints ------------------------------------------------------------------------------- Approx.tests.cpp: ............................................................................... Approx.tests.cpp:: PASSED: REQUIRE( 1 == Approx( 1 ) ) with expansion: 1 == Approx( 1.0 ) Approx.tests.cpp:: PASSED: REQUIRE( 0 == Approx( 0 ) ) with expansion: 0 == Approx( 0.0 ) ------------------------------------------------------------------------------- Approximate comparisons with mixed numeric types ------------------------------------------------------------------------------- Approx.tests.cpp: ............................................................................... Approx.tests.cpp:: PASSED: REQUIRE( 1.0f == Approx( 1 ) ) with expansion: 1.0f == Approx( 1.0 ) Approx.tests.cpp:: PASSED: REQUIRE( 0 == Approx( dZero) ) with expansion: 0 == Approx( 0.0 ) Approx.tests.cpp:: PASSED: REQUIRE( 0 == Approx( dSmall ).margin( 0.001 ) ) with expansion: 0 == Approx( 0.00001 ) Approx.tests.cpp:: PASSED: REQUIRE( 1.234f == Approx( dMedium ) ) with expansion: 1.234f == Approx( 1.234 ) Approx.tests.cpp:: PASSED: REQUIRE( dMedium == Approx( 1.234f ) ) with expansion: 1.234 == Approx( 1.2339999676 ) ------------------------------------------------------------------------------- Assertions then sections ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( true ) ------------------------------------------------------------------------------- Assertions then sections A section ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( true ) ------------------------------------------------------------------------------- Assertions then sections A section Another section ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( true ) ------------------------------------------------------------------------------- Assertions then sections ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( true ) ------------------------------------------------------------------------------- Assertions then sections A section ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( true ) ------------------------------------------------------------------------------- Assertions then sections A section Another other section ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( true ) ------------------------------------------------------------------------------- Assorted miscellaneous tests ------------------------------------------------------------------------------- Approx.tests.cpp: ............................................................................... Approx.tests.cpp:: PASSED: REQUIRE( INFINITY == Approx(INFINITY) ) with expansion: inff == Approx( inf ) Approx.tests.cpp:: PASSED: REQUIRE( NAN != Approx(NAN) ) with expansion: nanf != Approx( nan ) Approx.tests.cpp:: PASSED: REQUIRE_FALSE( NAN == Approx(NAN) ) with expansion: !(nanf == Approx( nan )) ------------------------------------------------------------------------------- Bitfields can be captured (#1027) ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( y.v == 0 ) with expansion: 0 == 0 Tricky.tests.cpp:: PASSED: REQUIRE( 0 == y.v ) with expansion: 0 == 0 ------------------------------------------------------------------------------- Capture and info messages Capture should stringify like assertions ------------------------------------------------------------------------------- ToStringGeneral.tests.cpp: ............................................................................... ToStringGeneral.tests.cpp:: PASSED: REQUIRE( true ) with message: i := 2 ------------------------------------------------------------------------------- Capture and info messages Info should NOT stringify the way assertions do ------------------------------------------------------------------------------- ToStringGeneral.tests.cpp: ............................................................................... ToStringGeneral.tests.cpp:: PASSED: REQUIRE( true ) with message: 3 ------------------------------------------------------------------------------- Character pretty printing Specifically escaped ------------------------------------------------------------------------------- ToStringGeneral.tests.cpp: ............................................................................... ToStringGeneral.tests.cpp:: PASSED: CHECK( tab == '\t' ) with expansion: '\t' == '\t' ToStringGeneral.tests.cpp:: PASSED: CHECK( newline == '\n' ) with expansion: '\n' == '\n' ToStringGeneral.tests.cpp:: PASSED: CHECK( carr_return == '\r' ) with expansion: '\r' == '\r' ToStringGeneral.tests.cpp:: PASSED: CHECK( form_feed == '\f' ) with expansion: '\f' == '\f' ------------------------------------------------------------------------------- Character pretty printing General chars ------------------------------------------------------------------------------- ToStringGeneral.tests.cpp: ............................................................................... ToStringGeneral.tests.cpp:: PASSED: CHECK( space == ' ' ) with expansion: ' ' == ' ' ToStringGeneral.tests.cpp:: PASSED: REQUIRE( c == chars[i] ) with expansion: 'a' == 'a' ToStringGeneral.tests.cpp:: PASSED: REQUIRE( c == chars[i] ) with expansion: 'z' == 'z' ToStringGeneral.tests.cpp:: PASSED: REQUIRE( c == chars[i] ) with expansion: 'A' == 'A' ToStringGeneral.tests.cpp:: PASSED: REQUIRE( c == chars[i] ) with expansion: 'Z' == 'Z' ------------------------------------------------------------------------------- Character pretty printing Low ASCII ------------------------------------------------------------------------------- ToStringGeneral.tests.cpp: ............................................................................... ToStringGeneral.tests.cpp:: PASSED: CHECK( null_terminator == '\0' ) with expansion: 0 == 0 ToStringGeneral.tests.cpp:: PASSED: REQUIRE( c == i ) with expansion: 2 == 2 ToStringGeneral.tests.cpp:: PASSED: REQUIRE( c == i ) with expansion: 3 == 3 ToStringGeneral.tests.cpp:: PASSED: REQUIRE( c == i ) with expansion: 4 == 4 ToStringGeneral.tests.cpp:: PASSED: REQUIRE( c == i ) with expansion: 5 == 5 ------------------------------------------------------------------------------- Commas in various macros are allowed ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE_THROWS( std::vector{constructor_throws{}, constructor_throws{}} ) Tricky.tests.cpp:: PASSED: CHECK_THROWS( std::vector{constructor_throws{}, constructor_throws{}} ) Tricky.tests.cpp:: PASSED: REQUIRE_NOTHROW( std::vector{1, 2, 3} == std::vector{1, 2, 3} ) Tricky.tests.cpp:: PASSED: CHECK_NOTHROW( std::vector{1, 2, 3} == std::vector{1, 2, 3} ) Tricky.tests.cpp:: PASSED: REQUIRE( std::vector{1, 2} == std::vector{1, 2} ) with expansion: { 1, 2 } == { 1, 2 } Tricky.tests.cpp:: PASSED: CHECK( std::vector{1, 2} == std::vector{1, 2} ) with expansion: { 1, 2 } == { 1, 2 } Tricky.tests.cpp:: PASSED: REQUIRE_FALSE( std::vector{1, 2} == std::vector{1, 2, 3} ) with expansion: !({ 1, 2 } == { 1, 2, 3 }) Tricky.tests.cpp:: PASSED: CHECK_FALSE( std::vector{1, 2} == std::vector{1, 2, 3} ) with expansion: !({ 1, 2 } == { 1, 2, 3 }) Tricky.tests.cpp:: PASSED: CHECK_NOFAIL( std::vector{1, 2} == std::vector{1, 2} ) with expansion: { 1, 2 } == { 1, 2 } Tricky.tests.cpp:: PASSED: CHECKED_IF( std::vector{1, 2} == std::vector{1, 2} ) with expansion: { 1, 2 } == { 1, 2 } Tricky.tests.cpp:: PASSED: REQUIRE( true ) Tricky.tests.cpp:: PASSED: CHECKED_ELSE( std::vector{1, 2} == std::vector{1, 2} ) with expansion: { 1, 2 } == { 1, 2 } ------------------------------------------------------------------------------- Comparing function pointers ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( a ) with expansion: 0x Tricky.tests.cpp:: PASSED: REQUIRE( a == &foo ) with expansion: 0x == 0x ------------------------------------------------------------------------------- Comparison with explicitly convertible types ------------------------------------------------------------------------------- Approx.tests.cpp: ............................................................................... Approx.tests.cpp:: PASSED: REQUIRE( td == Approx(10.0) ) with expansion: StrongDoubleTypedef(10) == Approx( 10.0 ) Approx.tests.cpp:: PASSED: REQUIRE( Approx(10.0) == td ) with expansion: Approx( 10.0 ) == StrongDoubleTypedef(10) Approx.tests.cpp:: PASSED: REQUIRE( td != Approx(11.0) ) with expansion: StrongDoubleTypedef(10) != Approx( 11.0 ) Approx.tests.cpp:: PASSED: REQUIRE( Approx(11.0) != td ) with expansion: Approx( 11.0 ) != StrongDoubleTypedef(10) Approx.tests.cpp:: PASSED: REQUIRE( td <= Approx(10.0) ) with expansion: StrongDoubleTypedef(10) <= Approx( 10.0 ) Approx.tests.cpp:: PASSED: REQUIRE( td <= Approx(11.0) ) with expansion: StrongDoubleTypedef(10) <= Approx( 11.0 ) Approx.tests.cpp:: PASSED: REQUIRE( Approx(10.0) <= td ) with expansion: Approx( 10.0 ) <= StrongDoubleTypedef(10) Approx.tests.cpp:: PASSED: REQUIRE( Approx(9.0) <= td ) with expansion: Approx( 9.0 ) <= StrongDoubleTypedef(10) Approx.tests.cpp:: PASSED: REQUIRE( td >= Approx(9.0) ) with expansion: StrongDoubleTypedef(10) >= Approx( 9.0 ) Approx.tests.cpp:: PASSED: REQUIRE( td >= Approx(td) ) with expansion: StrongDoubleTypedef(10) >= Approx( 10.0 ) Approx.tests.cpp:: PASSED: REQUIRE( Approx(td) >= td ) with expansion: Approx( 10.0 ) >= StrongDoubleTypedef(10) Approx.tests.cpp:: PASSED: REQUIRE( Approx(11.0) >= td ) with expansion: Approx( 11.0 ) >= StrongDoubleTypedef(10) ------------------------------------------------------------------------------- Comparisons between ints where one side is computed ------------------------------------------------------------------------------- Condition.tests.cpp: ............................................................................... Condition.tests.cpp:: PASSED: CHECK( 54 == 6*9 ) with expansion: 54 == 54 ------------------------------------------------------------------------------- Comparisons between unsigned ints and negative signed ints match c++ standard behaviour ------------------------------------------------------------------------------- Condition.tests.cpp: ............................................................................... Condition.tests.cpp:: PASSED: CHECK( ( -1 > 2u ) ) with expansion: true Condition.tests.cpp:: PASSED: CHECK( -1 > 2u ) with expansion: -1 > 2 Condition.tests.cpp:: PASSED: CHECK( ( 2u < -1 ) ) with expansion: true Condition.tests.cpp:: PASSED: CHECK( 2u < -1 ) with expansion: 2 < -1 Condition.tests.cpp:: PASSED: CHECK( ( minInt > 2u ) ) with expansion: true Condition.tests.cpp:: PASSED: CHECK( minInt > 2u ) with expansion: -2147483648 > 2 ------------------------------------------------------------------------------- Comparisons with int literals don't warn when mixing signed/ unsigned ------------------------------------------------------------------------------- Condition.tests.cpp: ............................................................................... Condition.tests.cpp:: PASSED: REQUIRE( i == 1 ) with expansion: 1 == 1 Condition.tests.cpp:: PASSED: REQUIRE( ui == 2 ) with expansion: 2 == 2 Condition.tests.cpp:: PASSED: REQUIRE( l == 3 ) with expansion: 3 == 3 Condition.tests.cpp:: PASSED: REQUIRE( ul == 4 ) with expansion: 4 == 4 Condition.tests.cpp:: PASSED: REQUIRE( c == 5 ) with expansion: 5 == 5 Condition.tests.cpp:: PASSED: REQUIRE( uc == 6 ) with expansion: 6 == 6 Condition.tests.cpp:: PASSED: REQUIRE( 1 == i ) with expansion: 1 == 1 Condition.tests.cpp:: PASSED: REQUIRE( 2 == ui ) with expansion: 2 == 2 Condition.tests.cpp:: PASSED: REQUIRE( 3 == l ) with expansion: 3 == 3 Condition.tests.cpp:: PASSED: REQUIRE( 4 == ul ) with expansion: 4 == 4 Condition.tests.cpp:: PASSED: REQUIRE( 5 == c ) with expansion: 5 == 5 Condition.tests.cpp:: PASSED: REQUIRE( 6 == uc ) with expansion: 6 == 6 Condition.tests.cpp:: PASSED: REQUIRE( (std::numeric_limits::max)() > ul ) with expansion: 4294967295 (0x) > 4 ------------------------------------------------------------------------------- Contains string matcher ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: FAILED: CHECK_THAT( testStringForMatching(), Contains("not there", Catch::CaseSensitive::No) ) with expansion: "this string contains 'abc' as a substring" contains: "not there" (case insensitive) Matchers.tests.cpp:: FAILED: CHECK_THAT( testStringForMatching(), Contains("STRING") ) with expansion: "this string contains 'abc' as a substring" contains: "STRING" ------------------------------------------------------------------------------- Custom exceptions can be translated when testing for nothrow ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: FAILED: REQUIRE_NOTHROW( throwCustom() ) due to unexpected exception with message: custom exception - not std ------------------------------------------------------------------------------- Custom exceptions can be translated when testing for throwing as something else ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: FAILED: REQUIRE_THROWS_AS( throwCustom(), std::exception ) due to unexpected exception with message: custom exception - not std ------------------------------------------------------------------------------- Custom std-exceptions can be custom translated ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: FAILED: due to unexpected exception with message: custom std exception ------------------------------------------------------------------------------- Default scale is invisible to comparison ------------------------------------------------------------------------------- Approx.tests.cpp: ............................................................................... Approx.tests.cpp:: PASSED: REQUIRE( 101.000001 != Approx(100).epsilon(0.01) ) with expansion: 101.000001 != Approx( 100.0 ) Approx.tests.cpp:: PASSED: REQUIRE( std::pow(10, -5) != Approx(std::pow(10, -7)) ) with expansion: 0.00001 != Approx( 0.0000001 ) ------------------------------------------------------------------------------- EndsWith string matcher ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: FAILED: CHECK_THAT( testStringForMatching(), EndsWith("Substring") ) with expansion: "this string contains 'abc' as a substring" ends with: "Substring" Matchers.tests.cpp:: FAILED: CHECK_THAT( testStringForMatching(), EndsWith("this", Catch::CaseSensitive::No) ) with expansion: "this string contains 'abc' as a substring" ends with: "this" (case insensitive) ------------------------------------------------------------------------------- Epsilon only applies to Approx's value ------------------------------------------------------------------------------- Approx.tests.cpp: ............................................................................... Approx.tests.cpp:: PASSED: REQUIRE( 101.01 != Approx(100).epsilon(0.01) ) with expansion: 101.01 != Approx( 100.0 ) ------------------------------------------------------------------------------- Equality checks that should fail ------------------------------------------------------------------------------- Condition.tests.cpp: ............................................................................... Condition.tests.cpp:: FAILED: CHECK( data.int_seven == 6 ) with expansion: 7 == 6 Condition.tests.cpp:: FAILED: CHECK( data.int_seven == 8 ) with expansion: 7 == 8 Condition.tests.cpp:: FAILED: CHECK( data.int_seven == 0 ) with expansion: 7 == 0 Condition.tests.cpp:: FAILED: CHECK( data.float_nine_point_one == Approx( 9.11f ) ) with expansion: 9.1f == Approx( 9.1099996567 ) Condition.tests.cpp:: FAILED: CHECK( data.float_nine_point_one == Approx( 9.0f ) ) with expansion: 9.1f == Approx( 9.0 ) Condition.tests.cpp:: FAILED: CHECK( data.float_nine_point_one == Approx( 1 ) ) with expansion: 9.1f == Approx( 1.0 ) Condition.tests.cpp:: FAILED: CHECK( data.float_nine_point_one == Approx( 0 ) ) with expansion: 9.1f == Approx( 0.0 ) Condition.tests.cpp:: FAILED: CHECK( data.double_pi == Approx( 3.1415 ) ) with expansion: 3.1415926535 == Approx( 3.1415 ) Condition.tests.cpp:: FAILED: CHECK( data.str_hello == "goodbye" ) with expansion: "hello" == "goodbye" Condition.tests.cpp:: FAILED: CHECK( data.str_hello == "hell" ) with expansion: "hello" == "hell" Condition.tests.cpp:: FAILED: CHECK( data.str_hello == "hello1" ) with expansion: "hello" == "hello1" Condition.tests.cpp:: FAILED: CHECK( data.str_hello.size() == 6 ) with expansion: 5 == 6 Condition.tests.cpp:: FAILED: CHECK( x == Approx( 1.301 ) ) with expansion: 1.3 == Approx( 1.301 ) ------------------------------------------------------------------------------- Equality checks that should succeed ------------------------------------------------------------------------------- Condition.tests.cpp: ............................................................................... Condition.tests.cpp:: PASSED: REQUIRE( data.int_seven == 7 ) with expansion: 7 == 7 Condition.tests.cpp:: PASSED: REQUIRE( data.float_nine_point_one == Approx( 9.1f ) ) with expansion: 9.1f == Approx( 9.1000003815 ) Condition.tests.cpp:: PASSED: REQUIRE( data.double_pi == Approx( 3.1415926535 ) ) with expansion: 3.1415926535 == Approx( 3.1415926535 ) Condition.tests.cpp:: PASSED: REQUIRE( data.str_hello == "hello" ) with expansion: "hello" == "hello" Condition.tests.cpp:: PASSED: REQUIRE( "hello" == data.str_hello ) with expansion: "hello" == "hello" Condition.tests.cpp:: PASSED: REQUIRE( data.str_hello.size() == 5 ) with expansion: 5 == 5 Condition.tests.cpp:: PASSED: REQUIRE( x == Approx( 1.3 ) ) with expansion: 1.3 == Approx( 1.3 ) ------------------------------------------------------------------------------- Equals ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: CHECK_THAT( testStringForMatching(), Equals("this string contains 'abc' as a substring") ) with expansion: "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring" Matchers.tests.cpp:: PASSED: CHECK_THAT( testStringForMatching(), Equals("this string contains 'ABC' as a substring", Catch::CaseSensitive::No) ) with expansion: "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring" (case insensitive) ------------------------------------------------------------------------------- Equals string matcher ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: FAILED: CHECK_THAT( testStringForMatching(), Equals("this string contains 'ABC' as a substring") ) with expansion: "this string contains 'abc' as a substring" equals: "this string contains 'ABC' as a substring" Matchers.tests.cpp:: FAILED: CHECK_THAT( testStringForMatching(), Equals("something else", Catch::CaseSensitive::No) ) with expansion: "this string contains 'abc' as a substring" equals: "something else" (case insensitive) ------------------------------------------------------------------------------- Exception matchers that fail No exception ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: FAILED: CHECK_THROWS_MATCHES( doesNotThrow(), SpecialException, ExceptionMatcher{1} ) because no exception was thrown where one was expected: Matchers.tests.cpp:: FAILED: REQUIRE_THROWS_MATCHES( doesNotThrow(), SpecialException, ExceptionMatcher{1} ) because no exception was thrown where one was expected: ------------------------------------------------------------------------------- Exception matchers that fail Type mismatch ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: FAILED: CHECK_THROWS_MATCHES( throwsAsInt(1), SpecialException, ExceptionMatcher{1} ) due to unexpected exception with message: Unknown exception Matchers.tests.cpp:: FAILED: REQUIRE_THROWS_MATCHES( throwsAsInt(1), SpecialException, ExceptionMatcher{1} ) due to unexpected exception with message: Unknown exception ------------------------------------------------------------------------------- Exception matchers that fail Contents are wrong ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: FAILED: CHECK_THROWS_MATCHES( throws(3), SpecialException, ExceptionMatcher{1} ) with expansion: {?} special exception has value of 1 Matchers.tests.cpp:: FAILED: REQUIRE_THROWS_MATCHES( throws(4), SpecialException, ExceptionMatcher{1} ) with expansion: {?} special exception has value of 1 ------------------------------------------------------------------------------- Exception matchers that succeed ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: CHECK_THROWS_MATCHES( throws(1), SpecialException, ExceptionMatcher{1} ) with expansion: {?} special exception has value of 1 Matchers.tests.cpp:: PASSED: REQUIRE_THROWS_MATCHES( throws(2), SpecialException, ExceptionMatcher{2} ) with expansion: {?} special exception has value of 2 ------------------------------------------------------------------------------- Exception messages can be tested for exact match ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: PASSED: REQUIRE_THROWS_WITH( thisThrows(), "expected exception" ) with expansion: "expected exception" equals: "expected exception" ------------------------------------------------------------------------------- Exception messages can be tested for different case ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: PASSED: REQUIRE_THROWS_WITH( thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No ) ) with expansion: "expected exception" equals: "expected exception" (case insensitive) ------------------------------------------------------------------------------- Exception messages can be tested for wildcarded ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: PASSED: REQUIRE_THROWS_WITH( thisThrows(), StartsWith( "expected" ) ) with expansion: "expected exception" starts with: "expected" Exception.tests.cpp:: PASSED: REQUIRE_THROWS_WITH( thisThrows(), EndsWith( "exception" ) ) with expansion: "expected exception" ends with: "exception" Exception.tests.cpp:: PASSED: REQUIRE_THROWS_WITH( thisThrows(), Contains( "except" ) ) with expansion: "expected exception" contains: "except" Exception.tests.cpp:: PASSED: REQUIRE_THROWS_WITH( thisThrows(), Contains( "exCept", Catch::CaseSensitive::No ) ) with expansion: "expected exception" contains: "except" (case insensitive) ------------------------------------------------------------------------------- Expected exceptions that don't throw or unexpected exceptions fail the test ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: FAILED: CHECK_THROWS_AS( thisThrows(), std::string ) due to unexpected exception with message: expected exception Exception.tests.cpp:: FAILED: CHECK_THROWS_AS( thisDoesntThrow(), std::domain_error ) because no exception was thrown where one was expected: Exception.tests.cpp:: FAILED: CHECK_NOTHROW( thisThrows() ) due to unexpected exception with message: expected exception ------------------------------------------------------------------------------- FAIL aborts the test ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... Message.tests.cpp:: FAILED: explicitly with message: This is a failure ------------------------------------------------------------------------------- FAIL does not require an argument ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... Message.tests.cpp:: FAILED: ------------------------------------------------------------------------------- FAIL_CHECK does not abort the test ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... Message.tests.cpp:: FAILED: explicitly with message: This is a failure Message.tests.cpp:: warning: This message appears in the output ------------------------------------------------------------------------------- Factorials are computed ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( Factorial(0) == 1 ) with expansion: 1 == 1 Misc.tests.cpp:: PASSED: REQUIRE( Factorial(1) == 1 ) with expansion: 1 == 1 Misc.tests.cpp:: PASSED: REQUIRE( Factorial(2) == 2 ) with expansion: 2 == 2 Misc.tests.cpp:: PASSED: REQUIRE( Factorial(3) == 6 ) with expansion: 6 == 6 Misc.tests.cpp:: PASSED: REQUIRE( Factorial(10) == 3628800 ) with expansion: 3628800 (0x) == 3628800 (0x) ------------------------------------------------------------------------------- Floating point matchers: double Margin ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 1., WithinAbs(1., 0) ) with expansion: 1.0 is within 0.0 of 1.0 Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 0., WithinAbs(1., 1) ) with expansion: 0.0 is within 1.0 of 1.0 Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 0., !WithinAbs(1., 0.99) ) with expansion: 0.0 not is within 0.99 of 1.0 Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 0., !WithinAbs(1., 0.99) ) with expansion: 0.0 not is within 0.99 of 1.0 Matchers.tests.cpp:: PASSED: REQUIRE_THAT( NAN, !WithinAbs(NAN, 0) ) with expansion: nanf not is within 0.0 of nan ------------------------------------------------------------------------------- Floating point matchers: double ULPs ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 1., WithinULP(1., 0) ) with expansion: 1.0 is within 0 ULPs of 1.0 Matchers.tests.cpp:: PASSED: REQUIRE_THAT( std::nextafter(1., 2.), WithinULP(1., 1) ) with expansion: 1.0 is within 1 ULPs of 1.0 Matchers.tests.cpp:: PASSED: REQUIRE_THAT( std::nextafter(1., 0.), WithinULP(1., 1) ) with expansion: 1.0 is within 1 ULPs of 1.0 Matchers.tests.cpp:: PASSED: REQUIRE_THAT( std::nextafter(1., 2.), !WithinULP(1., 0) ) with expansion: 1.0 not is within 0 ULPs of 1.0 Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 1., WithinULP(1., 0) ) with expansion: 1.0 is within 0 ULPs of 1.0 Matchers.tests.cpp:: PASSED: REQUIRE_THAT( -0., WithinULP(0., 0) ) with expansion: -0.0 is within 0 ULPs of 0.0 Matchers.tests.cpp:: PASSED: REQUIRE_THAT( NAN, !WithinULP(NAN, 123) ) with expansion: nanf not is within 123 ULPs of nanf ------------------------------------------------------------------------------- Floating point matchers: double Composed ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 1., WithinAbs(1., 0.5) || WithinULP(2., 1) ) with expansion: 1.0 ( is within 0.5 of 1.0 or is within 1 ULPs of 2.0 ) Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 1., WithinAbs(2., 0.5) || WithinULP(1., 0) ) with expansion: 1.0 ( is within 0.5 of 2.0 or is within 0 ULPs of 1.0 ) Matchers.tests.cpp:: PASSED: REQUIRE_THAT( NAN, !(WithinAbs(NAN, 100) || WithinULP(NAN, 123)) ) with expansion: nanf not ( is within 100.0 of nan or is within 123 ULPs of nanf ) ------------------------------------------------------------------------------- Floating point matchers: double Constructor validation ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: REQUIRE_NOTHROW( WithinAbs(1., 0.) ) Matchers.tests.cpp:: PASSED: REQUIRE_THROWS_AS( WithinAbs(1., -1.), std::domain_error ) Matchers.tests.cpp:: PASSED: REQUIRE_NOTHROW( WithinULP(1., 0) ) Matchers.tests.cpp:: PASSED: REQUIRE_THROWS_AS( WithinULP(1., -1), std::domain_error ) ------------------------------------------------------------------------------- Floating point matchers: float Margin ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 1.f, WithinAbs(1.f, 0) ) with expansion: 1.0f is within 0.0 of 1.0 Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 0.f, WithinAbs(1.f, 1) ) with expansion: 0.0f is within 1.0 of 1.0 Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 0.f, !WithinAbs(1.f, 0.99f) ) with expansion: 0.0f not is within 0.9900000095 of 1.0 Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 0.f, !WithinAbs(1.f, 0.99f) ) with expansion: 0.0f not is within 0.9900000095 of 1.0 Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 0.f, WithinAbs(-0.f, 0) ) with expansion: 0.0f is within 0.0 of -0.0 Matchers.tests.cpp:: PASSED: REQUIRE_THAT( NAN, !WithinAbs(NAN, 0) ) with expansion: nanf not is within 0.0 of nan ------------------------------------------------------------------------------- Floating point matchers: float ULPs ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 1.f, WithinULP(1.f, 0) ) with expansion: 1.0f is within 0 ULPs of 1.0f Matchers.tests.cpp:: PASSED: REQUIRE_THAT( std::nextafter(1.f, 2.f), WithinULP(1.f, 1) ) with expansion: 1.0f is within 1 ULPs of 1.0f Matchers.tests.cpp:: PASSED: REQUIRE_THAT( std::nextafter(1.f, 0.f), WithinULP(1.f, 1) ) with expansion: 1.0f is within 1 ULPs of 1.0f Matchers.tests.cpp:: PASSED: REQUIRE_THAT( std::nextafter(1.f, 2.f), !WithinULP(1.f, 0) ) with expansion: 1.0f not is within 0 ULPs of 1.0f Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 1.f, WithinULP(1.f, 0) ) with expansion: 1.0f is within 0 ULPs of 1.0f Matchers.tests.cpp:: PASSED: REQUIRE_THAT( -0.f, WithinULP(0.f, 0) ) with expansion: -0.0f is within 0 ULPs of 0.0f Matchers.tests.cpp:: PASSED: REQUIRE_THAT( NAN, !WithinULP(NAN, 123) ) with expansion: nanf not is within 123 ULPs of nanf ------------------------------------------------------------------------------- Floating point matchers: float Composed ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 1.f, WithinAbs(1.f, 0.5) || WithinULP(1.f, 1) ) with expansion: 1.0f ( is within 0.5 of 1.0 or is within 1 ULPs of 1.0f ) Matchers.tests.cpp:: PASSED: REQUIRE_THAT( 1.f, WithinAbs(2.f, 0.5) || WithinULP(1.f, 0) ) with expansion: 1.0f ( is within 0.5 of 2.0 or is within 0 ULPs of 1.0f ) Matchers.tests.cpp:: PASSED: REQUIRE_THAT( NAN, !(WithinAbs(NAN, 100) || WithinULP(NAN, 123)) ) with expansion: nanf not ( is within 100.0 of nan or is within 123 ULPs of nanf ) ------------------------------------------------------------------------------- Floating point matchers: float Constructor validation ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: REQUIRE_NOTHROW( WithinAbs(1.f, 0.f) ) Matchers.tests.cpp:: PASSED: REQUIRE_THROWS_AS( WithinAbs(1.f, -1.f), std::domain_error ) Matchers.tests.cpp:: PASSED: REQUIRE_NOTHROW( WithinULP(1.f, 0) ) Matchers.tests.cpp:: PASSED: REQUIRE_THROWS_AS( WithinULP(1.f, -1), std::domain_error ) ------------------------------------------------------------------------------- Greater-than inequalities with different epsilons ------------------------------------------------------------------------------- Approx.tests.cpp: ............................................................................... Approx.tests.cpp:: PASSED: REQUIRE( d >= Approx( 1.22 ) ) with expansion: 1.23 >= Approx( 1.22 ) Approx.tests.cpp:: PASSED: REQUIRE( d >= Approx( 1.23 ) ) with expansion: 1.23 >= Approx( 1.23 ) Approx.tests.cpp:: PASSED: REQUIRE_FALSE( d >= Approx( 1.24 ) ) with expansion: !(1.23 >= Approx( 1.24 )) Approx.tests.cpp:: PASSED: REQUIRE( d >= Approx( 1.24 ).epsilon(0.1) ) with expansion: 1.23 >= Approx( 1.24 ) ------------------------------------------------------------------------------- INFO and WARN do not abort tests ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... Message.tests.cpp:: warning: this is a message this is a warning No assertions in test case 'INFO and WARN do not abort tests' ------------------------------------------------------------------------------- INFO gets logged on failure ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... Message.tests.cpp:: FAILED: REQUIRE( a == 1 ) with expansion: 2 == 1 with messages: this message should be logged so should this ------------------------------------------------------------------------------- INFO gets logged on failure, even if captured before successful assertions ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... Message.tests.cpp:: PASSED: CHECK( a == 2 ) with expansion: 2 == 2 with message: this message may be logged later Message.tests.cpp:: FAILED: CHECK( a == 1 ) with expansion: 2 == 1 with messages: this message may be logged later this message should be logged Message.tests.cpp:: FAILED: CHECK( a == 0 ) with expansion: 2 == 0 with messages: this message may be logged later this message should be logged and this, but later Message.tests.cpp:: PASSED: CHECK( a == 2 ) with expansion: 2 == 2 with messages: this message may be logged later this message should be logged and this, but later but not this ------------------------------------------------------------------------------- INFO is reset for each loop ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... Message.tests.cpp:: PASSED: REQUIRE( i < 10 ) with expansion: 0 < 10 with messages: current counter 0 i := 0 Message.tests.cpp:: PASSED: REQUIRE( i < 10 ) with expansion: 1 < 10 with messages: current counter 1 i := 1 Message.tests.cpp:: PASSED: REQUIRE( i < 10 ) with expansion: 2 < 10 with messages: current counter 2 i := 2 Message.tests.cpp:: PASSED: REQUIRE( i < 10 ) with expansion: 3 < 10 with messages: current counter 3 i := 3 Message.tests.cpp:: PASSED: REQUIRE( i < 10 ) with expansion: 4 < 10 with messages: current counter 4 i := 4 Message.tests.cpp:: PASSED: REQUIRE( i < 10 ) with expansion: 5 < 10 with messages: current counter 5 i := 5 Message.tests.cpp:: PASSED: REQUIRE( i < 10 ) with expansion: 6 < 10 with messages: current counter 6 i := 6 Message.tests.cpp:: PASSED: REQUIRE( i < 10 ) with expansion: 7 < 10 with messages: current counter 7 i := 7 Message.tests.cpp:: PASSED: REQUIRE( i < 10 ) with expansion: 8 < 10 with messages: current counter 8 i := 8 Message.tests.cpp:: PASSED: REQUIRE( i < 10 ) with expansion: 9 < 10 with messages: current counter 9 i := 9 Message.tests.cpp:: FAILED: REQUIRE( i < 10 ) with expansion: 10 < 10 with messages: current counter 10 i := 10 ------------------------------------------------------------------------------- Inequality checks that should fail ------------------------------------------------------------------------------- Condition.tests.cpp: ............................................................................... Condition.tests.cpp:: FAILED: CHECK( data.int_seven != 7 ) with expansion: 7 != 7 Condition.tests.cpp:: FAILED: CHECK( data.float_nine_point_one != Approx( 9.1f ) ) with expansion: 9.1f != Approx( 9.1000003815 ) Condition.tests.cpp:: FAILED: CHECK( data.double_pi != Approx( 3.1415926535 ) ) with expansion: 3.1415926535 != Approx( 3.1415926535 ) Condition.tests.cpp:: FAILED: CHECK( data.str_hello != "hello" ) with expansion: "hello" != "hello" Condition.tests.cpp:: FAILED: CHECK( data.str_hello.size() != 5 ) with expansion: 5 != 5 ------------------------------------------------------------------------------- Inequality checks that should succeed ------------------------------------------------------------------------------- Condition.tests.cpp: ............................................................................... Condition.tests.cpp:: PASSED: REQUIRE( data.int_seven != 6 ) with expansion: 7 != 6 Condition.tests.cpp:: PASSED: REQUIRE( data.int_seven != 8 ) with expansion: 7 != 8 Condition.tests.cpp:: PASSED: REQUIRE( data.float_nine_point_one != Approx( 9.11f ) ) with expansion: 9.1f != Approx( 9.1099996567 ) Condition.tests.cpp:: PASSED: REQUIRE( data.float_nine_point_one != Approx( 9.0f ) ) with expansion: 9.1f != Approx( 9.0 ) Condition.tests.cpp:: PASSED: REQUIRE( data.float_nine_point_one != Approx( 1 ) ) with expansion: 9.1f != Approx( 1.0 ) Condition.tests.cpp:: PASSED: REQUIRE( data.float_nine_point_one != Approx( 0 ) ) with expansion: 9.1f != Approx( 0.0 ) Condition.tests.cpp:: PASSED: REQUIRE( data.double_pi != Approx( 3.1415 ) ) with expansion: 3.1415926535 != Approx( 3.1415 ) Condition.tests.cpp:: PASSED: REQUIRE( data.str_hello != "goodbye" ) with expansion: "hello" != "goodbye" Condition.tests.cpp:: PASSED: REQUIRE( data.str_hello != "hell" ) with expansion: "hello" != "hell" Condition.tests.cpp:: PASSED: REQUIRE( data.str_hello != "hello1" ) with expansion: "hello" != "hello1" Condition.tests.cpp:: PASSED: REQUIRE( data.str_hello.size() != 6 ) with expansion: 5 != 6 ------------------------------------------------------------------------------- Less-than inequalities with different epsilons ------------------------------------------------------------------------------- Approx.tests.cpp: ............................................................................... Approx.tests.cpp:: PASSED: REQUIRE( d <= Approx( 1.24 ) ) with expansion: 1.23 <= Approx( 1.24 ) Approx.tests.cpp:: PASSED: REQUIRE( d <= Approx( 1.23 ) ) with expansion: 1.23 <= Approx( 1.23 ) Approx.tests.cpp:: PASSED: REQUIRE_FALSE( d <= Approx( 1.22 ) ) with expansion: !(1.23 <= Approx( 1.22 )) Approx.tests.cpp:: PASSED: REQUIRE( d <= Approx( 1.22 ).epsilon(0.1) ) with expansion: 1.23 <= Approx( 1.22 ) ------------------------------------------------------------------------------- ManuallyRegistered ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: with message: was called ------------------------------------------------------------------------------- Matchers can be (AllOf) composed with the && operator ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: CHECK_THAT( testStringForMatching(), Contains("string") && Contains("abc") && Contains("substring") && Contains("contains") ) with expansion: "this string contains 'abc' as a substring" ( contains: "string" and contains: "abc" and contains: "substring" and contains: "contains" ) ------------------------------------------------------------------------------- Matchers can be (AnyOf) composed with the || operator ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: CHECK_THAT( testStringForMatching(), Contains("string") || Contains("different") || Contains("random") ) with expansion: "this string contains 'abc' as a substring" ( contains: "string" or contains: "different" or contains: "random" ) Matchers.tests.cpp:: PASSED: CHECK_THAT( testStringForMatching2(), Contains("string") || Contains("different") || Contains("random") ) with expansion: "some completely different text that contains one common word" ( contains: "string" or contains: "different" or contains: "random" ) ------------------------------------------------------------------------------- Matchers can be composed with both && and || ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: CHECK_THAT( testStringForMatching(), (Contains("string") || Contains("different")) && Contains("substring") ) with expansion: "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "substring" ) ------------------------------------------------------------------------------- Matchers can be composed with both && and || - failing ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: FAILED: CHECK_THAT( testStringForMatching(), (Contains("string") || Contains("different")) && Contains("random") ) with expansion: "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "random" ) ------------------------------------------------------------------------------- Matchers can be negated (Not) with the ! operator ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: CHECK_THAT( testStringForMatching(), !Contains("different") ) with expansion: "this string contains 'abc' as a substring" not contains: "different" ------------------------------------------------------------------------------- Matchers can be negated (Not) with the ! operator - failing ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: FAILED: CHECK_THAT( testStringForMatching(), !Contains("substring") ) with expansion: "this string contains 'abc' as a substring" not contains: "substring" ------------------------------------------------------------------------------- Mismatching exception messages failing the test ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: PASSED: REQUIRE_THROWS_WITH( thisThrows(), "expected exception" ) with expansion: "expected exception" equals: "expected exception" Exception.tests.cpp:: FAILED: REQUIRE_THROWS_WITH( thisThrows(), "should fail" ) with expansion: "expected exception" equals: "should fail" ------------------------------------------------------------------------------- Nice descriptive name ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: warning: This one ran No assertions in test case 'Nice descriptive name' ------------------------------------------------------------------------------- Non-std exceptions can be translated ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: FAILED: due to unexpected exception with message: custom exception ------------------------------------------------------------------------------- Objects that evaluated in boolean contexts can be checked ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: CHECK( True ) with expansion: {?} Tricky.tests.cpp:: PASSED: CHECK( !False ) with expansion: true Tricky.tests.cpp:: PASSED: CHECK_FALSE( False ) with expansion: !{?} ------------------------------------------------------------------------------- Ordering comparison checks that should fail ------------------------------------------------------------------------------- Condition.tests.cpp: ............................................................................... Condition.tests.cpp:: FAILED: CHECK( data.int_seven > 7 ) with expansion: 7 > 7 Condition.tests.cpp:: FAILED: CHECK( data.int_seven < 7 ) with expansion: 7 < 7 Condition.tests.cpp:: FAILED: CHECK( data.int_seven > 8 ) with expansion: 7 > 8 Condition.tests.cpp:: FAILED: CHECK( data.int_seven < 6 ) with expansion: 7 < 6 Condition.tests.cpp:: FAILED: CHECK( data.int_seven < 0 ) with expansion: 7 < 0 Condition.tests.cpp:: FAILED: CHECK( data.int_seven < -1 ) with expansion: 7 < -1 Condition.tests.cpp:: FAILED: CHECK( data.int_seven >= 8 ) with expansion: 7 >= 8 Condition.tests.cpp:: FAILED: CHECK( data.int_seven <= 6 ) with expansion: 7 <= 6 Condition.tests.cpp:: FAILED: CHECK( data.float_nine_point_one < 9 ) with expansion: 9.1f < 9 Condition.tests.cpp:: FAILED: CHECK( data.float_nine_point_one > 10 ) with expansion: 9.1f > 10 Condition.tests.cpp:: FAILED: CHECK( data.float_nine_point_one > 9.2 ) with expansion: 9.1f > 9.2 Condition.tests.cpp:: FAILED: CHECK( data.str_hello > "hello" ) with expansion: "hello" > "hello" Condition.tests.cpp:: FAILED: CHECK( data.str_hello < "hello" ) with expansion: "hello" < "hello" Condition.tests.cpp:: FAILED: CHECK( data.str_hello > "hellp" ) with expansion: "hello" > "hellp" Condition.tests.cpp:: FAILED: CHECK( data.str_hello > "z" ) with expansion: "hello" > "z" Condition.tests.cpp:: FAILED: CHECK( data.str_hello < "hellm" ) with expansion: "hello" < "hellm" Condition.tests.cpp:: FAILED: CHECK( data.str_hello < "a" ) with expansion: "hello" < "a" Condition.tests.cpp:: FAILED: CHECK( data.str_hello >= "z" ) with expansion: "hello" >= "z" Condition.tests.cpp:: FAILED: CHECK( data.str_hello <= "a" ) with expansion: "hello" <= "a" ------------------------------------------------------------------------------- Ordering comparison checks that should succeed ------------------------------------------------------------------------------- Condition.tests.cpp: ............................................................................... Condition.tests.cpp:: PASSED: REQUIRE( data.int_seven < 8 ) with expansion: 7 < 8 Condition.tests.cpp:: PASSED: REQUIRE( data.int_seven > 6 ) with expansion: 7 > 6 Condition.tests.cpp:: PASSED: REQUIRE( data.int_seven > 0 ) with expansion: 7 > 0 Condition.tests.cpp:: PASSED: REQUIRE( data.int_seven > -1 ) with expansion: 7 > -1 Condition.tests.cpp:: PASSED: REQUIRE( data.int_seven >= 7 ) with expansion: 7 >= 7 Condition.tests.cpp:: PASSED: REQUIRE( data.int_seven >= 6 ) with expansion: 7 >= 6 Condition.tests.cpp:: PASSED: REQUIRE( data.int_seven <= 7 ) with expansion: 7 <= 7 Condition.tests.cpp:: PASSED: REQUIRE( data.int_seven <= 8 ) with expansion: 7 <= 8 Condition.tests.cpp:: PASSED: REQUIRE( data.float_nine_point_one > 9 ) with expansion: 9.1f > 9 Condition.tests.cpp:: PASSED: REQUIRE( data.float_nine_point_one < 10 ) with expansion: 9.1f < 10 Condition.tests.cpp:: PASSED: REQUIRE( data.float_nine_point_one < 9.2 ) with expansion: 9.1f < 9.2 Condition.tests.cpp:: PASSED: REQUIRE( data.str_hello <= "hello" ) with expansion: "hello" <= "hello" Condition.tests.cpp:: PASSED: REQUIRE( data.str_hello >= "hello" ) with expansion: "hello" >= "hello" Condition.tests.cpp:: PASSED: REQUIRE( data.str_hello < "hellp" ) with expansion: "hello" < "hellp" Condition.tests.cpp:: PASSED: REQUIRE( data.str_hello < "zebra" ) with expansion: "hello" < "zebra" Condition.tests.cpp:: PASSED: REQUIRE( data.str_hello > "hellm" ) with expansion: "hello" > "hellm" Condition.tests.cpp:: PASSED: REQUIRE( data.str_hello > "a" ) with expansion: "hello" > "a" ------------------------------------------------------------------------------- Output from all sections is reported one ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... Message.tests.cpp:: FAILED: explicitly with message: Message from section one ------------------------------------------------------------------------------- Output from all sections is reported two ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... Message.tests.cpp:: FAILED: explicitly with message: Message from section two ------------------------------------------------------------------------------- Parse test names and tags Empty test spec should have no filters ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false ------------------------------------------------------------------------------- Parse test names and tags Test spec from empty string should have no filters ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches(tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false ------------------------------------------------------------------------------- Parse test names and tags Test spec from just a comma should have no filters ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false ------------------------------------------------------------------------------- Parse test names and tags Test spec from name should have one filter ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == true ) with expansion: true == true ------------------------------------------------------------------------------- Parse test names and tags Test spec from quoted name should have one filter ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == true ) with expansion: true == true ------------------------------------------------------------------------------- Parse test names and tags Test spec from name should have one filter ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == false ) with expansion: false == false ------------------------------------------------------------------------------- Parse test names and tags Wildcard at the start ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcD ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( parseTestSpec( "*a" ).matches( tcA ) == true ) with expansion: true == true ------------------------------------------------------------------------------- Parse test names and tags Wildcard at the end ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcD ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( parseTestSpec( "a*" ).matches( tcA ) == true ) with expansion: true == true ------------------------------------------------------------------------------- Parse test names and tags Wildcard at both ends ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcD ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( parseTestSpec( "*a*" ).matches( tcA ) == true ) with expansion: true == true ------------------------------------------------------------------------------- Parse test names and tags Redundant wildcard at the start ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false ------------------------------------------------------------------------------- Parse test names and tags Redundant wildcard at the end ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false ------------------------------------------------------------------------------- Parse test names and tags Redundant wildcard at both ends ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false ------------------------------------------------------------------------------- Parse test names and tags Wildcard at both ends, redundant at start ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcD ) == true ) with expansion: true == true ------------------------------------------------------------------------------- Parse test names and tags Just wildcard ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcD ) == true ) with expansion: true == true ------------------------------------------------------------------------------- Parse test names and tags Single tag ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == false ) with expansion: false == false ------------------------------------------------------------------------------- Parse test names and tags Single tag, two matches ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == true ) with expansion: true == true ------------------------------------------------------------------------------- Parse test names and tags Two tags ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == true ) with expansion: true == true ------------------------------------------------------------------------------- Parse test names and tags Two tags, spare separated ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == true ) with expansion: true == true ------------------------------------------------------------------------------- Parse test names and tags Wildcarded name and tag ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcD ) == false ) with expansion: false == false ------------------------------------------------------------------------------- Parse test names and tags Single tag exclusion ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == true ) with expansion: true == true ------------------------------------------------------------------------------- Parse test names and tags One tag exclusion and one tag inclusion ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == false ) with expansion: false == false ------------------------------------------------------------------------------- Parse test names and tags One tag exclusion and one wldcarded name inclusion ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcD ) == true ) with expansion: true == true ------------------------------------------------------------------------------- Parse test names and tags One tag exclusion, using exclude:, and one wldcarded name inclusion ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcD ) == true ) with expansion: true == true ------------------------------------------------------------------------------- Parse test names and tags name exclusion ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcD ) == true ) with expansion: true == true ------------------------------------------------------------------------------- Parse test names and tags wildcarded name exclusion ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcD ) == false ) with expansion: false == false ------------------------------------------------------------------------------- Parse test names and tags wildcarded name exclusion with tag inclusion ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcD ) == false ) with expansion: false == false ------------------------------------------------------------------------------- Parse test names and tags wildcarded name exclusion, using exclude:, with tag inclusion ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcD ) == false ) with expansion: false == false ------------------------------------------------------------------------------- Parse test names and tags two wildcarded names ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcD ) == false ) with expansion: false == false ------------------------------------------------------------------------------- Parse test names and tags empty tag ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcD ) == false ) with expansion: false == false ------------------------------------------------------------------------------- Parse test names and tags empty quoted name ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcD ) == false ) with expansion: false == false ------------------------------------------------------------------------------- Parse test names and tags quoted string followed by tag exclusion ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( spec.hasFilters() == true ) with expansion: true == true CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcA ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcB ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcC ) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( spec.matches( tcD ) == true ) with expansion: true == true ------------------------------------------------------------------------------- Parsing a std::pair ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( (std::pair( 1, 2 )) == aNicePair ) with expansion: {?} == {?} ------------------------------------------------------------------------------- Pointers can be compared to null ------------------------------------------------------------------------------- Condition.tests.cpp: ............................................................................... Condition.tests.cpp:: PASSED: REQUIRE( p == 0 ) with expansion: 0 == 0 Condition.tests.cpp:: PASSED: REQUIRE( p == pNULL ) with expansion: 0 == 0 Condition.tests.cpp:: PASSED: REQUIRE( p != 0 ) with expansion: 0x != 0 Condition.tests.cpp:: PASSED: REQUIRE( cp != 0 ) with expansion: 0x != 0 Condition.tests.cpp:: PASSED: REQUIRE( cpc != 0 ) with expansion: 0x != 0 Condition.tests.cpp:: PASSED: REQUIRE( returnsNull() == 0 ) with expansion: {null string} == 0 Condition.tests.cpp:: PASSED: REQUIRE( returnsConstNull() == 0 ) with expansion: {null string} == 0 Condition.tests.cpp:: PASSED: REQUIRE( 0 != p ) with expansion: 0 != 0x ------------------------------------------------------------------------------- Process can be configured on command line empty args don't cause a crash ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( result ) with expansion: {?} CmdLine.tests.cpp:: PASSED: CHECK( config.processName == "" ) with expansion: "" == "" ------------------------------------------------------------------------------- Process can be configured on command line default - no arguments ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( result ) with expansion: {?} CmdLine.tests.cpp:: PASSED: CHECK( config.processName == "test" ) with expansion: "test" == "test" CmdLine.tests.cpp:: PASSED: CHECK( config.shouldDebugBreak == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( config.abortAfter == -1 ) with expansion: -1 == -1 CmdLine.tests.cpp:: PASSED: CHECK( config.noThrow == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: CHECK( config.reporterNames.empty() ) with expansion: true CmdLine.tests.cpp:: PASSED: CHECK_FALSE( cfg.hasTestFilters() ) with expansion: !false ------------------------------------------------------------------------------- Process can be configured on command line test lists 1 test ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( result ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( cfg.hasTestFilters() ) with expansion: true CmdLine.tests.cpp:: PASSED: REQUIRE( cfg.testSpec().matches(fakeTestCase("notIncluded")) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: REQUIRE( cfg.testSpec().matches(fakeTestCase("test1")) ) with expansion: true ------------------------------------------------------------------------------- Process can be configured on command line test lists Specify one test case exclusion using exclude: ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( result ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( cfg.hasTestFilters() ) with expansion: true CmdLine.tests.cpp:: PASSED: REQUIRE( cfg.testSpec().matches(fakeTestCase("test1")) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: REQUIRE( cfg.testSpec().matches(fakeTestCase("alwaysIncluded")) ) with expansion: true ------------------------------------------------------------------------------- Process can be configured on command line test lists Specify one test case exclusion using ~ ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( result ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( cfg.hasTestFilters() ) with expansion: true CmdLine.tests.cpp:: PASSED: REQUIRE( cfg.testSpec().matches(fakeTestCase("test1")) == false ) with expansion: false == false CmdLine.tests.cpp:: PASSED: REQUIRE( cfg.testSpec().matches(fakeTestCase("alwaysIncluded")) ) with expansion: true ------------------------------------------------------------------------------- Process can be configured on command line reporter -r/console ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test", "-r", "console"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( config.reporterNames[0] == "console" ) with expansion: "console" == "console" ------------------------------------------------------------------------------- Process can be configured on command line reporter -r/xml ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test", "-r", "xml"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( config.reporterNames[0] == "xml" ) with expansion: "xml" == "xml" ------------------------------------------------------------------------------- Process can be configured on command line reporter -r xml and junit ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test", "-r", "xml", "-r", "junit"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( config.reporterNames.size() == 2 ) with expansion: 2 == 2 CmdLine.tests.cpp:: PASSED: REQUIRE( config.reporterNames[0] == "xml" ) with expansion: "xml" == "xml" CmdLine.tests.cpp:: PASSED: REQUIRE( config.reporterNames[1] == "junit" ) with expansion: "junit" == "junit" ------------------------------------------------------------------------------- Process can be configured on command line reporter --reporter/junit ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test", "--reporter", "junit"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( config.reporterNames[0] == "junit" ) with expansion: "junit" == "junit" ------------------------------------------------------------------------------- Process can be configured on command line debugger -b ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test", "-b"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( config.shouldDebugBreak == true ) with expansion: true == true ------------------------------------------------------------------------------- Process can be configured on command line debugger --break ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test", "--break"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( config.shouldDebugBreak ) with expansion: true ------------------------------------------------------------------------------- Process can be configured on command line abort -a aborts after first failure ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test", "-a"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( config.abortAfter == 1 ) with expansion: 1 == 1 ------------------------------------------------------------------------------- Process can be configured on command line abort -x 2 aborts after two failures ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test", "-x", "2"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( config.abortAfter == 2 ) with expansion: 2 == 2 ------------------------------------------------------------------------------- Process can be configured on command line abort -x must be numeric ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( !result ) with expansion: true CmdLine.tests.cpp:: PASSED: REQUIRE_THAT( result.errorMessage(), Contains("convert") && Contains("oops") ) with expansion: "Unable to convert 'oops' to destination type" ( contains: "convert" and contains: "oops" ) ------------------------------------------------------------------------------- Process can be configured on command line nothrow -e ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test", "-e"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( config.noThrow ) with expansion: true ------------------------------------------------------------------------------- Process can be configured on command line nothrow --nothrow ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test", "--nothrow"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( config.noThrow ) with expansion: true ------------------------------------------------------------------------------- Process can be configured on command line output filename -o filename ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test", "-o", "filename.ext"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( config.outputFilename == "filename.ext" ) with expansion: "filename.ext" == "filename.ext" ------------------------------------------------------------------------------- Process can be configured on command line output filename --out ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test", "--out", "filename.ext"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( config.outputFilename == "filename.ext" ) with expansion: "filename.ext" == "filename.ext" ------------------------------------------------------------------------------- Process can be configured on command line combinations Single character flags can be combined ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test", "-abe"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: CHECK( config.abortAfter == 1 ) with expansion: 1 == 1 CmdLine.tests.cpp:: PASSED: CHECK( config.shouldDebugBreak ) with expansion: true CmdLine.tests.cpp:: PASSED: CHECK( config.noThrow == true ) with expansion: true == true ------------------------------------------------------------------------------- Process can be configured on command line use-colour without option ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( config.useColour == UseColour::Auto ) with expansion: 0 == 0 ------------------------------------------------------------------------------- Process can be configured on command line use-colour auto ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test", "--use-colour", "auto"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( config.useColour == UseColour::Auto ) with expansion: 0 == 0 ------------------------------------------------------------------------------- Process can be configured on command line use-colour yes ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test", "--use-colour", "yes"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( config.useColour == UseColour::Yes ) with expansion: 1 == 1 ------------------------------------------------------------------------------- Process can be configured on command line use-colour no ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( cli.parse({"test", "--use-colour", "no"}) ) with expansion: {?} CmdLine.tests.cpp:: PASSED: REQUIRE( config.useColour == UseColour::No ) with expansion: 2 == 2 ------------------------------------------------------------------------------- Process can be configured on command line use-colour error ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: CHECK( !result ) with expansion: true CmdLine.tests.cpp:: PASSED: CHECK_THAT( result.errorMessage(), Contains( "colour mode must be one of" ) ) with expansion: "colour mode must be one of: auto, yes or no. 'wrong' not recognised" contains: "colour mode must be one of" ------------------------------------------------------------------------------- Reconstruction should be based on stringification: #914 ------------------------------------------------------------------------------- Decomposition.tests.cpp: ............................................................................... Decomposition.tests.cpp:: FAILED: CHECK( truthy(false) ) with expansion: Hey, its truthy! ------------------------------------------------------------------------------- Regex string matcher ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: FAILED: CHECK_THAT( testStringForMatching(), Matches("this STRING contains 'abc' as a substring") ) with expansion: "this string contains 'abc' as a substring" matches "this STRING contains 'abc' as a substring" case sensitively Matchers.tests.cpp:: FAILED: CHECK_THAT( testStringForMatching(), Matches("contains 'abc' as a substring") ) with expansion: "this string contains 'abc' as a substring" matches "contains 'abc' as a substring" case sensitively Matchers.tests.cpp:: FAILED: CHECK_THAT( testStringForMatching(), Matches("this string contains 'abc' as a") ) with expansion: "this string contains 'abc' as a substring" matches "this string contains 'abc' as a" case sensitively ------------------------------------------------------------------------------- SUCCEED counts as a test pass ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... Message.tests.cpp:: PASSED: with message: this is a success ------------------------------------------------------------------------------- SUCCEED does not require an argument ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... Message.tests.cpp:: PASSED: ------------------------------------------------------------------------------- Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods Given: No operations precede me ------------------------------------------------------------------------------- BDD.tests.cpp: ............................................................................... BDD.tests.cpp:: PASSED: REQUIRE( before == 0 ) with expansion: 0 == 0 ------------------------------------------------------------------------------- Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods Given: No operations precede me When: We get the count Then: Subsequently values are higher ------------------------------------------------------------------------------- BDD.tests.cpp: ............................................................................... BDD.tests.cpp:: PASSED: REQUIRE( after > before ) with expansion: 1 > 0 ------------------------------------------------------------------------------- Scenario: Do that thing with the thing Given: This stuff exists When: I do this Then: it should do this ------------------------------------------------------------------------------- BDD.tests.cpp: ............................................................................... BDD.tests.cpp:: PASSED: REQUIRE( itDoesThis() ) with expansion: true ------------------------------------------------------------------------------- Scenario: Do that thing with the thing Given: This stuff exists When: I do this Then: it should do this And: do that ------------------------------------------------------------------------------- BDD.tests.cpp: ............................................................................... BDD.tests.cpp:: PASSED: REQUIRE( itDoesThat() ) with expansion: true ------------------------------------------------------------------------------- Scenario: This is a really long scenario name to see how the list command deals with wrapping Given: A section name that is so long that it cannot fit in a single console width When: The test headers are printed as part of the normal running of the scenario Then: The, deliberately very long and overly verbose (you see what I did there?) section names must wrap, along with an indent ------------------------------------------------------------------------------- BDD.tests.cpp: ............................................................................... BDD.tests.cpp:: PASSED: with message: boo! ------------------------------------------------------------------------------- Scenario: Vector resizing affects size and capacity Given: an empty vector ------------------------------------------------------------------------------- BDD.tests.cpp: ............................................................................... BDD.tests.cpp:: PASSED: REQUIRE( v.size() == 0 ) with expansion: 0 == 0 ------------------------------------------------------------------------------- Scenario: Vector resizing affects size and capacity Given: an empty vector When: it is made larger Then: the size and capacity go up ------------------------------------------------------------------------------- BDD.tests.cpp: ............................................................................... BDD.tests.cpp:: PASSED: REQUIRE( v.size() == 10 ) with expansion: 10 == 10 BDD.tests.cpp:: PASSED: REQUIRE( v.capacity() >= 10 ) with expansion: 10 >= 10 ------------------------------------------------------------------------------- Scenario: Vector resizing affects size and capacity Given: an empty vector When: it is made larger Then: the size and capacity go up And when: it is made smaller again Then: the size goes down but the capacity stays the same ------------------------------------------------------------------------------- BDD.tests.cpp: ............................................................................... BDD.tests.cpp:: PASSED: REQUIRE( v.size() == 5 ) with expansion: 5 == 5 BDD.tests.cpp:: PASSED: REQUIRE( v.capacity() >= 10 ) with expansion: 10 >= 10 ------------------------------------------------------------------------------- Scenario: Vector resizing affects size and capacity Given: an empty vector ------------------------------------------------------------------------------- BDD.tests.cpp: ............................................................................... BDD.tests.cpp:: PASSED: REQUIRE( v.size() == 0 ) with expansion: 0 == 0 ------------------------------------------------------------------------------- Scenario: Vector resizing affects size and capacity Given: an empty vector When: we reserve more space Then: The capacity is increased but the size remains the same ------------------------------------------------------------------------------- BDD.tests.cpp: ............................................................................... BDD.tests.cpp:: PASSED: REQUIRE( v.capacity() >= 10 ) with expansion: 10 >= 10 BDD.tests.cpp:: PASSED: REQUIRE( v.size() == 0 ) with expansion: 0 == 0 A string sent directly to stdout A string sent directly to stderr A string sent to stderr via clog ------------------------------------------------------------------------------- Sends stuff to stdout and stderr ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... No assertions in test case 'Sends stuff to stdout and stderr' ------------------------------------------------------------------------------- Some simple comparisons between doubles ------------------------------------------------------------------------------- Approx.tests.cpp: ............................................................................... Approx.tests.cpp:: PASSED: REQUIRE( d == Approx( 1.23 ) ) with expansion: 1.23 == Approx( 1.23 ) Approx.tests.cpp:: PASSED: REQUIRE( d != Approx( 1.22 ) ) with expansion: 1.23 != Approx( 1.22 ) Approx.tests.cpp:: PASSED: REQUIRE( d != Approx( 1.24 ) ) with expansion: 1.23 != Approx( 1.24 ) Approx.tests.cpp:: PASSED: REQUIRE( Approx( d ) == 1.23 ) with expansion: Approx( 1.23 ) == 1.23 Approx.tests.cpp:: PASSED: REQUIRE( Approx( d ) != 1.22 ) with expansion: Approx( 1.23 ) != 1.22 Approx.tests.cpp:: PASSED: REQUIRE( Approx( d ) != 1.24 ) with expansion: Approx( 1.23 ) != 1.24 Approx.tests.cpp:: PASSED: REQUIRE( INFINITY == Approx(INFINITY) ) with expansion: inff == Approx( inf ) Message from section one ------------------------------------------------------------------------------- Standard output from all sections is reported one ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... No assertions in section 'one' Message from section two ------------------------------------------------------------------------------- Standard output from all sections is reported two ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... No assertions in section 'two' ------------------------------------------------------------------------------- StartsWith string matcher ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: FAILED: CHECK_THAT( testStringForMatching(), StartsWith("This String") ) with expansion: "this string contains 'abc' as a substring" starts with: "This String" Matchers.tests.cpp:: FAILED: CHECK_THAT( testStringForMatching(), StartsWith("string", Catch::CaseSensitive::No) ) with expansion: "this string contains 'abc' as a substring" starts with: "string" (case insensitive) ------------------------------------------------------------------------------- Static arrays are convertible to string Single item ------------------------------------------------------------------------------- ToStringGeneral.tests.cpp: ............................................................................... ToStringGeneral.tests.cpp:: PASSED: REQUIRE( Catch::Detail::stringify(singular) == "{ 1 }" ) with expansion: "{ 1 }" == "{ 1 }" ------------------------------------------------------------------------------- Static arrays are convertible to string Multiple ------------------------------------------------------------------------------- ToStringGeneral.tests.cpp: ............................................................................... ToStringGeneral.tests.cpp:: PASSED: REQUIRE( Catch::Detail::stringify(arr) == "{ 3, 2, 1 }" ) with expansion: "{ 3, 2, 1 }" == "{ 3, 2, 1 }" ------------------------------------------------------------------------------- Static arrays are convertible to string Non-trivial inner items ------------------------------------------------------------------------------- ToStringGeneral.tests.cpp: ............................................................................... ToStringGeneral.tests.cpp:: PASSED: REQUIRE( Catch::Detail::stringify(arr) == R"({ { "1:1", "1:2", "1:3" }, { "2:1", "2:2" } })" ) with expansion: "{ { "1:1", "1:2", "1:3" }, { "2:1", "2:2" } }" == "{ { "1:1", "1:2", "1:3" }, { "2:1", "2:2" } }" ------------------------------------------------------------------------------- String matchers ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: REQUIRE_THAT( testStringForMatching(), Contains("string") ) with expansion: "this string contains 'abc' as a substring" contains: "string" Matchers.tests.cpp:: PASSED: REQUIRE_THAT( testStringForMatching(), Contains("string", Catch::CaseSensitive::No) ) with expansion: "this string contains 'abc' as a substring" contains: "string" (case insensitive) Matchers.tests.cpp:: PASSED: CHECK_THAT( testStringForMatching(), Contains("abc") ) with expansion: "this string contains 'abc' as a substring" contains: "abc" Matchers.tests.cpp:: PASSED: CHECK_THAT( testStringForMatching(), Contains("aBC", Catch::CaseSensitive::No) ) with expansion: "this string contains 'abc' as a substring" contains: "abc" (case insensitive) insensitive) Matchers.tests.cpp:: PASSED: CHECK_THAT( testStringForMatching(), StartsWith("this") ) with expansion: "this string contains 'abc' as a substring" starts with: "this" Matchers.tests.cpp:: PASSED: CHECK_THAT( testStringForMatching(), StartsWith("THIS", Catch::CaseSensitive::No) ) with expansion: "this string contains 'abc' as a substring" starts with: "this" (case insensitive) Matchers.tests.cpp:: PASSED: CHECK_THAT( testStringForMatching(), EndsWith("substring") ) with expansion: "this string contains 'abc' as a substring" ends with: "substring" Matchers.tests.cpp:: PASSED: CHECK_THAT( testStringForMatching(), EndsWith(" SuBsTrInG", Catch::CaseSensitive::No) ) with expansion: "this string contains 'abc' as a substring" ends with: " substring" (case insensitive) ------------------------------------------------------------------------------- StringRef Empty string ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( empty.empty() ) with expansion: true String.tests.cpp:: PASSED: REQUIRE( empty.size() == 0 ) with expansion: 0 == 0 String.tests.cpp:: PASSED: REQUIRE( std::strcmp( empty.c_str(), "" ) == 0 ) with expansion: 0 == 0 ------------------------------------------------------------------------------- StringRef From string literal ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( s.empty() == false ) with expansion: false == false String.tests.cpp:: PASSED: REQUIRE( s.size() == 5 ) with expansion: 5 == 5 String.tests.cpp:: PASSED: REQUIRE( isSubstring( s ) == false ) with expansion: false == false String.tests.cpp:: PASSED: REQUIRE( std::strcmp( rawChars, "hello" ) == 0 ) with expansion: 0 == 0 ------------------------------------------------------------------------------- StringRef From string literal c_str() does not cause copy ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( isOwned( s ) == false ) with expansion: false == false String.tests.cpp:: PASSED: REQUIRE( s.c_str() == rawChars ) with expansion: "hello" == "hello" String.tests.cpp:: PASSED: REQUIRE( isOwned( s ) == false ) with expansion: false == false ------------------------------------------------------------------------------- StringRef From sub-string ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( original == "original" ) String.tests.cpp:: PASSED: REQUIRE( isSubstring( original ) ) with expansion: true String.tests.cpp:: PASSED: REQUIRE( isOwned( original ) == false ) with expansion: false == false String.tests.cpp:: PASSED: REQUIRE( isSubstring( original ) == false ) with expansion: false == false String.tests.cpp:: PASSED: REQUIRE( isOwned( original ) ) with expansion: true ------------------------------------------------------------------------------- StringRef Substrings zero-based substring ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( ss.empty() == false ) with expansion: false == false String.tests.cpp:: PASSED: REQUIRE( ss.size() == 5 ) with expansion: 5 == 5 String.tests.cpp:: PASSED: REQUIRE( std::strcmp( ss.c_str(), "hello" ) == 0 ) with expansion: 0 == 0 String.tests.cpp:: PASSED: REQUIRE( ss == "hello" ) with expansion: hello == "hello" ------------------------------------------------------------------------------- StringRef Substrings c_str() causes copy ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( isSubstring( ss ) ) with expansion: true String.tests.cpp:: PASSED: REQUIRE( isOwned( ss ) == false ) with expansion: false == false String.tests.cpp:: PASSED: REQUIRE( rawChars == data( s ) ) with expansion: "hello world!" == "hello world!" String.tests.cpp:: PASSED: REQUIRE( ss.c_str() != rawChars ) with expansion: "hello" != "hello world!" String.tests.cpp:: PASSED: REQUIRE( isSubstring( ss ) == false ) with expansion: false == false String.tests.cpp:: PASSED: REQUIRE( isOwned( ss ) ) with expansion: true String.tests.cpp:: PASSED: REQUIRE( data( ss ) != data( s ) ) with expansion: "hello" != "hello world!" ------------------------------------------------------------------------------- StringRef Substrings non-zero-based substring ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( ss.size() == 6 ) with expansion: 6 == 6 String.tests.cpp:: PASSED: REQUIRE( std::strcmp( ss.c_str(), "world!" ) == 0 ) with expansion: 0 == 0 ------------------------------------------------------------------------------- StringRef Substrings Pointer values of full refs should match ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( s.c_str() == s2.c_str() ) with expansion: "hello world!" == "hello world!" ------------------------------------------------------------------------------- StringRef Substrings Pointer values of substring refs should not match ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( s.c_str() != ss.c_str() ) with expansion: "hello world!" != "hello" ------------------------------------------------------------------------------- StringRef Comparisons ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( StringRef("hello") == StringRef("hello") ) with expansion: hello == hello String.tests.cpp:: PASSED: REQUIRE( StringRef("hello") != StringRef("cello") ) with expansion: hello != cello ------------------------------------------------------------------------------- StringRef from std::string implicitly constructed ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( sr == "a standard string" ) with expansion: a standard string == "a standard string" String.tests.cpp:: PASSED: REQUIRE( sr.size() == stdStr.size() ) with expansion: 17 == 17 ------------------------------------------------------------------------------- StringRef from std::string explicitly constructed ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( sr == "a standard string" ) with expansion: a standard string == "a standard string" String.tests.cpp:: PASSED: REQUIRE( sr.size() == stdStr.size() ) with expansion: 17 == 17 ------------------------------------------------------------------------------- StringRef from std::string assigned ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( sr == "a standard string" ) with expansion: a standard string == "a standard string" String.tests.cpp:: PASSED: REQUIRE( sr.size() == stdStr.size() ) with expansion: 17 == 17 ------------------------------------------------------------------------------- StringRef to std::string implicitly constructed ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( stdStr == "a stringref" ) with expansion: "a stringref" == "a stringref" String.tests.cpp:: PASSED: REQUIRE( stdStr.size() == sr.size() ) with expansion: 11 == 11 ------------------------------------------------------------------------------- StringRef to std::string explicitly constructed ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( stdStr == "a stringref" ) with expansion: "a stringref" == "a stringref" String.tests.cpp:: PASSED: REQUIRE( stdStr.size() == sr.size() ) with expansion: 11 == 11 ------------------------------------------------------------------------------- StringRef to std::string assigned ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( stdStr == "a stringref" ) with expansion: "a stringref" == "a stringref" String.tests.cpp:: PASSED: REQUIRE( stdStr.size() == sr.size() ) with expansion: 11 == 11 ------------------------------------------------------------------------------- StringRef Counting utf-8 codepoints ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: REQUIRE( ascii.numberOfCharacters() == ascii.size() ) with expansion: 39 == 39 String.tests.cpp:: PASSED: REQUIRE( simpleu8.numberOfCharacters() == 30 ) with expansion: 30 == 30 String.tests.cpp:: PASSED: REQUIRE( emojis.numberOfCharacters() == 9 ) with expansion: 9 == 9 ------------------------------------------------------------------------------- Stringifying std::chrono::duration helpers ------------------------------------------------------------------------------- ToStringChrono.tests.cpp: ............................................................................... ToStringChrono.tests.cpp:: PASSED: REQUIRE( minute == seconds ) with expansion: 1 m == 60 s ToStringChrono.tests.cpp:: PASSED: REQUIRE( hour != seconds ) with expansion: 1 h != 60 s ToStringChrono.tests.cpp:: PASSED: REQUIRE( micro != milli ) with expansion: 1 us != 1 ms ToStringChrono.tests.cpp:: PASSED: REQUIRE( nano != micro ) with expansion: 1 ns != 1 us ------------------------------------------------------------------------------- Stringifying std::chrono::duration with weird ratios ------------------------------------------------------------------------------- ToStringChrono.tests.cpp: ............................................................................... ToStringChrono.tests.cpp:: PASSED: REQUIRE( half_minute != femto_second ) with expansion: 1 [30/1]s != 1 fs ToStringChrono.tests.cpp:: PASSED: REQUIRE( pico_second != atto_second ) with expansion: 1 ps != 1 as ------------------------------------------------------------------------------- Stringifying std::chrono::time_point ------------------------------------------------------------------------------- ToStringChrono.tests.cpp: ............................................................................... ToStringChrono.tests.cpp:: PASSED: REQUIRE( now != later ) with expansion: {iso8601-timestamp} != {iso8601-timestamp} ------------------------------------------------------------------------------- Tabs and newlines show in output ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: FAILED: CHECK( s1 == s2 ) with expansion: "if ($b == 10) { $a = 20; }" == "if ($b == 10) { $a = 20; } " ------------------------------------------------------------------------------- Tag alias can be registered against tag patterns The same tag alias can only be registered once ------------------------------------------------------------------------------- TagAlias.tests.cpp: ............................................................................... TagAlias.tests.cpp:: PASSED: CHECK_THAT( what, Contains( "[@zzz]" ) ) with expansion: "error: tag alias, '[@zzz]' already registered. First seen at: file:2 Redefined at: file:10" contains: "[@zzz]" TagAlias.tests.cpp:: PASSED: CHECK_THAT( what, Contains( "file" ) ) with expansion: "error: tag alias, '[@zzz]' already registered. First seen at: file:2 Redefined at: file:10" contains: "file" TagAlias.tests.cpp:: PASSED: CHECK_THAT( what, Contains( "2" ) ) with expansion: "error: tag alias, '[@zzz]' already registered. First seen at: file:2 Redefined at: file:10" contains: "2" TagAlias.tests.cpp:: PASSED: CHECK_THAT( what, Contains( "10" ) ) with expansion: "error: tag alias, '[@zzz]' already registered. First seen at: file:2 Redefined at: file:10" contains: "10" ------------------------------------------------------------------------------- Tag alias can be registered against tag patterns Tag aliases must be of the form [@name] ------------------------------------------------------------------------------- TagAlias.tests.cpp: ............................................................................... TagAlias.tests.cpp:: PASSED: CHECK_THROWS( registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) ) ) TagAlias.tests.cpp:: PASSED: CHECK_THROWS( registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) ) ) TagAlias.tests.cpp:: PASSED: CHECK_THROWS( registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) ) ) TagAlias.tests.cpp:: PASSED: CHECK_THROWS( registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) ) ) ------------------------------------------------------------------------------- Test case with one argument ------------------------------------------------------------------------------- VariadicMacros.tests.cpp: ............................................................................... VariadicMacros.tests.cpp:: PASSED: with message: no assertions ------------------------------------------------------------------------------- Test enum bit values ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( 0x == bit30and31 ) with expansion: 3221225472 (0x) == 3221225472 ------------------------------------------------------------------------------- The NO_FAIL macro reports a failure but does not fail the test ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... Message.tests.cpp:: FAILED - but was ok: CHECK_NOFAIL( 1 == 2 ) No assertions in test case 'The NO_FAIL macro reports a failure but does not fail the test' ------------------------------------------------------------------------------- This test 'should' fail but doesn't ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: with message: oops! ------------------------------------------------------------------------------- Thrown string literals are translated ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: FAILED: due to unexpected exception with message: For some reason someone is throwing a string literal! ------------------------------------------------------------------------------- Tracker ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isOpen() ) with expansion: true ------------------------------------------------------------------------------- Tracker successfully close one section ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isSuccessfullyCompleted() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isComplete() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( ctx.completedCycle() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isSuccessfullyCompleted() ) with expansion: true ------------------------------------------------------------------------------- Tracker ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isOpen() ) with expansion: true ------------------------------------------------------------------------------- Tracker fail one section ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isSuccessfullyCompleted() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isComplete() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( ctx.completedCycle() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isSuccessfullyCompleted() == false ) with expansion: false == false ------------------------------------------------------------------------------- Tracker fail one section re-enter after failed section ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( testCase2.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1b.isOpen() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( ctx.completedCycle() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isSuccessfullyCompleted() ) with expansion: true ------------------------------------------------------------------------------- Tracker ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isOpen() ) with expansion: true ------------------------------------------------------------------------------- Tracker fail one section ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isSuccessfullyCompleted() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isComplete() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( ctx.completedCycle() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isSuccessfullyCompleted() == false ) with expansion: false == false ------------------------------------------------------------------------------- Tracker fail one section re-enter after failed section and find next section ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( testCase2.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1b.isOpen() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( s2.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( ctx.completedCycle() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isSuccessfullyCompleted() ) with expansion: true ------------------------------------------------------------------------------- Tracker ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isOpen() ) with expansion: true ------------------------------------------------------------------------------- Tracker successfully close one section, then find another ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( s2.isOpen() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isComplete() == false ) with expansion: false == false ------------------------------------------------------------------------------- Tracker successfully close one section, then find another Re-enter - skips S1 and enters S2 ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( testCase2.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1b.isOpen() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( s2b.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( ctx.completedCycle() == false ) with expansion: false == false ------------------------------------------------------------------------------- Tracker successfully close one section, then find another Re-enter - skips S1 and enters S2 Successfully close S2 ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( ctx.completedCycle() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s2b.isSuccessfullyCompleted() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( testCase2.isComplete() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( testCase2.isSuccessfullyCompleted() ) with expansion: true ------------------------------------------------------------------------------- Tracker ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isOpen() ) with expansion: true ------------------------------------------------------------------------------- Tracker successfully close one section, then find another ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( s2.isOpen() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isComplete() == false ) with expansion: false == false ------------------------------------------------------------------------------- Tracker successfully close one section, then find another Re-enter - skips S1 and enters S2 ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( testCase2.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1b.isOpen() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( s2b.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( ctx.completedCycle() == false ) with expansion: false == false ------------------------------------------------------------------------------- Tracker successfully close one section, then find another Re-enter - skips S1 and enters S2 fail S2 ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( ctx.completedCycle() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s2b.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s2b.isSuccessfullyCompleted() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( testCase2.isSuccessfullyCompleted() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( testCase3.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1c.isOpen() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( s2c.isOpen() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( testCase3.isSuccessfullyCompleted() ) with expansion: true ------------------------------------------------------------------------------- Tracker ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isOpen() ) with expansion: true ------------------------------------------------------------------------------- Tracker open a nested section ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( s2.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s2.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isComplete() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isComplete() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isComplete() ) with expansion: true ------------------------------------------------------------------------------- Tracker ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isOpen() ) with expansion: true ------------------------------------------------------------------------------- Tracker start a generator ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( g1.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( g1.index() == 0 ) with expansion: 0 == 0 PartTracker.tests.cpp:: PASSED: REQUIRE( g1.isComplete() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isComplete() == false ) with expansion: false == false ------------------------------------------------------------------------------- Tracker start a generator close outer section ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isComplete() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isSuccessfullyCompleted() == false ) with expansion: false == false ------------------------------------------------------------------------------- Tracker start a generator close outer section Re-enter for second generation ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( testCase2.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1b.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( g1b.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( g1b.index() == 1 ) with expansion: 1 == 1 PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isComplete() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( s1b.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( g1b.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( testCase2.isComplete() ) with expansion: true ------------------------------------------------------------------------------- Tracker ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isOpen() ) with expansion: true ------------------------------------------------------------------------------- Tracker start a generator ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( g1.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( g1.index() == 0 ) with expansion: 0 == 0 PartTracker.tests.cpp:: PASSED: REQUIRE( g1.isComplete() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isComplete() == false ) with expansion: false == false ------------------------------------------------------------------------------- Tracker start a generator Start a new inner section ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( s2.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s2.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isComplete() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isComplete() == false ) with expansion: false == false ------------------------------------------------------------------------------- Tracker start a generator Start a new inner section Re-enter for second generation ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( testCase2.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1b.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( g1b.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( g1b.index() == 1 ) with expansion: 1 == 1 PartTracker.tests.cpp:: PASSED: REQUIRE( s2b.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s2b.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( g1b.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1b.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( testCase2.isComplete() ) with expansion: true ------------------------------------------------------------------------------- Tracker ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isOpen() ) with expansion: true ------------------------------------------------------------------------------- Tracker start a generator ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( g1.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( g1.index() == 0 ) with expansion: 0 == 0 PartTracker.tests.cpp:: PASSED: REQUIRE( g1.isComplete() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isComplete() == false ) with expansion: false == false ------------------------------------------------------------------------------- Tracker start a generator Fail an inner section ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( s2.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s2.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s2.isSuccessfullyCompleted() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( s1.isComplete() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( testCase.isComplete() == false ) with expansion: false == false ------------------------------------------------------------------------------- Tracker start a generator Fail an inner section Re-enter for second generation ------------------------------------------------------------------------------- PartTracker.tests.cpp: ............................................................................... PartTracker.tests.cpp:: PASSED: REQUIRE( testCase2.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1b.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( g1b.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( g1b.index() == 0 ) with expansion: 0 == 0 PartTracker.tests.cpp:: PASSED: REQUIRE( s2b.isOpen() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( g1b.isComplete() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( s1b.isComplete() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( testCase2.isComplete() == false ) with expansion: false == false PartTracker.tests.cpp:: PASSED: REQUIRE( testCase3.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1c.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( g1c.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( g1c.index() == 1 ) with expansion: 1 == 1 PartTracker.tests.cpp:: PASSED: REQUIRE( s2c.isOpen() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s2c.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( g1c.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( s1c.isComplete() ) with expansion: true PartTracker.tests.cpp:: PASSED: REQUIRE( testCase3.isComplete() ) with expansion: true ------------------------------------------------------------------------------- Unexpected exceptions can be translated ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: FAILED: due to unexpected exception with message: 3.14 ------------------------------------------------------------------------------- Use a custom approx ------------------------------------------------------------------------------- Approx.tests.cpp: ............................................................................... Approx.tests.cpp:: PASSED: REQUIRE( d == approx( 1.23 ) ) with expansion: 1.23 == Approx( 1.23 ) Approx.tests.cpp:: PASSED: REQUIRE( d == approx( 1.22 ) ) with expansion: 1.23 == Approx( 1.22 ) Approx.tests.cpp:: PASSED: REQUIRE( d == approx( 1.24 ) ) with expansion: 1.23 == Approx( 1.24 ) Approx.tests.cpp:: PASSED: REQUIRE( d != approx( 1.25 ) ) with expansion: 1.23 != Approx( 1.25 ) Approx.tests.cpp:: PASSED: REQUIRE( approx( d ) == 1.23 ) with expansion: Approx( 1.23 ) == 1.23 Approx.tests.cpp:: PASSED: REQUIRE( approx( d ) == 1.22 ) with expansion: Approx( 1.23 ) == 1.22 Approx.tests.cpp:: PASSED: REQUIRE( approx( d ) == 1.24 ) with expansion: Approx( 1.23 ) == 1.24 Approx.tests.cpp:: PASSED: REQUIRE( approx( d ) != 1.25 ) with expansion: Approx( 1.23 ) != 1.25 ------------------------------------------------------------------------------- Variadic macros Section with one argument ------------------------------------------------------------------------------- VariadicMacros.tests.cpp: ............................................................................... VariadicMacros.tests.cpp:: PASSED: with message: no assertions ------------------------------------------------------------------------------- Vector matchers Contains (element) ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: CHECK_THAT( v, VectorContains(1) ) with expansion: { 1, 2, 3 } Contains: 1 Matchers.tests.cpp:: PASSED: CHECK_THAT( v, VectorContains(2) ) with expansion: { 1, 2, 3 } Contains: 2 ------------------------------------------------------------------------------- Vector matchers Contains (vector) ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: CHECK_THAT( v, Contains(v2) ) with expansion: { 1, 2, 3 } Contains: { 1, 2 } Matchers.tests.cpp:: PASSED: CHECK_THAT( v, Contains(v2) ) with expansion: { 1, 2, 3 } Contains: { 1, 2, 3 } Matchers.tests.cpp:: PASSED: CHECK_THAT( v, Contains(empty) ) with expansion: { 1, 2, 3 } Contains: { } Matchers.tests.cpp:: PASSED: CHECK_THAT( empty, Contains(empty) ) with expansion: { } Contains: { } ------------------------------------------------------------------------------- Vector matchers Contains (element), composed ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: CHECK_THAT( v, VectorContains(1) && VectorContains(2) ) with expansion: { 1, 2, 3 } ( Contains: 1 and Contains: 2 ) ------------------------------------------------------------------------------- Vector matchers Equals ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: CHECK_THAT( v, Equals(v) ) with expansion: { 1, 2, 3 } Equals: { 1, 2, 3 } Matchers.tests.cpp:: PASSED: CHECK_THAT( empty, Equals(empty) ) with expansion: { } Equals: { } Matchers.tests.cpp:: PASSED: CHECK_THAT( v, Equals(v2) ) with expansion: { 1, 2, 3 } Equals: { 1, 2, 3 } ------------------------------------------------------------------------------- Vector matchers UnorderedEquals ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: PASSED: CHECK_THAT( v, UnorderedEquals(v) ) with expansion: { 1, 2, 3 } UnorderedEquals: { 1, 2, 3 } Matchers.tests.cpp:: PASSED: CHECK_THAT( empty, UnorderedEquals(empty) ) with expansion: { } UnorderedEquals: { } Matchers.tests.cpp:: PASSED: REQUIRE_THAT( permuted, UnorderedEquals(v) ) with expansion: { 1, 3, 2 } UnorderedEquals: { 1, 2, 3 } Matchers.tests.cpp:: PASSED: REQUIRE_THAT( permuted, UnorderedEquals(v) ) with expansion: { 2, 3, 1 } UnorderedEquals: { 1, 2, 3 } ------------------------------------------------------------------------------- Vector matchers that fail Contains (element) ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: FAILED: CHECK_THAT( v, VectorContains(-1) ) with expansion: { 1, 2, 3 } Contains: -1 Matchers.tests.cpp:: FAILED: CHECK_THAT( empty, VectorContains(1) ) with expansion: { } Contains: 1 ------------------------------------------------------------------------------- Vector matchers that fail Contains (vector) ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: FAILED: CHECK_THAT( empty, Contains(v) ) with expansion: { } Contains: { 1, 2, 3 } Matchers.tests.cpp:: FAILED: CHECK_THAT( v, Contains(v2) ) with expansion: { 1, 2, 3 } Contains: { 1, 2, 4 } ------------------------------------------------------------------------------- Vector matchers that fail Equals ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: FAILED: CHECK_THAT( v, Equals(v2) ) with expansion: { 1, 2, 3 } Equals: { 1, 2 } Matchers.tests.cpp:: FAILED: CHECK_THAT( v2, Equals(v) ) with expansion: { 1, 2 } Equals: { 1, 2, 3 } Matchers.tests.cpp:: FAILED: CHECK_THAT( empty, Equals(v) ) with expansion: { } Equals: { 1, 2, 3 } Matchers.tests.cpp:: FAILED: CHECK_THAT( v, Equals(empty) ) with expansion: { 1, 2, 3 } Equals: { } ------------------------------------------------------------------------------- Vector matchers that fail UnorderedEquals ------------------------------------------------------------------------------- Matchers.tests.cpp: ............................................................................... Matchers.tests.cpp:: FAILED: CHECK_THAT( v, UnorderedEquals(empty) ) with expansion: { 1, 2, 3 } UnorderedEquals: { } Matchers.tests.cpp:: FAILED: CHECK_THAT( empty, UnorderedEquals(v) ) with expansion: { } UnorderedEquals: { 1, 2, 3 } Matchers.tests.cpp:: FAILED: CHECK_THAT( permuted, UnorderedEquals(v) ) with expansion: { 1, 3 } UnorderedEquals: { 1, 2, 3 } Matchers.tests.cpp:: FAILED: CHECK_THAT( permuted, UnorderedEquals(v) ) with expansion: { 3, 1 } UnorderedEquals: { 1, 2, 3 } ------------------------------------------------------------------------------- When checked exceptions are thrown they can be expected or unexpected ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: PASSED: REQUIRE_THROWS_AS( thisThrows(), std::domain_error ) Exception.tests.cpp:: PASSED: REQUIRE_NOTHROW( thisDoesntThrow() ) Exception.tests.cpp:: PASSED: REQUIRE_THROWS( thisThrows() ) ------------------------------------------------------------------------------- When unchecked exceptions are thrown directly they are always failures ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: FAILED: due to unexpected exception with message: unexpected exception ------------------------------------------------------------------------------- When unchecked exceptions are thrown during a CHECK the test should continue ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: FAILED: CHECK( thisThrows() == 0 ) due to unexpected exception with message: expected exception ------------------------------------------------------------------------------- When unchecked exceptions are thrown during a REQUIRE the test should abort fail ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: FAILED: REQUIRE( thisThrows() == 0 ) due to unexpected exception with message: expected exception ------------------------------------------------------------------------------- When unchecked exceptions are thrown from functions they are always failures ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: FAILED: CHECK( thisThrows() == 0 ) due to unexpected exception with message: expected exception ------------------------------------------------------------------------------- When unchecked exceptions are thrown from sections they are always failures section name ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: FAILED: due to unexpected exception with message: unexpected exception ------------------------------------------------------------------------------- When unchecked exceptions are thrown, but caught, they do not affect the test ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... No assertions in test case 'When unchecked exceptions are thrown, but caught, they do not affect the test' ------------------------------------------------------------------------------- Where the LHS is not a simple value ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: warning: Uncomment the code in this test to check that it gives a sensible compiler error No assertions in test case 'Where the LHS is not a simple value' ------------------------------------------------------------------------------- Where there is more to the expression after the RHS ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: warning: Uncomment the code in this test to check that it gives a sensible compiler error No assertions in test case 'Where there is more to the expression after the RHS' ------------------------------------------------------------------------------- X/level/0/a ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: ------------------------------------------------------------------------------- X/level/0/b ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: ------------------------------------------------------------------------------- X/level/1/a ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: ------------------------------------------------------------------------------- X/level/1/b ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: ------------------------------------------------------------------------------- XmlEncode normal string ------------------------------------------------------------------------------- Xml.tests.cpp: ............................................................................... Xml.tests.cpp:: PASSED: REQUIRE( encode( "normal string" ) == "normal string" ) with expansion: "normal string" == "normal string" ------------------------------------------------------------------------------- XmlEncode empty string ------------------------------------------------------------------------------- Xml.tests.cpp: ............................................................................... Xml.tests.cpp:: PASSED: REQUIRE( encode( "" ) == "" ) with expansion: "" == "" ------------------------------------------------------------------------------- XmlEncode string with ampersand ------------------------------------------------------------------------------- Xml.tests.cpp: ............................................................................... Xml.tests.cpp:: PASSED: REQUIRE( encode( "smith & jones" ) == "smith & jones" ) with expansion: "smith & jones" == "smith & jones" ------------------------------------------------------------------------------- XmlEncode string with less-than ------------------------------------------------------------------------------- Xml.tests.cpp: ............................................................................... Xml.tests.cpp:: PASSED: REQUIRE( encode( "smith < jones" ) == "smith < jones" ) with expansion: "smith < jones" == "smith < jones" ------------------------------------------------------------------------------- XmlEncode string with greater-than ------------------------------------------------------------------------------- Xml.tests.cpp: ............................................................................... Xml.tests.cpp:: PASSED: REQUIRE( encode( "smith > jones" ) == "smith > jones" ) with expansion: "smith > jones" == "smith > jones" Xml.tests.cpp:: PASSED: REQUIRE( encode( "smith ]]> jones" ) == "smith ]]> jones" ) with expansion: "smith ]]> jones" == "smith ]]> jones" ------------------------------------------------------------------------------- XmlEncode string with quotes ------------------------------------------------------------------------------- Xml.tests.cpp: ............................................................................... Xml.tests.cpp:: PASSED: REQUIRE( encode( stringWithQuotes ) == stringWithQuotes ) with expansion: "don't "quote" me on that" == "don't "quote" me on that" Xml.tests.cpp:: PASSED: REQUIRE( encode( stringWithQuotes, Catch::XmlEncode::ForAttributes ) == "don't "quote" me on that" ) with expansion: "don't "quote" me on that" == "don't "quote" me on that" ------------------------------------------------------------------------------- XmlEncode string with control char (1) ------------------------------------------------------------------------------- Xml.tests.cpp: ............................................................................... Xml.tests.cpp:: PASSED: REQUIRE( encode( "[\x01]" ) == "[\\x01]" ) with expansion: "[\x01]" == "[\x01]" ------------------------------------------------------------------------------- XmlEncode string with control char (x7F) ------------------------------------------------------------------------------- Xml.tests.cpp: ............................................................................... Xml.tests.cpp:: PASSED: REQUIRE( encode( "[\x7F]" ) == "[\\x7F]" ) with expansion: "[\x7F]" == "[\x7F]" ------------------------------------------------------------------------------- array -> toString ------------------------------------------------------------------------------- ToStringVector.tests.cpp: ............................................................................... ToStringVector.tests.cpp:: PASSED: REQUIRE( Catch::Detail::stringify( empty ) == "{ }" ) with expansion: "{ }" == "{ }" ToStringVector.tests.cpp:: PASSED: REQUIRE( Catch::Detail::stringify( oneValue ) == "{ 42 }" ) with expansion: "{ 42 }" == "{ 42 }" ToStringVector.tests.cpp:: PASSED: REQUIRE( Catch::Detail::stringify( twoValues ) == "{ 42, 250 }" ) with expansion: "{ 42, 250 }" == "{ 42, 250 }" ------------------------------------------------------------------------------- atomic if ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( x == 0 ) with expansion: 0 == 0 ------------------------------------------------------------------------------- boolean member ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( obj.prop != 0 ) with expansion: 0x != 0 ------------------------------------------------------------------------------- checkedElse ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: CHECKED_ELSE( flag ) with expansion: true Misc.tests.cpp:: PASSED: REQUIRE( testCheckedElse( true ) ) with expansion: true ------------------------------------------------------------------------------- checkedElse, failing ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: FAILED: CHECKED_ELSE( flag ) with expansion: false Misc.tests.cpp:: FAILED: REQUIRE( testCheckedElse( false ) ) with expansion: false ------------------------------------------------------------------------------- checkedIf ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: CHECKED_IF( flag ) with expansion: true Misc.tests.cpp:: PASSED: REQUIRE( testCheckedIf( true ) ) with expansion: true ------------------------------------------------------------------------------- checkedIf, failing ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: FAILED: CHECKED_IF( flag ) with expansion: false Misc.tests.cpp:: FAILED: REQUIRE( testCheckedIf( false ) ) with expansion: false ------------------------------------------------------------------------------- comparisons between const int variables ------------------------------------------------------------------------------- Condition.tests.cpp: ............................................................................... Condition.tests.cpp:: PASSED: REQUIRE( unsigned_char_var == 1 ) with expansion: 1 == 1 Condition.tests.cpp:: PASSED: REQUIRE( unsigned_short_var == 1 ) with expansion: 1 == 1 Condition.tests.cpp:: PASSED: REQUIRE( unsigned_int_var == 1 ) with expansion: 1 == 1 Condition.tests.cpp:: PASSED: REQUIRE( unsigned_long_var == 1 ) with expansion: 1 == 1 ------------------------------------------------------------------------------- comparisons between int variables ------------------------------------------------------------------------------- Condition.tests.cpp: ............................................................................... Condition.tests.cpp:: PASSED: REQUIRE( long_var == unsigned_char_var ) with expansion: 1 == 1 Condition.tests.cpp:: PASSED: REQUIRE( long_var == unsigned_short_var ) with expansion: 1 == 1 Condition.tests.cpp:: PASSED: REQUIRE( long_var == unsigned_int_var ) with expansion: 1 == 1 Condition.tests.cpp:: PASSED: REQUIRE( long_var == unsigned_long_var ) with expansion: 1 == 1 ------------------------------------------------------------------------------- even more nested SECTION tests c d (leaf) ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: ------------------------------------------------------------------------------- even more nested SECTION tests c e (leaf) ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: ------------------------------------------------------------------------------- even more nested SECTION tests f (leaf) ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: ------------------------------------------------------------------------------- first tag ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... No assertions in test case 'first tag' loose text artifact ------------------------------------------------------------------------------- has printf ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... No assertions in test case 'has printf' ------------------------------------------------------------------------------- just failure ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... Message.tests.cpp:: FAILED: explicitly with message: Previous info should not be seen ------------------------------------------------------------------------------- just info ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... No assertions in test case 'just info' ------------------------------------------------------------------------------- long long ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( l == std::numeric_limits::max() ) with expansion: 9223372036854775807 (0x) == 9223372036854775807 (0x) ------------------------------------------------------------------------------- looped SECTION tests s1 ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: FAILED: CHECK( b > a ) with expansion: 0 > 1 ------------------------------------------------------------------------------- looped tests ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: FAILED: CHECK( ( fib[i] % 2 ) == 0 ) with expansion: 1 == 0 with message: Testing if fib[0] (1) is even Misc.tests.cpp:: FAILED: CHECK( ( fib[i] % 2 ) == 0 ) with expansion: 1 == 0 with message: Testing if fib[1] (1) is even Misc.tests.cpp:: PASSED: CHECK( ( fib[i] % 2 ) == 0 ) with expansion: 0 == 0 with message: Testing if fib[2] (2) is even Misc.tests.cpp:: FAILED: CHECK( ( fib[i] % 2 ) == 0 ) with expansion: 1 == 0 with message: Testing if fib[3] (3) is even Misc.tests.cpp:: FAILED: CHECK( ( fib[i] % 2 ) == 0 ) with expansion: 1 == 0 with message: Testing if fib[4] (5) is even Misc.tests.cpp:: PASSED: CHECK( ( fib[i] % 2 ) == 0 ) with expansion: 0 == 0 with message: Testing if fib[5] (8) is even Misc.tests.cpp:: FAILED: CHECK( ( fib[i] % 2 ) == 0 ) with expansion: 1 == 0 with message: Testing if fib[6] (13) is even Misc.tests.cpp:: FAILED: CHECK( ( fib[i] % 2 ) == 0 ) with expansion: 1 == 0 with message: Testing if fib[7] (21) is even ------------------------------------------------------------------------------- more nested SECTION tests s1 s2 ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: FAILED: REQUIRE( a == b ) with expansion: 1 == 2 ------------------------------------------------------------------------------- more nested SECTION tests s1 s3 ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( a != b ) with expansion: 1 != 2 ------------------------------------------------------------------------------- more nested SECTION tests s1 s4 ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( a < b ) with expansion: 1 < 2 ------------------------------------------------------------------------------- nested SECTION tests s1 ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( a != b ) with expansion: 1 != 2 Misc.tests.cpp:: PASSED: REQUIRE( b != a ) with expansion: 2 != 1 ------------------------------------------------------------------------------- nested SECTION tests s1 s2 ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( a != b ) with expansion: 1 != 2 ------------------------------------------------------------------------------- non streamable - with conv. op ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( s == "7" ) with expansion: "7" == "7" ------------------------------------------------------------------------------- non-copyable objects ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: CHECK( ti == typeid(int) ) with expansion: {?} == {?} ------------------------------------------------------------------------------- not allowed ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: ------------------------------------------------------------------------------- null strings ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( makeString( false ) != static_cast(0) ) with expansion: "valid string" != {null string} Misc.tests.cpp:: PASSED: REQUIRE( makeString( true ) == static_cast(0) ) with expansion: {null string} == {null string} ------------------------------------------------------------------------------- null_ptr ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( ptr.get() == 0 ) with expansion: 0 == 0 ------------------------------------------------------------------------------- pair > -> toString ------------------------------------------------------------------------------- ToStringPair.tests.cpp: ............................................................................... ToStringPair.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" ) with expansion: "{ { 42, "Arthur" }, { "Ford", 24 } }" == "{ { 42, "Arthur" }, { "Ford", 24 } }" ------------------------------------------------------------------------------- pointer to class ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: PASSED: REQUIRE( p == 0 ) with expansion: 0 == 0 ------------------------------------------------------------------------------- random SECTION tests s1 ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( a != b ) with expansion: 1 != 2 Misc.tests.cpp:: PASSED: REQUIRE( b != a ) with expansion: 2 != 1 ------------------------------------------------------------------------------- random SECTION tests s2 ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( a != b ) with expansion: 1 != 2 ------------------------------------------------------------------------------- replaceInPlace replace single char ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: CHECK( Catch::replaceInPlace( letters, "b", "z" ) ) with expansion: true String.tests.cpp:: PASSED: CHECK( letters == "azcdefcg" ) with expansion: "azcdefcg" == "azcdefcg" ------------------------------------------------------------------------------- replaceInPlace replace two chars ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: CHECK( Catch::replaceInPlace( letters, "c", "z" ) ) with expansion: true String.tests.cpp:: PASSED: CHECK( letters == "abzdefzg" ) with expansion: "abzdefzg" == "abzdefzg" ------------------------------------------------------------------------------- replaceInPlace replace first char ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: CHECK( Catch::replaceInPlace( letters, "a", "z" ) ) with expansion: true String.tests.cpp:: PASSED: CHECK( letters == "zbcdefcg" ) with expansion: "zbcdefcg" == "zbcdefcg" ------------------------------------------------------------------------------- replaceInPlace replace last char ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: CHECK( Catch::replaceInPlace( letters, "g", "z" ) ) with expansion: true String.tests.cpp:: PASSED: CHECK( letters == "abcdefcz" ) with expansion: "abcdefcz" == "abcdefcz" ------------------------------------------------------------------------------- replaceInPlace replace all chars ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: CHECK( Catch::replaceInPlace( letters, letters, "replaced" ) ) with expansion: true String.tests.cpp:: PASSED: CHECK( letters == "replaced" ) with expansion: "replaced" == "replaced" ------------------------------------------------------------------------------- replaceInPlace replace no chars ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: CHECK_FALSE( Catch::replaceInPlace( letters, "x", "z" ) ) with expansion: !false String.tests.cpp:: PASSED: CHECK( letters == letters ) with expansion: "abcdefcg" == "abcdefcg" ------------------------------------------------------------------------------- replaceInPlace escape ' ------------------------------------------------------------------------------- String.tests.cpp: ............................................................................... String.tests.cpp:: PASSED: CHECK( Catch::replaceInPlace( s, "'", "|'" ) ) with expansion: true String.tests.cpp:: PASSED: CHECK( s == "didn|'t" ) with expansion: "didn|'t" == "didn|'t" ------------------------------------------------------------------------------- second tag ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... No assertions in test case 'second tag' ------------------------------------------------------------------------------- send a single char to INFO ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: FAILED: REQUIRE( false ) with message: 3 ------------------------------------------------------------------------------- sends information to INFO ------------------------------------------------------------------------------- Message.tests.cpp: ............................................................................... Message.tests.cpp:: FAILED: REQUIRE( false ) with messages: hi i := 7 ------------------------------------------------------------------------------- std::map is convertible string empty ------------------------------------------------------------------------------- ToStringGeneral.tests.cpp: ............................................................................... ToStringGeneral.tests.cpp:: PASSED: REQUIRE( Catch::Detail::stringify( emptyMap ) == "{ }" ) with expansion: "{ }" == "{ }" ------------------------------------------------------------------------------- std::map is convertible string single item ------------------------------------------------------------------------------- ToStringGeneral.tests.cpp: ............................................................................... ToStringGeneral.tests.cpp:: PASSED: REQUIRE( Catch::Detail::stringify( map ) == "{ { \"one\", 1 } }" ) with expansion: "{ { "one", 1 } }" == "{ { "one", 1 } }" ------------------------------------------------------------------------------- std::map is convertible string several items ------------------------------------------------------------------------------- ToStringGeneral.tests.cpp: ............................................................................... ToStringGeneral.tests.cpp:: PASSED: REQUIRE( Catch::Detail::stringify( map ) == "{ { \"abc\", 1 }, { \"def\", 2 }, { \"ghi\", 3 } }" ) with expansion: "{ { "abc", 1 }, { "def", 2 }, { "ghi", 3 } }" == "{ { "abc", 1 }, { "def", 2 }, { "ghi", 3 } }" ------------------------------------------------------------------------------- std::pair -> toString ------------------------------------------------------------------------------- ToStringPair.tests.cpp: ............................................................................... ToStringPair.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(value) == "{ 34, \"xyzzy\" }" ) with expansion: "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" ------------------------------------------------------------------------------- std::pair -> toString ------------------------------------------------------------------------------- ToStringPair.tests.cpp: ............................................................................... ToStringPair.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify( value ) == "{ 34, \"xyzzy\" }" ) with expansion: "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" ------------------------------------------------------------------------------- std::set is convertible string empty ------------------------------------------------------------------------------- ToStringGeneral.tests.cpp: ............................................................................... ToStringGeneral.tests.cpp:: PASSED: REQUIRE( Catch::Detail::stringify( emptySet ) == "{ }" ) with expansion: "{ }" == "{ }" ------------------------------------------------------------------------------- std::set is convertible string single item ------------------------------------------------------------------------------- ToStringGeneral.tests.cpp: ............................................................................... ToStringGeneral.tests.cpp:: PASSED: REQUIRE( Catch::Detail::stringify( set ) == "{ \"one\" }" ) with expansion: "{ "one" }" == "{ "one" }" ------------------------------------------------------------------------------- std::set is convertible string several items ------------------------------------------------------------------------------- ToStringGeneral.tests.cpp: ............................................................................... ToStringGeneral.tests.cpp:: PASSED: REQUIRE( Catch::Detail::stringify( set ) == "{ \"abc\", \"def\", \"ghi\" }" ) with expansion: "{ "abc", "def", "ghi" }" == "{ "abc", "def", "ghi" }" ------------------------------------------------------------------------------- std::vector > -> toString ------------------------------------------------------------------------------- ToStringPair.tests.cpp: ............................................................................... ToStringPair.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify( pr ) == "{ { \"green\", 55 } }" ) with expansion: "{ { "green", 55 } }" == "{ { "green", 55 } }" ------------------------------------------------------------------------------- string literals of different sizes can be compared ------------------------------------------------------------------------------- Tricky.tests.cpp: ............................................................................... Tricky.tests.cpp:: FAILED: REQUIRE( std::string( "first" ) == "second" ) with expansion: "first" == "second" ------------------------------------------------------------------------------- stringify ranges ------------------------------------------------------------------------------- ToStringWhich.tests.cpp: ............................................................................... ToStringWhich.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(streamable_range{}) == "op<<(streamable_range)" ) with expansion: "op<<(streamable_range)" == "op<<(streamable_range)" ToStringWhich.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(stringmaker_range{}) == "stringmaker(streamable_range)" ) with expansion: "stringmaker(streamable_range)" == "stringmaker(streamable_range)" ToStringWhich.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(just_range{}) == "{ 1, 2, 3, 4 }" ) with expansion: "{ 1, 2, 3, 4 }" == "{ 1, 2, 3, 4 }" ToStringWhich.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(disabled_range{}) == "{ !!! }" ) with expansion: "{ !!! }" == "{ !!! }" ------------------------------------------------------------------------------- stringify( has_maker ) ------------------------------------------------------------------------------- ToStringWhich.tests.cpp: ............................................................................... ToStringWhich.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify( item ) == "StringMaker" ) with expansion: "StringMaker" == "StringMaker" ------------------------------------------------------------------------------- stringify( has_maker_and_operator ) ------------------------------------------------------------------------------- ToStringWhich.tests.cpp: ............................................................................... ToStringWhich.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify( item ) == "StringMaker" ) with expansion: "StringMaker" == "StringMaker" ------------------------------------------------------------------------------- stringify( has_neither ) ------------------------------------------------------------------------------- ToStringWhich.tests.cpp: ............................................................................... ToStringWhich.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(item) == "{ !!! }" ) with expansion: "{ !!! }" == "{ !!! }" ------------------------------------------------------------------------------- stringify( has_operator ) ------------------------------------------------------------------------------- ToStringWhich.tests.cpp: ............................................................................... ToStringWhich.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify( item ) == "operator<<( has_operator )" ) with expansion: "operator<<( has_operator )" == "operator<<( has_operator )" ------------------------------------------------------------------------------- stringify( vectors ) ------------------------------------------------------------------------------- ToStringWhich.tests.cpp: ............................................................................... ToStringWhich.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify( v ) == "{ StringMaker }" ) with expansion: "{ StringMaker }" == "{ StringMaker }" ------------------------------------------------------------------------------- stringify( vectors ) ------------------------------------------------------------------------------- ToStringWhich.tests.cpp: ............................................................................... ToStringWhich.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify( v ) == "{ StringMaker }" ) with expansion: "{ StringMaker }" == "{ StringMaker }" ------------------------------------------------------------------------------- stringify( vectors ) ------------------------------------------------------------------------------- ToStringWhich.tests.cpp: ............................................................................... ToStringWhich.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify( v ) == "{ operator<<( has_operator ) }" ) with expansion: "{ operator<<( has_operator ) }" == "{ operator<<( has_operator ) }" ------------------------------------------------------------------------------- thrown std::strings are translated ------------------------------------------------------------------------------- Exception.tests.cpp: ............................................................................... Exception.tests.cpp:: FAILED: due to unexpected exception with message: Why would you throw a std::string? ------------------------------------------------------------------------------- toString on const wchar_t const pointer returns the string contents ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: CHECK( result == "\"wide load\"" ) with expansion: ""wide load"" == ""wide load"" ------------------------------------------------------------------------------- toString on const wchar_t pointer returns the string contents ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: CHECK( result == "\"wide load\"" ) with expansion: ""wide load"" == ""wide load"" ------------------------------------------------------------------------------- toString on wchar_t const pointer returns the string contents ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: CHECK( result == "\"wide load\"" ) with expansion: ""wide load"" == ""wide load"" ------------------------------------------------------------------------------- toString on wchar_t returns the string contents ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: CHECK( result == "\"wide load\"" ) with expansion: ""wide load"" == ""wide load"" ------------------------------------------------------------------------------- toString(enum class w/operator<<) ------------------------------------------------------------------------------- EnumToString.tests.cpp: ............................................................................... EnumToString.tests.cpp:: PASSED: CHECK( ::Catch::Detail::stringify(e0) == "E2/V0" ) with expansion: "E2/V0" == "E2/V0" EnumToString.tests.cpp:: PASSED: CHECK( ::Catch::Detail::stringify(e1) == "E2/V1" ) with expansion: "E2/V1" == "E2/V1" EnumToString.tests.cpp:: PASSED: CHECK( ::Catch::Detail::stringify(e3) == "Unknown enum value 10" ) with expansion: "Unknown enum value 10" == "Unknown enum value 10" ------------------------------------------------------------------------------- toString(enum class) ------------------------------------------------------------------------------- EnumToString.tests.cpp: ............................................................................... EnumToString.tests.cpp:: PASSED: CHECK( ::Catch::Detail::stringify(e0) == "0" ) with expansion: "0" == "0" EnumToString.tests.cpp:: PASSED: CHECK( ::Catch::Detail::stringify(e1) == "1" ) with expansion: "1" == "1" ------------------------------------------------------------------------------- toString(enum w/operator<<) ------------------------------------------------------------------------------- EnumToString.tests.cpp: ............................................................................... EnumToString.tests.cpp:: PASSED: CHECK( ::Catch::Detail::stringify(e0) == "E2{0}" ) with expansion: "E2{0}" == "E2{0}" EnumToString.tests.cpp:: PASSED: CHECK( ::Catch::Detail::stringify(e1) == "E2{1}" ) with expansion: "E2{1}" == "E2{1}" ------------------------------------------------------------------------------- toString(enum) ------------------------------------------------------------------------------- EnumToString.tests.cpp: ............................................................................... EnumToString.tests.cpp:: PASSED: CHECK( ::Catch::Detail::stringify(e0) == "0" ) with expansion: "0" == "0" EnumToString.tests.cpp:: PASSED: CHECK( ::Catch::Detail::stringify(e1) == "1" ) with expansion: "1" == "1" ------------------------------------------------------------------------------- tuple<> ------------------------------------------------------------------------------- ToStringTuple.tests.cpp: ............................................................................... ToStringTuple.tests.cpp:: PASSED: CHECK( "{ }" == ::Catch::Detail::stringify(type{}) ) with expansion: "{ }" == "{ }" ToStringTuple.tests.cpp:: PASSED: CHECK( "{ }" == ::Catch::Detail::stringify(value) ) with expansion: "{ }" == "{ }" ------------------------------------------------------------------------------- tuple ------------------------------------------------------------------------------- ToStringTuple.tests.cpp: ............................................................................... ToStringTuple.tests.cpp:: PASSED: CHECK( "1.2f" == ::Catch::Detail::stringify(float(1.2)) ) with expansion: "1.2f" == "1.2f" ToStringTuple.tests.cpp:: PASSED: CHECK( "{ 1.2f, 0 }" == ::Catch::Detail::stringify(type{1.2f,0}) ) with expansion: "{ 1.2f, 0 }" == "{ 1.2f, 0 }" ------------------------------------------------------------------------------- tuple ------------------------------------------------------------------------------- ToStringTuple.tests.cpp: ............................................................................... ToStringTuple.tests.cpp:: PASSED: CHECK( "{ 0 }" == ::Catch::Detail::stringify(type{0}) ) with expansion: "{ 0 }" == "{ 0 }" ------------------------------------------------------------------------------- tuple<0,int,const char *> ------------------------------------------------------------------------------- ToStringTuple.tests.cpp: ............................................................................... ToStringTuple.tests.cpp:: PASSED: CHECK( "{ 0, 42, \"Catch me\" }" == ::Catch::Detail::stringify(value) ) with expansion: "{ 0, 42, "Catch me" }" == "{ 0, 42, "Catch me" }" ------------------------------------------------------------------------------- tuple ------------------------------------------------------------------------------- ToStringTuple.tests.cpp: ............................................................................... ToStringTuple.tests.cpp:: PASSED: CHECK( "{ \"hello\", \"world\" }" == ::Catch::Detail::stringify(type{"hello","world"}) ) with expansion: "{ "hello", "world" }" == "{ "hello", "world" }" ------------------------------------------------------------------------------- tuple,tuple<>,float> ------------------------------------------------------------------------------- ToStringTuple.tests.cpp: ............................................................................... ToStringTuple.tests.cpp:: PASSED: CHECK( "{ { 42 }, { }, 1.2f }" == ::Catch::Detail::stringify(value) ) with expansion: "{ { 42 }, { }, 1.2f }" == "{ { 42 }, { }, 1.2f }" ------------------------------------------------------------------------------- vec> -> toString ------------------------------------------------------------------------------- ToStringVector.tests.cpp: ............................................................................... ToStringVector.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(v) == "{ }" ) with expansion: "{ }" == "{ }" ToStringVector.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(v) == "{ { \"hello\" }, { \"world\" } }" ) with expansion: "{ { "hello" }, { "world" } }" == "{ { "hello" }, { "world" } }" ------------------------------------------------------------------------------- vector -> toString ------------------------------------------------------------------------------- ToStringVector.tests.cpp: ............................................................................... ToStringVector.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(bools) == "{ }" ) with expansion: "{ }" == "{ }" ToStringVector.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(bools) == "{ true }" ) with expansion: "{ true }" == "{ true }" ToStringVector.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(bools) == "{ true, false }" ) with expansion: "{ true, false }" == "{ true, false }" ------------------------------------------------------------------------------- vector -> toString ------------------------------------------------------------------------------- ToStringVector.tests.cpp: ............................................................................... ToStringVector.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(vv) == "{ }" ) with expansion: "{ }" == "{ }" ToStringVector.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(vv) == "{ 42 }" ) with expansion: "{ 42 }" == "{ 42 }" ToStringVector.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(vv) == "{ 42, 250 }" ) with expansion: "{ 42, 250 }" == "{ 42, 250 }" ------------------------------------------------------------------------------- vector -> toString ------------------------------------------------------------------------------- ToStringVector.tests.cpp: ............................................................................... ToStringVector.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(vv) == "{ }" ) with expansion: "{ }" == "{ }" ToStringVector.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(vv) == "{ 42 }" ) with expansion: "{ 42 }" == "{ 42 }" ToStringVector.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(vv) == "{ 42, 250 }" ) with expansion: "{ 42, 250 }" == "{ 42, 250 }" ------------------------------------------------------------------------------- vector -> toString ------------------------------------------------------------------------------- ToStringVector.tests.cpp: ............................................................................... ToStringVector.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(vv) == "{ }" ) with expansion: "{ }" == "{ }" ToStringVector.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(vv) == "{ \"hello\" }" ) with expansion: "{ "hello" }" == "{ "hello" }" ToStringVector.tests.cpp:: PASSED: REQUIRE( ::Catch::Detail::stringify(vv) == "{ \"hello\", \"world\" }" ) with expansion: "{ "hello", "world" }" == "{ "hello", "world" }" ------------------------------------------------------------------------------- vectors can be sized and resized ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( v.size() == 5 ) with expansion: 5 == 5 Misc.tests.cpp:: PASSED: REQUIRE( v.capacity() >= 5 ) with expansion: 5 >= 5 ------------------------------------------------------------------------------- vectors can be sized and resized resizing bigger changes size and capacity ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( v.size() == 10 ) with expansion: 10 == 10 Misc.tests.cpp:: PASSED: REQUIRE( v.capacity() >= 10 ) with expansion: 10 >= 10 ------------------------------------------------------------------------------- vectors can be sized and resized ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( v.size() == 5 ) with expansion: 5 == 5 Misc.tests.cpp:: PASSED: REQUIRE( v.capacity() >= 5 ) with expansion: 5 >= 5 ------------------------------------------------------------------------------- vectors can be sized and resized resizing smaller changes size but not capacity ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( v.size() == 0 ) with expansion: 0 == 0 Misc.tests.cpp:: PASSED: REQUIRE( v.capacity() >= 5 ) with expansion: 5 >= 5 ------------------------------------------------------------------------------- vectors can be sized and resized resizing smaller changes size but not capacity We can use the 'swap trick' to reset the capacity ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( v.capacity() == 0 ) with expansion: 0 == 0 ------------------------------------------------------------------------------- vectors can be sized and resized ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( v.size() == 5 ) with expansion: 5 == 5 Misc.tests.cpp:: PASSED: REQUIRE( v.capacity() >= 5 ) with expansion: 5 >= 5 ------------------------------------------------------------------------------- vectors can be sized and resized reserving bigger changes capacity but not size ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( v.size() == 5 ) with expansion: 5 == 5 Misc.tests.cpp:: PASSED: REQUIRE( v.capacity() >= 10 ) with expansion: 10 >= 10 ------------------------------------------------------------------------------- vectors can be sized and resized ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( v.size() == 5 ) with expansion: 5 == 5 Misc.tests.cpp:: PASSED: REQUIRE( v.capacity() >= 5 ) with expansion: 5 >= 5 ------------------------------------------------------------------------------- vectors can be sized and resized reserving smaller does not change size or capacity ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: REQUIRE( v.size() == 5 ) with expansion: 5 == 5 Misc.tests.cpp:: PASSED: REQUIRE( v.capacity() >= 5 ) with expansion: 5 >= 5 ------------------------------------------------------------------------------- xmlentitycheck embedded xml ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: ------------------------------------------------------------------------------- xmlentitycheck encoded chars ------------------------------------------------------------------------------- Misc.tests.cpp: ............................................................................... Misc.tests.cpp:: PASSED: =============================================================================== test cases: 202 | 136 passed | 62 failed | 4 failed as expected assertions: 1021 | 879 passed | 121 failed | 21 failed as expected