
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<exe-name> is a <version> host application.
Run with -? for options

-------------------------------------------------------------------------------
# A test name that starts with a #
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
with message:
  yay

-------------------------------------------------------------------------------
#1005: Comparing pointer to int and long (NULL can be either on various
       systems)
-------------------------------------------------------------------------------
Decomposition.tests.cpp:<line number>
...............................................................................

Decomposition.tests.cpp:<line number>:
PASSED:
  REQUIRE( fptr == 0 )
with expansion:
  0 == 0

Decomposition.tests.cpp:<line number>:
PASSED:
  REQUIRE( fptr == 0l )
with expansion:
  0 == 0

-------------------------------------------------------------------------------
#1027
-------------------------------------------------------------------------------
Compilation.tests.cpp:<line number>
...............................................................................

Compilation.tests.cpp:<line number>:
PASSED:
  REQUIRE( y.v == 0 )
with expansion:
  0 == 0

Compilation.tests.cpp:<line number>:
PASSED:
  REQUIRE( 0 == y.v )
with expansion:
  0 == 0

-------------------------------------------------------------------------------
#748 - captures with unexpected exceptions
  outside assertions
-------------------------------------------------------------------------------
Exception.tests.cpp:<line number>
...............................................................................

Exception.tests.cpp:<line number>: FAILED:
due to unexpected exception with messages:
  answer := 42
  expected exception

-------------------------------------------------------------------------------
#748 - captures with unexpected exceptions
  inside REQUIRE_NOTHROW
-------------------------------------------------------------------------------
Exception.tests.cpp:<line number>
...............................................................................

Exception.tests.cpp:<line number>: 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:<line number>
...............................................................................

Exception.tests.cpp:<line number>:
PASSED:
  REQUIRE_THROWS( thisThrows() )
with message:
  answer := 42

-------------------------------------------------------------------------------
#809
-------------------------------------------------------------------------------
Compilation.tests.cpp:<line number>
...............................................................................

Compilation.tests.cpp:<line number>:
PASSED:
  REQUIRE( 42 == f )
with expansion:
  42 == {?}

-------------------------------------------------------------------------------
#833
-------------------------------------------------------------------------------
Compilation.tests.cpp:<line number>
...............................................................................

Compilation.tests.cpp:<line number>:
PASSED:
  REQUIRE( a == t )
with expansion:
  3 == 3

Compilation.tests.cpp:<line number>:
PASSED:
  CHECK( a == t )
with expansion:
  3 == 3

Compilation.tests.cpp:<line number>:
PASSED:
  REQUIRE_THROWS( throws_int(true) )

Compilation.tests.cpp:<line number>:
PASSED:
  CHECK_THROWS_AS( throws_int(true), int )

Compilation.tests.cpp:<line number>:
PASSED:
  REQUIRE_NOTHROW( throws_int(false) )

Compilation.tests.cpp:<line number>:
PASSED:
  REQUIRE_THAT( "aaa", Catch::EndsWith("aaa") )
with expansion:
  "aaa" ends with: "aaa"

Compilation.tests.cpp:<line number>:
PASSED:
  REQUIRE( templated_tests<int>(3) )
with expansion:
  true

-------------------------------------------------------------------------------
#835 -- errno should not be touched by Catch
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>: FAILED:
  CHECK( f() == 0 )
with expansion:
  1 == 0

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( errno == 1 )
with expansion:
  1 == 1

-------------------------------------------------------------------------------
#872
-------------------------------------------------------------------------------
Compilation.tests.cpp:<line number>
...............................................................................

Compilation.tests.cpp:<line number>:
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:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
with message:
  Everything is OK

-------------------------------------------------------------------------------
#961 -- Dynamically created sections should all be reported
  Looped section 1
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
with message:
  Everything is OK

-------------------------------------------------------------------------------
#961 -- Dynamically created sections should all be reported
  Looped section 2
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
with message:
  Everything is OK

-------------------------------------------------------------------------------
#961 -- Dynamically created sections should all be reported
  Looped section 3
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
with message:
  Everything is OK

-------------------------------------------------------------------------------
#961 -- Dynamically created sections should all be reported
  Looped section 4
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
with message:
  Everything is OK

-------------------------------------------------------------------------------
'Not' checks that should fail
-------------------------------------------------------------------------------
Condition.tests.cpp:<line number>
...............................................................................

Condition.tests.cpp:<line number>: FAILED:
  CHECK( false != false )

Condition.tests.cpp:<line number>: FAILED:
  CHECK( true != true )

Condition.tests.cpp:<line number>: FAILED:
  CHECK( !true )
with expansion:
  false

Condition.tests.cpp:<line number>: FAILED:
  CHECK_FALSE( true )
with expansion:
  !true

Condition.tests.cpp:<line number>: FAILED:
  CHECK( !trueValue )
with expansion:
  false

Condition.tests.cpp:<line number>: FAILED:
  CHECK_FALSE( trueValue )
with expansion:
  !true

Condition.tests.cpp:<line number>: FAILED:
  CHECK( !(1 == 1) )
with expansion:
  false

Condition.tests.cpp:<line number>: FAILED:
  CHECK_FALSE( 1 == 1 )

-------------------------------------------------------------------------------
'Not' checks that should succeed
-------------------------------------------------------------------------------
Condition.tests.cpp:<line number>
...............................................................................

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( false == false )

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( true == true )

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( !false )
with expansion:
  true

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE_FALSE( false )
with expansion:
  !false

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( !falseValue )
with expansion:
  true

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE_FALSE( falseValue )
with expansion:
  !false

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( !(1 == 2) )
with expansion:
  true

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE_FALSE( 1 == 2 )

-------------------------------------------------------------------------------
(unimplemented) static bools can be evaluated
  compare to true
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( is_true<true>::value == true )
with expansion:
  true == true

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( true == is_true<true>::value )
with expansion:
  true == true

-------------------------------------------------------------------------------
(unimplemented) static bools can be evaluated
  compare to false
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( is_true<false>::value == false )
with expansion:
  false == false

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( false == is_true<false>::value )
with expansion:
  false == false

-------------------------------------------------------------------------------
(unimplemented) static bools can be evaluated
  negation
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( !is_true<false>::value )
with expansion:
  true

-------------------------------------------------------------------------------
(unimplemented) static bools can be evaluated
  double negation
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( !!is_true<true>::value )
with expansion:
  true

-------------------------------------------------------------------------------
(unimplemented) static bools can be evaluated
  direct
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( is_true<true>::value )
with expansion:
  true

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE_FALSE( is_true<false>::value )
with expansion:
  !false

-------------------------------------------------------------------------------
A METHOD_AS_TEST_CASE based test run that fails
-------------------------------------------------------------------------------
Class.tests.cpp:<line number>
...............................................................................

Class.tests.cpp:<line number>: FAILED:
  REQUIRE( s == "world" )
with expansion:
  "hello" == "world"

-------------------------------------------------------------------------------
A METHOD_AS_TEST_CASE based test run that succeeds
-------------------------------------------------------------------------------
Class.tests.cpp:<line number>
...............................................................................

Class.tests.cpp:<line number>:
PASSED:
  REQUIRE( s == "hello" )
with expansion:
  "hello" == "hello"

-------------------------------------------------------------------------------
A TEST_CASE_METHOD based test run that fails
-------------------------------------------------------------------------------
Class.tests.cpp:<line number>
...............................................................................

Class.tests.cpp:<line number>: FAILED:
  REQUIRE( m_a == 2 )
with expansion:
  1 == 2

-------------------------------------------------------------------------------
A TEST_CASE_METHOD based test run that succeeds
-------------------------------------------------------------------------------
Class.tests.cpp:<line number>
...............................................................................

Class.tests.cpp:<line number>:
PASSED:
  REQUIRE( m_a == 1 )
with expansion:
  1 == 1

-------------------------------------------------------------------------------
A couple of nested sections followed by a failure
  Outer
  Inner
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
with message:
  that's not flying - that's failing in style

-------------------------------------------------------------------------------
A couple of nested sections followed by a failure
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>: FAILED:
explicitly with message:
  to infinity and beyond

-------------------------------------------------------------------------------
A failing expression with a non streamable type is still captured
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>: FAILED:
  CHECK( &o1 == &o2 )
with expansion:
  0x<hex digits> == 0x<hex digits>

Tricky.tests.cpp:<line number>: FAILED:
  CHECK( o1 == o2 )
with expansion:
  {?} == {?}

-------------------------------------------------------------------------------
Absolute margin
-------------------------------------------------------------------------------
Approx.tests.cpp:<line number>
...............................................................................

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( 104.0 != Approx(100.0) )
with expansion:
  104.0 != Approx( 100.0 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( 104.0 == Approx(100.0).margin(5) )
with expansion:
  104.0 == Approx( 100.0 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( 104.0 == Approx(100.0).margin(4) )
with expansion:
  104.0 == Approx( 100.0 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( 104.0 != Approx(100.0).margin(3) )
with expansion:
  104.0 != Approx( 100.0 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( 100.3 != Approx(100.0) )
with expansion:
  100.3 != Approx( 100.0 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( 100.3 == Approx(100.0).margin(0.5) )
with expansion:
  100.3 == Approx( 100.0 )

-------------------------------------------------------------------------------
An expression with side-effects should only be evaluated once
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( i++ == 7 )
with expansion:
  7 == 7

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( i++ == 8 )
with expansion:
  8 == 8

-------------------------------------------------------------------------------
An unchecked exception reports the line of the last assertion
-------------------------------------------------------------------------------
Exception.tests.cpp:<line number>
...............................................................................

Exception.tests.cpp:<line number>:
PASSED:
  CHECK( 1 == 1 )

Exception.tests.cpp:<line number>: FAILED:
  {Unknown expression after the reported line}
due to unexpected exception with message:
  unexpected exception

-------------------------------------------------------------------------------
Anonymous test case 1
-------------------------------------------------------------------------------
VariadicMacros.tests.cpp:<line number>
...............................................................................

VariadicMacros.tests.cpp:<line number>:
PASSED:
with message:
  anonymous test case

-------------------------------------------------------------------------------
Approx setters validate their arguments
-------------------------------------------------------------------------------
Approx.tests.cpp:<line number>
...............................................................................

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE_NOTHROW( Approx(0).margin(0) )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE_NOTHROW( Approx(0).margin(1234656) )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE_THROWS_AS( Approx(0).margin(-2), std::domain_error )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE_NOTHROW( Approx(0).epsilon(0) )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE_NOTHROW( Approx(0).epsilon(1) )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE_THROWS_AS( Approx(0).epsilon(-0.001), std::domain_error )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE_THROWS_AS( Approx(0).epsilon(1.0001), std::domain_error )

-------------------------------------------------------------------------------
Approx with exactly-representable margin
-------------------------------------------------------------------------------
Approx.tests.cpp:<line number>
...............................................................................

Approx.tests.cpp:<line number>:
PASSED:
  CHECK( 0.25f == Approx(0.0f).margin(0.25f) )
with expansion:
  0.25f == Approx( 0.0 )

Approx.tests.cpp:<line number>:
PASSED:
  CHECK( 0.0f == Approx(0.25f).margin(0.25f) )
with expansion:
  0.0f == Approx( 0.25 )

Approx.tests.cpp:<line number>:
PASSED:
  CHECK( 0.5f == Approx(0.25f).margin(0.25f) )
with expansion:
  0.5f == Approx( 0.25 )

Approx.tests.cpp:<line number>:
PASSED:
  CHECK( 245.0f == Approx(245.25f).margin(0.25f) )
with expansion:
  245.0f == Approx( 245.25 )

Approx.tests.cpp:<line number>:
PASSED:
  CHECK( 245.5f == Approx(245.25f).margin(0.25f) )
with expansion:
  245.5f == Approx( 245.25 )

-------------------------------------------------------------------------------
Approximate PI
-------------------------------------------------------------------------------
Approx.tests.cpp:<line number>
...............................................................................

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) )
with expansion:
  3.1428571429 == Approx( 3.141 )

Approx.tests.cpp:<line number>:
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:<line number>
...............................................................................

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( d != Approx( 1.231 ) )
with expansion:
  1.23 != Approx( 1.231 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( d == Approx( 1.231 ).epsilon( 0.1 ) )
with expansion:
  1.23 == Approx( 1.231 )

-------------------------------------------------------------------------------
Approximate comparisons with floats
-------------------------------------------------------------------------------
Approx.tests.cpp:<line number>
...............................................................................

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( 1.23f == Approx( 1.23f ) )
with expansion:
  1.23f == Approx( 1.2300000191 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( 0.0f == Approx( 0.0f ) )
with expansion:
  0.0f == Approx( 0.0 )

-------------------------------------------------------------------------------
Approximate comparisons with ints
-------------------------------------------------------------------------------
Approx.tests.cpp:<line number>
...............................................................................

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( 1 == Approx( 1 ) )
with expansion:
  1 == Approx( 1.0 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( 0 == Approx( 0 ) )
with expansion:
  0 == Approx( 0.0 )

-------------------------------------------------------------------------------
Approximate comparisons with mixed numeric types
-------------------------------------------------------------------------------
Approx.tests.cpp:<line number>
...............................................................................

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( 1.0f == Approx( 1 ) )
with expansion:
  1.0f == Approx( 1.0 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( 0 == Approx( dZero) )
with expansion:
  0 == Approx( 0.0 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( 0 == Approx( dSmall ).margin( 0.001 ) )
with expansion:
  0 == Approx( 0.00001 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( 1.234f == Approx( dMedium ) )
with expansion:
  1.234f == Approx( 1.234 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( dMedium == Approx( 1.234f ) )
with expansion:
  1.234 == Approx( 1.2339999676 )

-------------------------------------------------------------------------------
Assertions then sections
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( true )

-------------------------------------------------------------------------------
Assertions then sections
  A section
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( true )

-------------------------------------------------------------------------------
Assertions then sections
  A section
  Another section
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( true )

-------------------------------------------------------------------------------
Assertions then sections
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( true )

-------------------------------------------------------------------------------
Assertions then sections
  A section
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( true )

-------------------------------------------------------------------------------
Assertions then sections
  A section
  Another other section
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( true )

-------------------------------------------------------------------------------
Assorted miscellaneous tests
-------------------------------------------------------------------------------
Approx.tests.cpp:<line number>
...............................................................................

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( INFINITY == Approx(INFINITY) )
with expansion:
  inff == Approx( inf )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( NAN != Approx(NAN) )
with expansion:
  nanf != Approx( nan )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE_FALSE( NAN == Approx(NAN) )
with expansion:
  !(nanf == Approx( nan ))

-------------------------------------------------------------------------------
Bitfields can be captured (#1027)
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( y.v == 0 )
with expansion:
  0 == 0

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( 0 == y.v )
with expansion:
  0 == 0

-------------------------------------------------------------------------------
Capture and info messages
  Capture should stringify like assertions
-------------------------------------------------------------------------------
ToStringGeneral.tests.cpp:<line number>
...............................................................................

ToStringGeneral.tests.cpp:<line number>:
PASSED:
  REQUIRE( true )
with message:
  i := 2

-------------------------------------------------------------------------------
Capture and info messages
  Info should NOT stringify the way assertions do
-------------------------------------------------------------------------------
ToStringGeneral.tests.cpp:<line number>
...............................................................................

ToStringGeneral.tests.cpp:<line number>:
PASSED:
  REQUIRE( true )
with message:
  3

-------------------------------------------------------------------------------
Character pretty printing
  Specifically escaped
-------------------------------------------------------------------------------
ToStringGeneral.tests.cpp:<line number>
...............................................................................

ToStringGeneral.tests.cpp:<line number>:
PASSED:
  CHECK( tab == '\t' )
with expansion:
  '\t' == '\t'

ToStringGeneral.tests.cpp:<line number>:
PASSED:
  CHECK( newline == '\n' )
with expansion:
  '\n' == '\n'

ToStringGeneral.tests.cpp:<line number>:
PASSED:
  CHECK( carr_return == '\r' )
with expansion:
  '\r' == '\r'

ToStringGeneral.tests.cpp:<line number>:
PASSED:
  CHECK( form_feed == '\f' )
with expansion:
  '\f' == '\f'

-------------------------------------------------------------------------------
Character pretty printing
  General chars
-------------------------------------------------------------------------------
ToStringGeneral.tests.cpp:<line number>
...............................................................................

ToStringGeneral.tests.cpp:<line number>:
PASSED:
  CHECK( space == ' ' )
with expansion:
  ' ' == ' '

ToStringGeneral.tests.cpp:<line number>:
PASSED:
  REQUIRE( c == chars[i] )
with expansion:
  'a' == 'a'

ToStringGeneral.tests.cpp:<line number>:
PASSED:
  REQUIRE( c == chars[i] )
with expansion:
  'z' == 'z'

ToStringGeneral.tests.cpp:<line number>:
PASSED:
  REQUIRE( c == chars[i] )
with expansion:
  'A' == 'A'

ToStringGeneral.tests.cpp:<line number>:
PASSED:
  REQUIRE( c == chars[i] )
with expansion:
  'Z' == 'Z'

-------------------------------------------------------------------------------
Character pretty printing
  Low ASCII
-------------------------------------------------------------------------------
ToStringGeneral.tests.cpp:<line number>
...............................................................................

ToStringGeneral.tests.cpp:<line number>:
PASSED:
  CHECK( null_terminator == '\0' )
with expansion:
  0 == 0

ToStringGeneral.tests.cpp:<line number>:
PASSED:
  REQUIRE( c == i )
with expansion:
  2 == 2

ToStringGeneral.tests.cpp:<line number>:
PASSED:
  REQUIRE( c == i )
with expansion:
  3 == 3

ToStringGeneral.tests.cpp:<line number>:
PASSED:
  REQUIRE( c == i )
with expansion:
  4 == 4

ToStringGeneral.tests.cpp:<line number>:
PASSED:
  REQUIRE( c == i )
with expansion:
  5 == 5

-------------------------------------------------------------------------------
Commas in various macros are allowed
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE_THROWS( std::vector<constructor_throws>{constructor_throws{}, constructor_throws{}} )

Tricky.tests.cpp:<line number>:
PASSED:
  CHECK_THROWS( std::vector<constructor_throws>{constructor_throws{}, constructor_throws{}} )

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE_NOTHROW( std::vector<int>{1, 2, 3} == std::vector<int>{1, 2, 3} )

Tricky.tests.cpp:<line number>:
PASSED:
  CHECK_NOTHROW( std::vector<int>{1, 2, 3} == std::vector<int>{1, 2, 3} )

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( std::vector<int>{1, 2} == std::vector<int>{1, 2} )
with expansion:
  { 1, 2 } == { 1, 2 }

Tricky.tests.cpp:<line number>:
PASSED:
  CHECK( std::vector<int>{1, 2} == std::vector<int>{1, 2} )
with expansion:
  { 1, 2 } == { 1, 2 }

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE_FALSE( std::vector<int>{1, 2} == std::vector<int>{1, 2, 3} )
with expansion:
  !({ 1, 2 } == { 1, 2, 3 })

Tricky.tests.cpp:<line number>:
PASSED:
  CHECK_FALSE( std::vector<int>{1, 2} == std::vector<int>{1, 2, 3} )
with expansion:
  !({ 1, 2 } == { 1, 2, 3 })

Tricky.tests.cpp:<line number>:
PASSED:
  CHECK_NOFAIL( std::vector<int>{1, 2} == std::vector<int>{1, 2} )
with expansion:
  { 1, 2 } == { 1, 2 }

Tricky.tests.cpp:<line number>:
PASSED:
  CHECKED_IF( std::vector<int>{1, 2} == std::vector<int>{1, 2} )
with expansion:
  { 1, 2 } == { 1, 2 }

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( true )

Tricky.tests.cpp:<line number>:
PASSED:
  CHECKED_ELSE( std::vector<int>{1, 2} == std::vector<int>{1, 2} )
with expansion:
  { 1, 2 } == { 1, 2 }

-------------------------------------------------------------------------------
Comparing function pointers
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( a )
with expansion:
  0x<hex digits>

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( a == &foo )
with expansion:
  0x<hex digits> == 0x<hex digits>

-------------------------------------------------------------------------------
Comparison with explicitly convertible types
-------------------------------------------------------------------------------
Approx.tests.cpp:<line number>
...............................................................................

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( td == Approx(10.0) )
with expansion:
  StrongDoubleTypedef(10) == Approx( 10.0 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( Approx(10.0) == td )
with expansion:
  Approx( 10.0 ) == StrongDoubleTypedef(10)

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( td != Approx(11.0) )
with expansion:
  StrongDoubleTypedef(10) != Approx( 11.0 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( Approx(11.0) != td )
with expansion:
  Approx( 11.0 ) != StrongDoubleTypedef(10)

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( td <= Approx(10.0) )
with expansion:
  StrongDoubleTypedef(10) <= Approx( 10.0 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( td <= Approx(11.0) )
with expansion:
  StrongDoubleTypedef(10) <= Approx( 11.0 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( Approx(10.0) <= td )
with expansion:
  Approx( 10.0 ) <= StrongDoubleTypedef(10)

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( Approx(9.0) <= td )
with expansion:
  Approx( 9.0 ) <= StrongDoubleTypedef(10)

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( td >= Approx(9.0) )
with expansion:
  StrongDoubleTypedef(10) >= Approx( 9.0 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( td >= Approx(td) )
with expansion:
  StrongDoubleTypedef(10) >= Approx( 10.0 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( Approx(td) >= td )
with expansion:
  Approx( 10.0 ) >= StrongDoubleTypedef(10)

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( Approx(11.0) >= td )
with expansion:
  Approx( 11.0 ) >= StrongDoubleTypedef(10)

-------------------------------------------------------------------------------
Comparisons between ints where one side is computed
-------------------------------------------------------------------------------
Condition.tests.cpp:<line number>
...............................................................................

Condition.tests.cpp:<line number>:
PASSED:
  CHECK( 54 == 6*9 )
with expansion:
  54 == 54

-------------------------------------------------------------------------------
Comparisons between unsigned ints and negative signed ints match c++ standard
behaviour
-------------------------------------------------------------------------------
Condition.tests.cpp:<line number>
...............................................................................

Condition.tests.cpp:<line number>:
PASSED:
  CHECK( ( -1 > 2u ) )
with expansion:
  true

Condition.tests.cpp:<line number>:
PASSED:
  CHECK( -1 > 2u )
with expansion:
  -1 > 2

Condition.tests.cpp:<line number>:
PASSED:
  CHECK( ( 2u < -1 ) )
with expansion:
  true

Condition.tests.cpp:<line number>:
PASSED:
  CHECK( 2u < -1 )
with expansion:
  2 < -1

Condition.tests.cpp:<line number>:
PASSED:
  CHECK( ( minInt > 2u ) )
with expansion:
  true

Condition.tests.cpp:<line number>:
PASSED:
  CHECK( minInt > 2u )
with expansion:
  -2147483648 > 2

-------------------------------------------------------------------------------
Comparisons with int literals don't warn when mixing signed/ unsigned
-------------------------------------------------------------------------------
Condition.tests.cpp:<line number>
...............................................................................

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( i == 1 )
with expansion:
  1 == 1

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( ui == 2 )
with expansion:
  2 == 2

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( l == 3 )
with expansion:
  3 == 3

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( ul == 4 )
with expansion:
  4 == 4

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( c == 5 )
with expansion:
  5 == 5

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( uc == 6 )
with expansion:
  6 == 6

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( 1 == i )
with expansion:
  1 == 1

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( 2 == ui )
with expansion:
  2 == 2

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( 3 == l )
with expansion:
  3 == 3

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( 4 == ul )
with expansion:
  4 == 4

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( 5 == c )
with expansion:
  5 == 5

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( 6 == uc )
with expansion:
  6 == 6

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( (std::numeric_limits<uint32_t>::max)() > ul )
with expansion:
  4294967295 (0x<hex digits>) > 4

-------------------------------------------------------------------------------
Contains string matcher
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>: 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:<line number>: 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:<line number>
...............................................................................

Exception.tests.cpp:<line number>: 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:<line number>
...............................................................................

Exception.tests.cpp:<line number>: 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:<line number>
...............................................................................

Exception.tests.cpp:<line number>: FAILED:
due to unexpected exception with message:
  custom std exception

-------------------------------------------------------------------------------
Default scale is invisible to comparison
-------------------------------------------------------------------------------
Approx.tests.cpp:<line number>
...............................................................................

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( 101.000001 != Approx(100).epsilon(0.01) )
with expansion:
  101.000001 != Approx( 100.0 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( std::pow(10, -5) != Approx(std::pow(10, -7)) )
with expansion:
  0.00001 != Approx( 0.0000001 )

-------------------------------------------------------------------------------
EndsWith string matcher
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>: FAILED:
  CHECK_THAT( testStringForMatching(), EndsWith("Substring") )
with expansion:
  "this string contains 'abc' as a substring" ends with: "Substring"

Matchers.tests.cpp:<line number>: 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:<line number>
...............................................................................

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( 101.01 != Approx(100).epsilon(0.01) )
with expansion:
  101.01 != Approx( 100.0 )

-------------------------------------------------------------------------------
Equality checks that should fail
-------------------------------------------------------------------------------
Condition.tests.cpp:<line number>
...............................................................................

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.int_seven == 6 )
with expansion:
  7 == 6

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.int_seven == 8 )
with expansion:
  7 == 8

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.int_seven == 0 )
with expansion:
  7 == 0

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.float_nine_point_one == Approx( 9.11f ) )
with expansion:
  9.1f == Approx( 9.1099996567 )

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.float_nine_point_one == Approx( 9.0f ) )
with expansion:
  9.1f == Approx( 9.0 )

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.float_nine_point_one == Approx( 1 ) )
with expansion:
  9.1f == Approx( 1.0 )

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.float_nine_point_one == Approx( 0 ) )
with expansion:
  9.1f == Approx( 0.0 )

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.double_pi == Approx( 3.1415 ) )
with expansion:
  3.1415926535 == Approx( 3.1415 )

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.str_hello == "goodbye" )
with expansion:
  "hello" == "goodbye"

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.str_hello == "hell" )
with expansion:
  "hello" == "hell"

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.str_hello == "hello1" )
with expansion:
  "hello" == "hello1"

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.str_hello.size() == 6 )
with expansion:
  5 == 6

Condition.tests.cpp:<line number>: FAILED:
  CHECK( x == Approx( 1.301 ) )
with expansion:
  1.3 == Approx( 1.301 )

-------------------------------------------------------------------------------
Equality checks that should succeed
-------------------------------------------------------------------------------
Condition.tests.cpp:<line number>
...............................................................................

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.int_seven == 7 )
with expansion:
  7 == 7

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.float_nine_point_one == Approx( 9.1f ) )
with expansion:
  9.1f == Approx( 9.1000003815 )

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.double_pi == Approx( 3.1415926535 ) )
with expansion:
  3.1415926535 == Approx( 3.1415926535 )

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.str_hello == "hello" )
with expansion:
  "hello" == "hello"

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( "hello" == data.str_hello )
with expansion:
  "hello" == "hello"

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.str_hello.size() == 5 )
with expansion:
  5 == 5

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( x == Approx( 1.3 ) )
with expansion:
  1.3 == Approx( 1.3 )

-------------------------------------------------------------------------------
Equals
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
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:<line number>:
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:<line number>
...............................................................................

Matchers.tests.cpp:<line number>: 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:<line number>: 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:<line number>
...............................................................................

Matchers.tests.cpp:<line number>: FAILED:
  CHECK_THROWS_MATCHES( doesNotThrow(), SpecialException, ExceptionMatcher{1} )
because no exception was thrown where one was expected:

Matchers.tests.cpp:<line number>: 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:<line number>
...............................................................................

Matchers.tests.cpp:<line number>: FAILED:
  CHECK_THROWS_MATCHES( throwsAsInt(1), SpecialException, ExceptionMatcher{1} )
due to unexpected exception with message:
  Unknown exception

Matchers.tests.cpp:<line number>: 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:<line number>
...............................................................................

Matchers.tests.cpp:<line number>: FAILED:
  CHECK_THROWS_MATCHES( throws(3), SpecialException, ExceptionMatcher{1} )
with expansion:
  {?} special exception has value of 1

Matchers.tests.cpp:<line number>: FAILED:
  REQUIRE_THROWS_MATCHES( throws(4), SpecialException, ExceptionMatcher{1} )
with expansion:
  {?} special exception has value of 1

-------------------------------------------------------------------------------
Exception matchers that succeed
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
PASSED:
  CHECK_THROWS_MATCHES( throws(1), SpecialException, ExceptionMatcher{1} )
with expansion:
  {?} special exception has value of 1

Matchers.tests.cpp:<line number>:
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:<line number>
...............................................................................

Exception.tests.cpp:<line number>:
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:<line number>
...............................................................................

Exception.tests.cpp:<line number>:
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:<line number>
...............................................................................

Exception.tests.cpp:<line number>:
PASSED:
  REQUIRE_THROWS_WITH( thisThrows(), StartsWith( "expected" ) )
with expansion:
  "expected exception" starts with: "expected"

Exception.tests.cpp:<line number>:
PASSED:
  REQUIRE_THROWS_WITH( thisThrows(), EndsWith( "exception" ) )
with expansion:
  "expected exception" ends with: "exception"

Exception.tests.cpp:<line number>:
PASSED:
  REQUIRE_THROWS_WITH( thisThrows(), Contains( "except" ) )
with expansion:
  "expected exception" contains: "except"

Exception.tests.cpp:<line number>:
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:<line number>
...............................................................................

Exception.tests.cpp:<line number>: FAILED:
  CHECK_THROWS_AS( thisThrows(), std::string )
due to unexpected exception with message:
  expected exception

Exception.tests.cpp:<line number>: FAILED:
  CHECK_THROWS_AS( thisDoesntThrow(), std::domain_error )
because no exception was thrown where one was expected:

Exception.tests.cpp:<line number>: FAILED:
  CHECK_NOTHROW( thisThrows() )
due to unexpected exception with message:
  expected exception

-------------------------------------------------------------------------------
FAIL aborts the test
-------------------------------------------------------------------------------
Message.tests.cpp:<line number>
...............................................................................

Message.tests.cpp:<line number>: FAILED:
explicitly with message:
  This is a failure

-------------------------------------------------------------------------------
FAIL does not require an argument
-------------------------------------------------------------------------------
Message.tests.cpp:<line number>
...............................................................................

Message.tests.cpp:<line number>: FAILED:

-------------------------------------------------------------------------------
FAIL_CHECK does not abort the test
-------------------------------------------------------------------------------
Message.tests.cpp:<line number>
...............................................................................

Message.tests.cpp:<line number>: FAILED:
explicitly with message:
  This is a failure

Message.tests.cpp:<line number>:
warning:
  This message appears in the output

-------------------------------------------------------------------------------
Factorials are computed
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( Factorial(0) == 1 )
with expansion:
  1 == 1

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( Factorial(1) == 1 )
with expansion:
  1 == 1

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( Factorial(2) == 2 )
with expansion:
  2 == 2

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( Factorial(3) == 6 )
with expansion:
  6 == 6

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( Factorial(10) == 3628800 )
with expansion:
  3628800 (0x<hex digits>) == 3628800 (0x<hex digits>)

-------------------------------------------------------------------------------
Floating point matchers: double
  Margin
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
PASSED:
  REQUIRE_THAT( 1., WithinAbs(1., 0) )
with expansion:
  1.0 is within 0.0 of 1.0

Matchers.tests.cpp:<line number>:
PASSED:
  REQUIRE_THAT( 0., WithinAbs(1., 1) )
with expansion:
  0.0 is within 1.0 of 1.0

Matchers.tests.cpp:<line number>:
PASSED:
  REQUIRE_THAT( 0., !WithinAbs(1., 0.99) )
with expansion:
  0.0 not is within 0.99 of 1.0

Matchers.tests.cpp:<line number>:
PASSED:
  REQUIRE_THAT( 0., !WithinAbs(1., 0.99) )
with expansion:
  0.0 not is within 0.99 of 1.0

Matchers.tests.cpp:<line number>:
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:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
PASSED:
  REQUIRE_THAT( 1., WithinULP(1., 0) )
with expansion:
  1.0 is within 0 ULPs of 1.0

Matchers.tests.cpp:<line number>:
PASSED:
  REQUIRE_THAT( std::nextafter(1., 2.), WithinULP(1., 1) )
with expansion:
  1.0 is within 1 ULPs of 1.0

Matchers.tests.cpp:<line number>:
PASSED:
  REQUIRE_THAT( std::nextafter(1., 0.), WithinULP(1., 1) )
with expansion:
  1.0 is within 1 ULPs of 1.0

Matchers.tests.cpp:<line number>:
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:<line number>:
PASSED:
  REQUIRE_THAT( 1., WithinULP(1., 0) )
with expansion:
  1.0 is within 0 ULPs of 1.0

Matchers.tests.cpp:<line number>:
PASSED:
  REQUIRE_THAT( -0., WithinULP(0., 0) )
with expansion:
  -0.0 is within 0 ULPs of 0.0

Matchers.tests.cpp:<line number>:
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:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
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:<line number>:
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:<line number>:
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
  Margin
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
PASSED:
  REQUIRE_THAT( 1.f, WithinAbs(1.f, 0) )
with expansion:
  1.0f is within 0.0 of 1.0

Matchers.tests.cpp:<line number>:
PASSED:
  REQUIRE_THAT( 0.f, WithinAbs(1.f, 1) )
with expansion:
  0.0f is within 1.0 of 1.0

Matchers.tests.cpp:<line number>:
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:<line number>:
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:<line number>:
PASSED:
  REQUIRE_THAT( 0.f, WithinAbs(-0.f, 0) )
with expansion:
  0.0f is within 0.0 of -0.0

Matchers.tests.cpp:<line number>:
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:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
PASSED:
  REQUIRE_THAT( 1.f, WithinULP(1.f, 0) )
with expansion:
  1.0f is within 0 ULPs of 1.0f

Matchers.tests.cpp:<line number>:
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:<line number>:
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:<line number>:
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:<line number>:
PASSED:
  REQUIRE_THAT( 1.f, WithinULP(1.f, 0) )
with expansion:
  1.0f is within 0 ULPs of 1.0f

Matchers.tests.cpp:<line number>:
PASSED:
  REQUIRE_THAT( -0.f, WithinULP(0.f, 0) )
with expansion:
  -0.0f is within 0 ULPs of 0.0f

Matchers.tests.cpp:<line number>:
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:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
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:<line number>:
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:<line number>:
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 )

-------------------------------------------------------------------------------
Greater-than inequalities with different epsilons
-------------------------------------------------------------------------------
Approx.tests.cpp:<line number>
...............................................................................

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( d >= Approx( 1.22 ) )
with expansion:
  1.23 >= Approx( 1.22 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( d >= Approx( 1.23 ) )
with expansion:
  1.23 >= Approx( 1.23 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE_FALSE( d >= Approx( 1.24 ) )
with expansion:
  !(1.23 >= Approx( 1.24 ))

Approx.tests.cpp:<line number>:
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:<line number>
...............................................................................

Message.tests.cpp:<line number>:
warning:
  this is a message
  this is a warning

-------------------------------------------------------------------------------
INFO gets logged on failure
-------------------------------------------------------------------------------
Message.tests.cpp:<line number>
...............................................................................

Message.tests.cpp:<line number>: 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:<line number>
...............................................................................

Message.tests.cpp:<line number>:
PASSED:
  CHECK( a == 2 )
with expansion:
  2 == 2
with message:
  this message may be logged later

Message.tests.cpp:<line number>: FAILED:
  CHECK( a == 1 )
with expansion:
  2 == 1
with messages:
  this message may be logged later
  this message should be logged

Message.tests.cpp:<line number>: 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:<line number>:
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:<line number>
...............................................................................

Message.tests.cpp:<line number>:
PASSED:
  REQUIRE( i < 10 )
with expansion:
  0 < 10
with messages:
  current counter 0
  i := 0

Message.tests.cpp:<line number>:
PASSED:
  REQUIRE( i < 10 )
with expansion:
  1 < 10
with messages:
  current counter 1
  i := 1

Message.tests.cpp:<line number>:
PASSED:
  REQUIRE( i < 10 )
with expansion:
  2 < 10
with messages:
  current counter 2
  i := 2

Message.tests.cpp:<line number>:
PASSED:
  REQUIRE( i < 10 )
with expansion:
  3 < 10
with messages:
  current counter 3
  i := 3

Message.tests.cpp:<line number>:
PASSED:
  REQUIRE( i < 10 )
with expansion:
  4 < 10
with messages:
  current counter 4
  i := 4

Message.tests.cpp:<line number>:
PASSED:
  REQUIRE( i < 10 )
with expansion:
  5 < 10
with messages:
  current counter 5
  i := 5

Message.tests.cpp:<line number>:
PASSED:
  REQUIRE( i < 10 )
with expansion:
  6 < 10
with messages:
  current counter 6
  i := 6

Message.tests.cpp:<line number>:
PASSED:
  REQUIRE( i < 10 )
with expansion:
  7 < 10
with messages:
  current counter 7
  i := 7

Message.tests.cpp:<line number>:
PASSED:
  REQUIRE( i < 10 )
with expansion:
  8 < 10
with messages:
  current counter 8
  i := 8

Message.tests.cpp:<line number>:
PASSED:
  REQUIRE( i < 10 )
with expansion:
  9 < 10
with messages:
  current counter 9
  i := 9

Message.tests.cpp:<line number>: FAILED:
  REQUIRE( i < 10 )
with expansion:
  10 < 10
with messages:
  current counter 10
  i := 10

-------------------------------------------------------------------------------
Inequality checks that should fail
-------------------------------------------------------------------------------
Condition.tests.cpp:<line number>
...............................................................................

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.int_seven != 7 )
with expansion:
  7 != 7

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.float_nine_point_one != Approx( 9.1f ) )
with expansion:
  9.1f != Approx( 9.1000003815 )

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.double_pi != Approx( 3.1415926535 ) )
with expansion:
  3.1415926535 != Approx( 3.1415926535 )

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.str_hello != "hello" )
with expansion:
  "hello" != "hello"

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.str_hello.size() != 5 )
with expansion:
  5 != 5

-------------------------------------------------------------------------------
Inequality checks that should succeed
-------------------------------------------------------------------------------
Condition.tests.cpp:<line number>
...............................................................................

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.int_seven != 6 )
with expansion:
  7 != 6

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.int_seven != 8 )
with expansion:
  7 != 8

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.float_nine_point_one != Approx( 9.11f ) )
with expansion:
  9.1f != Approx( 9.1099996567 )

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.float_nine_point_one != Approx( 9.0f ) )
with expansion:
  9.1f != Approx( 9.0 )

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.float_nine_point_one != Approx( 1 ) )
with expansion:
  9.1f != Approx( 1.0 )

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.float_nine_point_one != Approx( 0 ) )
with expansion:
  9.1f != Approx( 0.0 )

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.double_pi != Approx( 3.1415 ) )
with expansion:
  3.1415926535 != Approx( 3.1415 )

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.str_hello != "goodbye" )
with expansion:
  "hello" != "goodbye"

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.str_hello != "hell" )
with expansion:
  "hello" != "hell"

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.str_hello != "hello1" )
with expansion:
  "hello" != "hello1"

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.str_hello.size() != 6 )
with expansion:
  5 != 6

-------------------------------------------------------------------------------
Less-than inequalities with different epsilons
-------------------------------------------------------------------------------
Approx.tests.cpp:<line number>
...............................................................................

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( d <= Approx( 1.24 ) )
with expansion:
  1.23 <= Approx( 1.24 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( d <= Approx( 1.23 ) )
with expansion:
  1.23 <= Approx( 1.23 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE_FALSE( d <= Approx( 1.22 ) )
with expansion:
  !(1.23 <= Approx( 1.22 ))

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( d <= Approx( 1.22 ).epsilon(0.1) )
with expansion:
  1.23 <= Approx( 1.22 )

-------------------------------------------------------------------------------
ManuallyRegistered
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
with message:
  was called

-------------------------------------------------------------------------------
Matchers can be (AllOf) composed with the && operator
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
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:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
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:<line number>:
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:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
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:<line number>
...............................................................................

Matchers.tests.cpp:<line number>: 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:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
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:<line number>
...............................................................................

Matchers.tests.cpp:<line number>: 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:<line number>
...............................................................................

Exception.tests.cpp:<line number>:
PASSED:
  REQUIRE_THROWS_WITH( thisThrows(), "expected exception" )
with expansion:
  "expected exception" equals: "expected exception"

Exception.tests.cpp:<line number>: FAILED:
  REQUIRE_THROWS_WITH( thisThrows(), "should fail" )
with expansion:
  "expected exception" equals: "should fail"

-------------------------------------------------------------------------------
Nice descriptive name
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
warning:
  This one ran

-------------------------------------------------------------------------------
Non-std exceptions can be translated
-------------------------------------------------------------------------------
Exception.tests.cpp:<line number>
...............................................................................

Exception.tests.cpp:<line number>: FAILED:
due to unexpected exception with message:
  custom exception

-------------------------------------------------------------------------------
Objects that evaluated in boolean contexts can be checked
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  CHECK( True )
with expansion:
  {?}

Tricky.tests.cpp:<line number>:
PASSED:
  CHECK( !False )
with expansion:
  true

Tricky.tests.cpp:<line number>:
PASSED:
  CHECK_FALSE( False )
with expansion:
  !{?}

-------------------------------------------------------------------------------
Ordering comparison checks that should fail
-------------------------------------------------------------------------------
Condition.tests.cpp:<line number>
...............................................................................

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.int_seven > 7 )
with expansion:
  7 > 7

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.int_seven < 7 )
with expansion:
  7 < 7

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.int_seven > 8 )
with expansion:
  7 > 8

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.int_seven < 6 )
with expansion:
  7 < 6

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.int_seven < 0 )
with expansion:
  7 < 0

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.int_seven < -1 )
with expansion:
  7 < -1

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.int_seven >= 8 )
with expansion:
  7 >= 8

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.int_seven <= 6 )
with expansion:
  7 <= 6

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.float_nine_point_one < 9 )
with expansion:
  9.1f < 9

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.float_nine_point_one > 10 )
with expansion:
  9.1f > 10

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.float_nine_point_one > 9.2 )
with expansion:
  9.1f > 9.2

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.str_hello > "hello" )
with expansion:
  "hello" > "hello"

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.str_hello < "hello" )
with expansion:
  "hello" < "hello"

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.str_hello > "hellp" )
with expansion:
  "hello" > "hellp"

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.str_hello > "z" )
with expansion:
  "hello" > "z"

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.str_hello < "hellm" )
with expansion:
  "hello" < "hellm"

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.str_hello < "a" )
with expansion:
  "hello" < "a"

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.str_hello >= "z" )
with expansion:
  "hello" >= "z"

Condition.tests.cpp:<line number>: FAILED:
  CHECK( data.str_hello <= "a" )
with expansion:
  "hello" <= "a"

-------------------------------------------------------------------------------
Ordering comparison checks that should succeed
-------------------------------------------------------------------------------
Condition.tests.cpp:<line number>
...............................................................................

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.int_seven < 8 )
with expansion:
  7 < 8

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.int_seven > 6 )
with expansion:
  7 > 6

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.int_seven > 0 )
with expansion:
  7 > 0

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.int_seven > -1 )
with expansion:
  7 > -1

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.int_seven >= 7 )
with expansion:
  7 >= 7

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.int_seven >= 6 )
with expansion:
  7 >= 6

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.int_seven <= 7 )
with expansion:
  7 <= 7

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.int_seven <= 8 )
with expansion:
  7 <= 8

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.float_nine_point_one > 9 )
with expansion:
  9.1f > 9

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.float_nine_point_one < 10 )
with expansion:
  9.1f < 10

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.float_nine_point_one < 9.2 )
with expansion:
  9.1f < 9.2

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.str_hello <= "hello" )
with expansion:
  "hello" <= "hello"

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.str_hello >= "hello" )
with expansion:
  "hello" >= "hello"

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.str_hello < "hellp" )
with expansion:
  "hello" < "hellp"

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.str_hello < "zebra" )
with expansion:
  "hello" < "zebra"

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.str_hello > "hellm" )
with expansion:
  "hello" > "hellm"

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( data.str_hello > "a" )
with expansion:
  "hello" > "a"

-------------------------------------------------------------------------------
Output from all sections is reported
  one
-------------------------------------------------------------------------------
Message.tests.cpp:<line number>
...............................................................................

Message.tests.cpp:<line number>: FAILED:
explicitly with message:
  Message from section one

-------------------------------------------------------------------------------
Output from all sections is reported
  two
-------------------------------------------------------------------------------
Message.tests.cpp:<line number>
...............................................................................

Message.tests.cpp:<line number>: FAILED:
explicitly with message:
  Message from section two

-------------------------------------------------------------------------------
Parse test names and tags
  Empty test spec should have no filters
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches(tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == false )
with expansion:
  false == false

-------------------------------------------------------------------------------
Parse test names and tags
  Wildcard at the start
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcD ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( parseTestSpec( "*a" ).matches( tcA ) == true )
with expansion:
  true == true

-------------------------------------------------------------------------------
Parse test names and tags
  Wildcard at the end
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcD ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( parseTestSpec( "a*" ).matches( tcA ) == true )
with expansion:
  true == true

-------------------------------------------------------------------------------
Parse test names and tags
  Wildcard at both ends
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcD ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( parseTestSpec( "*a*" ).matches( tcA ) == true )
with expansion:
  true == true

-------------------------------------------------------------------------------
Parse test names and tags
  Redundant wildcard at the start
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

-------------------------------------------------------------------------------
Parse test names and tags
  Redundant wildcard at the end
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

-------------------------------------------------------------------------------
Parse test names and tags
  Redundant wildcard at both ends
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcD ) == true )
with expansion:
  true == true

-------------------------------------------------------------------------------
Parse test names and tags
  Just wildcard
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcD ) == true )
with expansion:
  true == true

-------------------------------------------------------------------------------
Parse test names and tags
  Single tag
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == false )
with expansion:
  false == false

-------------------------------------------------------------------------------
Parse test names and tags
  Single tag, two matches
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == true )
with expansion:
  true == true

-------------------------------------------------------------------------------
Parse test names and tags
  Two tags
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == true )
with expansion:
  true == true

-------------------------------------------------------------------------------
Parse test names and tags
  Two tags, spare separated
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == true )
with expansion:
  true == true

-------------------------------------------------------------------------------
Parse test names and tags
  Wildcarded name and tag
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcD ) == false )
with expansion:
  false == false

-------------------------------------------------------------------------------
Parse test names and tags
  Single tag exclusion
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcD ) == true )
with expansion:
  true == true

-------------------------------------------------------------------------------
Parse test names and tags
  name exclusion
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcD ) == true )
with expansion:
  true == true

-------------------------------------------------------------------------------
Parse test names and tags
  wildcarded name exclusion
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcD ) == false )
with expansion:
  false == false

-------------------------------------------------------------------------------
Parse test names and tags
  wildcarded name exclusion with tag inclusion
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcD ) == false )
with expansion:
  false == false

-------------------------------------------------------------------------------
Parse test names and tags
  two wildcarded names
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcD ) == false )
with expansion:
  false == false

-------------------------------------------------------------------------------
Parse test names and tags
  empty tag
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcD ) == false )
with expansion:
  false == false

-------------------------------------------------------------------------------
Parse test names and tags
  empty quoted name
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcD ) == false )
with expansion:
  false == false

-------------------------------------------------------------------------------
Parse test names and tags
  quoted string followed by tag exclusion
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.hasFilters() == true )
with expansion:
  true == true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcA ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcB ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcC ) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( spec.matches( tcD ) == true )
with expansion:
  true == true

-------------------------------------------------------------------------------
Parsing a std::pair
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( (std::pair<int, int>( 1, 2 )) == aNicePair )
with expansion:
  {?} == {?}

-------------------------------------------------------------------------------
Pointers can be compared to null
-------------------------------------------------------------------------------
Condition.tests.cpp:<line number>
...............................................................................

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( p == 0 )
with expansion:
  0 == 0

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( p == pNULL )
with expansion:
  0 == 0

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( p != 0 )
with expansion:
  0x<hex digits> != 0

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( cp != 0 )
with expansion:
  0x<hex digits> != 0

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( cpc != 0 )
with expansion:
  0x<hex digits> != 0

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( returnsNull() == 0 )
with expansion:
  {null string} == 0

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( returnsConstNull() == 0 )
with expansion:
  {null string} == 0

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( 0 != p )
with expansion:
  0 != 0x<hex digits>

-------------------------------------------------------------------------------
Process can be configured on command line
  empty args don't cause a crash
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( result )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( config.processName == "" )
with expansion:
  "" == ""

-------------------------------------------------------------------------------
Process can be configured on command line
  default - no arguments
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( result )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( config.processName == "test" )
with expansion:
  "test" == "test"

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( config.shouldDebugBreak == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( config.abortAfter == -1 )
with expansion:
  -1 == -1

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( config.noThrow == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( config.reporterNames.empty() )
with expansion:
  true

-------------------------------------------------------------------------------
Process can be configured on command line
  test lists
  1 test
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( result )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( cfg.testSpec().matches(fakeTestCase("notIncluded")) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( result )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( cfg.testSpec().matches(fakeTestCase("test1")) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( result )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( cfg.testSpec().matches(fakeTestCase("test1")) == false )
with expansion:
  false == false

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( cfg.testSpec().matches(fakeTestCase("alwaysIncluded")) )
with expansion:
  true

-------------------------------------------------------------------------------
Process can be configured on command line
  reporter
  -r/console
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test", "-r", "console"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( config.reporterNames[0] == "console" )
with expansion:
  "console" == "console"

-------------------------------------------------------------------------------
Process can be configured on command line
  reporter
  -r/xml
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test", "-r", "xml"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test", "-r", "xml", "-r", "junit"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( config.reporterNames.size() == 2 )
with expansion:
  2 == 2

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( config.reporterNames[0] == "xml" )
with expansion:
  "xml" == "xml"

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( config.reporterNames[1] == "junit" )
with expansion:
  "junit" == "junit"

-------------------------------------------------------------------------------
Process can be configured on command line
  reporter
  --reporter/junit
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test", "--reporter", "junit"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( config.reporterNames[0] == "junit" )
with expansion:
  "junit" == "junit"

-------------------------------------------------------------------------------
Process can be configured on command line
  debugger
  -b
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test", "-b"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( config.shouldDebugBreak == true )
with expansion:
  true == true

-------------------------------------------------------------------------------
Process can be configured on command line
  debugger
  --break
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test", "--break"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( config.shouldDebugBreak )
with expansion:
  true

-------------------------------------------------------------------------------
Process can be configured on command line
  abort
  -a aborts after first failure
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test", "-a"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test", "-x", "2"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( config.abortAfter == 2 )
with expansion:
  2 == 2

-------------------------------------------------------------------------------
Process can be configured on command line
  abort
  -x must be numeric
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( !result )
with expansion:
  true

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test", "-e"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( config.noThrow )
with expansion:
  true

-------------------------------------------------------------------------------
Process can be configured on command line
  nothrow
  --nothrow
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test", "--nothrow"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( config.noThrow )
with expansion:
  true

-------------------------------------------------------------------------------
Process can be configured on command line
  output filename
  -o filename
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test", "-o", "filename.ext"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test", "--out", "filename.ext"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test", "-abe"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( config.abortAfter == 1 )
with expansion:
  1 == 1

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( config.shouldDebugBreak )
with expansion:
  true

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( config.noThrow == true )
with expansion:
  true == true

-------------------------------------------------------------------------------
Process can be configured on command line
  use-colour
  without option
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( config.useColour == UseColour::Auto )
with expansion:
  0 == 0

-------------------------------------------------------------------------------
Process can be configured on command line
  use-colour
  auto
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test", "--use-colour", "auto"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( config.useColour == UseColour::Auto )
with expansion:
  0 == 0

-------------------------------------------------------------------------------
Process can be configured on command line
  use-colour
  yes
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test", "--use-colour", "yes"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( config.useColour == UseColour::Yes )
with expansion:
  1 == 1

-------------------------------------------------------------------------------
Process can be configured on command line
  use-colour
  no
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( cli.parse({"test", "--use-colour", "no"}) )
with expansion:
  {?}

CmdLine.tests.cpp:<line number>:
PASSED:
  REQUIRE( config.useColour == UseColour::No )
with expansion:
  2 == 2

-------------------------------------------------------------------------------
Process can be configured on command line
  use-colour
  error
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
...............................................................................

CmdLine.tests.cpp:<line number>:
PASSED:
  CHECK( !result )
with expansion:
  true

CmdLine.tests.cpp:<line number>:
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:<line number>
...............................................................................

Decomposition.tests.cpp:<line number>: FAILED:
  CHECK( truthy(false) )
with expansion:
  Hey, its truthy!

-------------------------------------------------------------------------------
Regex string matcher
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>: 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:<line number>: 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:<line number>: 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:<line number>
...............................................................................

Message.tests.cpp:<line number>:
PASSED:
with message:
  this is a success

-------------------------------------------------------------------------------
SUCCESS does not require an argument
-------------------------------------------------------------------------------
Message.tests.cpp:<line number>
...............................................................................

Message.tests.cpp:<line number>:
PASSED:

-------------------------------------------------------------------------------
Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or
          methods
     Given: No operations precede me
-------------------------------------------------------------------------------
BDD.tests.cpp:<line number>
...............................................................................

BDD.tests.cpp:<line number>:
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:<line number>
...............................................................................

BDD.tests.cpp:<line number>:
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:<line number>
...............................................................................

BDD.tests.cpp:<line number>:
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:<line number>
...............................................................................

BDD.tests.cpp:<line number>:
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:<line number>
...............................................................................

BDD.tests.cpp:<line number>:
PASSED:
with message:
  boo!

-------------------------------------------------------------------------------
Scenario: Vector resizing affects size and capacity
     Given: an empty vector
-------------------------------------------------------------------------------
BDD.tests.cpp:<line number>
...............................................................................

BDD.tests.cpp:<line number>:
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:<line number>
...............................................................................

BDD.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.size() == 10 )
with expansion:
  10 == 10

BDD.tests.cpp:<line number>:
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:<line number>
...............................................................................

BDD.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.size() == 5 )
with expansion:
  5 == 5

BDD.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.capacity() >= 10 )
with expansion:
  10 >= 10

-------------------------------------------------------------------------------
Scenario: Vector resizing affects size and capacity
     Given: an empty vector
-------------------------------------------------------------------------------
BDD.tests.cpp:<line number>
...............................................................................

BDD.tests.cpp:<line number>:
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:<line number>
...............................................................................

BDD.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.capacity() >= 10 )
with expansion:
  10 >= 10

BDD.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.size() == 0 )
with expansion:
  0 == 0

A string sent directly to stdout
A string sent directly to stderr
-------------------------------------------------------------------------------
Some simple comparisons between doubles
-------------------------------------------------------------------------------
Approx.tests.cpp:<line number>
...............................................................................

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( d == Approx( 1.23 ) )
with expansion:
  1.23 == Approx( 1.23 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( d != Approx( 1.22 ) )
with expansion:
  1.23 != Approx( 1.22 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( d != Approx( 1.24 ) )
with expansion:
  1.23 != Approx( 1.24 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( Approx( d ) == 1.23 )
with expansion:
  Approx( 1.23 ) == 1.23

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( Approx( d ) != 1.22 )
with expansion:
  Approx( 1.23 ) != 1.22

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( Approx( d ) != 1.24 )
with expansion:
  Approx( 1.23 ) != 1.24

Approx.tests.cpp:<line number>:
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:<line number>
...............................................................................


No assertions in section 'one'

Message from section two
-------------------------------------------------------------------------------
Standard output from all sections is reported
  two
-------------------------------------------------------------------------------
Message.tests.cpp:<line number>
...............................................................................


No assertions in section 'two'

-------------------------------------------------------------------------------
StartsWith string matcher
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>: FAILED:
  CHECK_THAT( testStringForMatching(), StartsWith("This String") )
with expansion:
  "this string contains 'abc' as a substring" starts with: "This String"

Matchers.tests.cpp:<line number>: FAILED:
  CHECK_THAT( testStringForMatching(), StartsWith("string", Catch::CaseSensitive::No) )
with expansion:
  "this string contains 'abc' as a substring" starts with: "string" (case
  insensitive)

-------------------------------------------------------------------------------
String matchers
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
PASSED:
  REQUIRE_THAT( testStringForMatching(), Contains("string") )
with expansion:
  "this string contains 'abc' as a substring" contains: "string"

Matchers.tests.cpp:<line number>:
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:<line number>:
PASSED:
  CHECK_THAT( testStringForMatching(), Contains("abc") )
with expansion:
  "this string contains 'abc' as a substring" contains: "abc"

Matchers.tests.cpp:<line number>:
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:<line number>:
PASSED:
  CHECK_THAT( testStringForMatching(), StartsWith("this") )
with expansion:
  "this string contains 'abc' as a substring" starts with: "this"

Matchers.tests.cpp:<line number>:
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:<line number>:
PASSED:
  CHECK_THAT( testStringForMatching(), EndsWith("substring") )
with expansion:
  "this string contains 'abc' as a substring" ends with: "substring"

Matchers.tests.cpp:<line number>:
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:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( empty.empty() )
with expansion:
  true

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( empty.size() == 0 )
with expansion:
  0 == 0

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( std::strcmp( empty.c_str(), "" ) == 0 )
with expansion:
  0 == 0

-------------------------------------------------------------------------------
StringRef
  From string literal
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( s.empty() == false )
with expansion:
  false == false

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( s.size() == 5 )
with expansion:
  5 == 5

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( isSubstring( s ) == false )
with expansion:
  false == false

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( std::strcmp( rawChars, "hello" ) == 0 )
with expansion:
  0 == 0

-------------------------------------------------------------------------------
StringRef
  From string literal
  c_str() does not cause copy
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( isOwned( s ) == false )
with expansion:
  false == false

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( s.c_str() == rawChars )
with expansion:
  "hello" == "hello"

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( isOwned( s ) == false )
with expansion:
  false == false

-------------------------------------------------------------------------------
StringRef
  From sub-string
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( original == "original" )

String.tests.cpp:<line number>: FAILED:
  REQUIRE( isSubstring( original ) )
with expansion:
  false

-------------------------------------------------------------------------------
StringRef
  Substrings
  zero-based substring
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( ss.empty() == false )
with expansion:
  false == false

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( ss.size() == 5 )
with expansion:
  5 == 5

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( std::strcmp( ss.c_str(), "hello" ) == 0 )
with expansion:
  0 == 0

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( ss == "hello" )
with expansion:
  hello == "hello"

-------------------------------------------------------------------------------
StringRef
  Substrings
  c_str() causes copy
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( isSubstring( ss ) )
with expansion:
  true

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( isOwned( ss ) == false )
with expansion:
  false == false

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( rawChars == data( s ) )
with expansion:
  "hello world!" == "hello world!"

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( ss.c_str() != rawChars )
with expansion:
  "hello" != "hello world!"

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( isSubstring( ss ) == false )
with expansion:
  false == false

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( isOwned( ss ) )
with expansion:
  true

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( data( ss ) != data( s ) )
with expansion:
  "hello" != "hello world!"

-------------------------------------------------------------------------------
StringRef
  Substrings
  non-zero-based substring
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( ss.size() == 6 )
with expansion:
  6 == 6

String.tests.cpp:<line number>:
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:<line number>
...............................................................................

String.tests.cpp:<line number>:
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:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( s.c_str() != ss.c_str() )
with expansion:
  "hello world!" != "hello"

-------------------------------------------------------------------------------
StringRef
  Comparisons
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( StringRef("hello") == StringRef("hello") )
with expansion:
  hello == hello

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( StringRef("hello") != StringRef("cello") )
with expansion:
  hello != cello

-------------------------------------------------------------------------------
StringRef
  from std::string
  implicitly constructed
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( sr == "a standard string" )
with expansion:
  a standard string == "a standard string"

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( sr.size() == stdStr.size() )
with expansion:
  17 == 17

-------------------------------------------------------------------------------
StringRef
  from std::string
  explicitly constructed
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( sr == "a standard string" )
with expansion:
  a standard string == "a standard string"

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( sr.size() == stdStr.size() )
with expansion:
  17 == 17

-------------------------------------------------------------------------------
StringRef
  from std::string
  assigned
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( sr == "a standard string" )
with expansion:
  a standard string == "a standard string"

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( sr.size() == stdStr.size() )
with expansion:
  17 == 17

-------------------------------------------------------------------------------
StringRef
  to std::string
  implicitly constructed
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( stdStr == "a stringref" )
with expansion:
  "a stringref" == "a stringref"

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( stdStr.size() == sr.size() )
with expansion:
  11 == 11

-------------------------------------------------------------------------------
StringRef
  to std::string
  explicitly constructed
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( stdStr == "a stringref" )
with expansion:
  "a stringref" == "a stringref"

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( stdStr.size() == sr.size() )
with expansion:
  11 == 11

-------------------------------------------------------------------------------
StringRef
  to std::string
  assigned
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( stdStr == "a stringref" )
with expansion:
  "a stringref" == "a stringref"

String.tests.cpp:<line number>:
PASSED:
  REQUIRE( stdStr.size() == sr.size() )
with expansion:
  11 == 11

-------------------------------------------------------------------------------
Stringifying std::chrono::duration helpers
-------------------------------------------------------------------------------
ToStringChrono.tests.cpp:<line number>
...............................................................................

ToStringChrono.tests.cpp:<line number>:
PASSED:
  REQUIRE( minute == seconds )
with expansion:
  1 m == 60 s

ToStringChrono.tests.cpp:<line number>:
PASSED:
  REQUIRE( hour != seconds )
with expansion:
  1 h != 60 s

ToStringChrono.tests.cpp:<line number>:
PASSED:
  REQUIRE( micro != milli )
with expansion:
  1 us != 1 ms

ToStringChrono.tests.cpp:<line number>:
PASSED:
  REQUIRE( nano != micro )
with expansion:
  1 ns != 1 us

-------------------------------------------------------------------------------
Stringifying std::chrono::duration with weird ratios
-------------------------------------------------------------------------------
ToStringChrono.tests.cpp:<line number>
...............................................................................

ToStringChrono.tests.cpp:<line number>:
PASSED:
  REQUIRE( half_minute != femto_second )
with expansion:
  1 [30/1]s != 1 fs

ToStringChrono.tests.cpp:<line number>:
PASSED:
  REQUIRE( pico_second != atto_second )
with expansion:
  1 ps != 1 as

-------------------------------------------------------------------------------
Stringifying std::chrono::time_point<system_clock>
-------------------------------------------------------------------------------
ToStringChrono.tests.cpp:<line number>
...............................................................................

ToStringChrono.tests.cpp:<line number>:
PASSED:
  REQUIRE( now != later )
with expansion:
  {iso8601-timestamp}
  !=
  {iso8601-timestamp}

-------------------------------------------------------------------------------
Tabs and newlines show in output
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>: 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:<line number>
...............................................................................

TagAlias.tests.cpp:<line number>:
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:<line number>:
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:<line number>:
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:<line number>:
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:<line number>
...............................................................................

TagAlias.tests.cpp:<line number>:
PASSED:
  CHECK_THROWS( registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) ) )

TagAlias.tests.cpp:<line number>:
PASSED:
  CHECK_THROWS( registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) ) )

TagAlias.tests.cpp:<line number>:
PASSED:
  CHECK_THROWS( registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) ) )

TagAlias.tests.cpp:<line number>:
PASSED:
  CHECK_THROWS( registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) ) )

-------------------------------------------------------------------------------
Test case with one argument
-------------------------------------------------------------------------------
VariadicMacros.tests.cpp:<line number>
...............................................................................

VariadicMacros.tests.cpp:<line number>:
PASSED:
with message:
  no assertions

-------------------------------------------------------------------------------
Test enum bit values
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( 0x<hex digits> == bit30and31 )
with expansion:
  3221225472 (0x<hex digits>) == 3221225472

-------------------------------------------------------------------------------
The NO_FAIL macro reports a failure but does not fail the test
-------------------------------------------------------------------------------
Message.tests.cpp:<line number>
...............................................................................

Message.tests.cpp:<line number>:
FAILED - but was ok:
  CHECK_NOFAIL( 1 == 2 )

-------------------------------------------------------------------------------
This test 'should' fail but doesn't
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
with message:
  oops!

-------------------------------------------------------------------------------
Tracker
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isOpen() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
  successfully close one section
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isSuccessfullyCompleted() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isComplete() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( ctx.completedCycle() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isSuccessfullyCompleted() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isOpen() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
  fail one section
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isSuccessfullyCompleted() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isComplete() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( ctx.completedCycle() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isSuccessfullyCompleted() == false )
with expansion:
  false == false

-------------------------------------------------------------------------------
Tracker
  fail one section
  re-enter after failed section
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase2.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1b.isOpen() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( ctx.completedCycle() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isSuccessfullyCompleted() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isOpen() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
  fail one section
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isSuccessfullyCompleted() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isComplete() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( ctx.completedCycle() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
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:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase2.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1b.isOpen() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( ctx.completedCycle() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isSuccessfullyCompleted() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isOpen() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
  successfully close one section, then find another
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2.isOpen() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
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:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase2.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1b.isOpen() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2b.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
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:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( ctx.completedCycle() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2b.isSuccessfullyCompleted() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase2.isComplete() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase2.isSuccessfullyCompleted() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isOpen() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
  successfully close one section, then find another
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2.isOpen() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
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:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase2.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1b.isOpen() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2b.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
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:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( ctx.completedCycle() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2b.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2b.isSuccessfullyCompleted() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase2.isSuccessfullyCompleted() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase3.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1c.isOpen() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2c.isOpen() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase3.isSuccessfullyCompleted() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isOpen() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
  open a nested section
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isComplete() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isComplete() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isComplete() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isOpen() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
  start a generator
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1.index() == 0 )
with expansion:
  0 == 0

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1.isComplete() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isComplete() == false )
with expansion:
  false == false

-------------------------------------------------------------------------------
Tracker
  start a generator
  close outer section
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isComplete() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isSuccessfullyCompleted() == false )
with expansion:
  false == false

-------------------------------------------------------------------------------
Tracker
  start a generator
  close outer section
  Re-enter for second generation
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase2.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1b.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1b.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1b.index() == 1 )
with expansion:
  1 == 1

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isComplete() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1b.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1b.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase2.isComplete() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isOpen() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
  start a generator
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1.index() == 0 )
with expansion:
  0 == 0

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1.isComplete() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isComplete() == false )
with expansion:
  false == false

-------------------------------------------------------------------------------
Tracker
  start a generator
  Start a new inner section
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isComplete() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
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:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase2.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1b.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1b.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1b.index() == 1 )
with expansion:
  1 == 1

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2b.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2b.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1b.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1b.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase2.isComplete() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isOpen() )
with expansion:
  true

-------------------------------------------------------------------------------
Tracker
  start a generator
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1.index() == 0 )
with expansion:
  0 == 0

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1.isComplete() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isComplete() == false )
with expansion:
  false == false

-------------------------------------------------------------------------------
Tracker
  start a generator
  Fail an inner section
-------------------------------------------------------------------------------
PartTracker.tests.cpp:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2.isSuccessfullyCompleted() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1.isComplete() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
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:<line number>
...............................................................................

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase2.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1b.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1b.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1b.index() == 0 )
with expansion:
  0 == 0

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2b.isOpen() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1b.isComplete() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1b.isComplete() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase2.isComplete() == false )
with expansion:
  false == false

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase3.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1c.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1c.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1c.index() == 1 )
with expansion:
  1 == 1

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2c.isOpen() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s2c.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( g1c.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( s1c.isComplete() )
with expansion:
  true

PartTracker.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCase3.isComplete() )
with expansion:
  true

-------------------------------------------------------------------------------
Unexpected exceptions can be translated
-------------------------------------------------------------------------------
Exception.tests.cpp:<line number>
...............................................................................

Exception.tests.cpp:<line number>: FAILED:
due to unexpected exception with message:
  3.14

-------------------------------------------------------------------------------
Use a custom approx
-------------------------------------------------------------------------------
Approx.tests.cpp:<line number>
...............................................................................

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( d == approx( 1.23 ) )
with expansion:
  1.23 == Approx( 1.23 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( d == approx( 1.22 ) )
with expansion:
  1.23 == Approx( 1.22 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( d == approx( 1.24 ) )
with expansion:
  1.23 == Approx( 1.24 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( d != approx( 1.25 ) )
with expansion:
  1.23 != Approx( 1.25 )

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( approx( d ) == 1.23 )
with expansion:
  Approx( 1.23 ) == 1.23

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( approx( d ) == 1.22 )
with expansion:
  Approx( 1.23 ) == 1.22

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( approx( d ) == 1.24 )
with expansion:
  Approx( 1.23 ) == 1.24

Approx.tests.cpp:<line number>:
PASSED:
  REQUIRE( approx( d ) != 1.25 )
with expansion:
  Approx( 1.23 ) != 1.25

-------------------------------------------------------------------------------
Variadic macros
  Section with one argument
-------------------------------------------------------------------------------
VariadicMacros.tests.cpp:<line number>
...............................................................................

VariadicMacros.tests.cpp:<line number>:
PASSED:
with message:
  no assertions

-------------------------------------------------------------------------------
Vector matchers
  Contains (element)
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
PASSED:
  CHECK_THAT( v, VectorContains(1) )
with expansion:
  { 1, 2, 3 } Contains: 1

Matchers.tests.cpp:<line number>:
PASSED:
  CHECK_THAT( v, VectorContains(2) )
with expansion:
  { 1, 2, 3 } Contains: 2

-------------------------------------------------------------------------------
Vector matchers
  Contains (vector)
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
PASSED:
  CHECK_THAT( v, Contains(v2) )
with expansion:
  { 1, 2, 3 } Contains: { 1, 2 }

Matchers.tests.cpp:<line number>:
PASSED:
  CHECK_THAT( v, Contains(v2) )
with expansion:
  { 1, 2, 3 } Contains: { 1, 2, 3 }

Matchers.tests.cpp:<line number>:
PASSED:
  CHECK_THAT( v, Contains(empty) )
with expansion:
  { 1, 2, 3 } Contains: {  }

Matchers.tests.cpp:<line number>:
PASSED:
  CHECK_THAT( empty, Contains(empty) )
with expansion:
  {  } Contains: {  }

-------------------------------------------------------------------------------
Vector matchers
  Contains (element), composed
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
PASSED:
  CHECK_THAT( v, VectorContains(1) && VectorContains(2) )
with expansion:
  { 1, 2, 3 } ( Contains: 1 and Contains: 2 )

-------------------------------------------------------------------------------
Vector matchers
  Equals
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>:
PASSED:
  CHECK_THAT( v, Equals(v) )
with expansion:
  { 1, 2, 3 } Equals: { 1, 2, 3 }

Matchers.tests.cpp:<line number>:
PASSED:
  CHECK_THAT( empty, Equals(empty) )
with expansion:
  {  } Equals: {  }

Matchers.tests.cpp:<line number>:
PASSED:
  CHECK_THAT( v, Equals(v2) )
with expansion:
  { 1, 2, 3 } Equals: { 1, 2, 3 }

-------------------------------------------------------------------------------
Vector matchers that fail
  Contains (element)
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>: FAILED:
  CHECK_THAT( v, VectorContains(-1) )
with expansion:
  { 1, 2, 3 } Contains: -1

Matchers.tests.cpp:<line number>: FAILED:
  CHECK_THAT( empty, VectorContains(1) )
with expansion:
  {  } Contains: 1

-------------------------------------------------------------------------------
Vector matchers that fail
  Contains (vector)
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>: FAILED:
  CHECK_THAT( empty, Contains(v) )
with expansion:
  {  } Contains: { 1, 2, 3 }

Matchers.tests.cpp:<line number>: FAILED:
  CHECK_THAT( v, Contains(v2) )
with expansion:
  { 1, 2, 3 } Contains: { 1, 2, 4 }

-------------------------------------------------------------------------------
Vector matchers that fail
  Equals
-------------------------------------------------------------------------------
Matchers.tests.cpp:<line number>
...............................................................................

Matchers.tests.cpp:<line number>: FAILED:
  CHECK_THAT( v, Equals(v2) )
with expansion:
  { 1, 2, 3 } Equals: { 1, 2 }

Matchers.tests.cpp:<line number>: FAILED:
  CHECK_THAT( v2, Equals(v) )
with expansion:
  { 1, 2 } Equals: { 1, 2, 3 }

Matchers.tests.cpp:<line number>: FAILED:
  CHECK_THAT( empty, Equals(v) )
with expansion:
  {  } Equals: { 1, 2, 3 }

Matchers.tests.cpp:<line number>: FAILED:
  CHECK_THAT( v, Equals(empty) )
with expansion:
  { 1, 2, 3 } Equals: {  }

-------------------------------------------------------------------------------
When checked exceptions are thrown they can be expected or unexpected
-------------------------------------------------------------------------------
Exception.tests.cpp:<line number>
...............................................................................

Exception.tests.cpp:<line number>:
PASSED:
  REQUIRE_THROWS_AS( thisThrows(), std::domain_error )

Exception.tests.cpp:<line number>:
PASSED:
  REQUIRE_NOTHROW( thisDoesntThrow() )

Exception.tests.cpp:<line number>:
PASSED:
  REQUIRE_THROWS( thisThrows() )

-------------------------------------------------------------------------------
When unchecked exceptions are thrown directly they are always failures
-------------------------------------------------------------------------------
Exception.tests.cpp:<line number>
...............................................................................

Exception.tests.cpp:<line number>: FAILED:
due to unexpected exception with message:
  unexpected exception

-------------------------------------------------------------------------------
When unchecked exceptions are thrown during a CHECK the test should continue
-------------------------------------------------------------------------------
Exception.tests.cpp:<line number>
...............................................................................

Exception.tests.cpp:<line number>: 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:<line number>
...............................................................................

Exception.tests.cpp:<line number>: 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:<line number>
...............................................................................

Exception.tests.cpp:<line number>: 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:<line number>
...............................................................................

Exception.tests.cpp:<line number>: FAILED:
due to unexpected exception with message:
  unexpected exception

-------------------------------------------------------------------------------
Where the LHS is not a simple value
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
warning:
  Uncomment the code in this test to check that it gives a sensible compiler
  error

-------------------------------------------------------------------------------
Where there is more to the expression after the RHS
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
warning:
  Uncomment the code in this test to check that it gives a sensible compiler
  error

-------------------------------------------------------------------------------
X/level/0/a
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:

-------------------------------------------------------------------------------
X/level/0/b
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:

-------------------------------------------------------------------------------
X/level/1/a
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:

-------------------------------------------------------------------------------
X/level/1/b
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:

-------------------------------------------------------------------------------
XmlEncode
  normal string
-------------------------------------------------------------------------------
Xml.tests.cpp:<line number>
...............................................................................

Xml.tests.cpp:<line number>:
PASSED:
  REQUIRE( encode( "normal string" ) == "normal string" )
with expansion:
  "normal string" == "normal string"

-------------------------------------------------------------------------------
XmlEncode
  empty string
-------------------------------------------------------------------------------
Xml.tests.cpp:<line number>
...............................................................................

Xml.tests.cpp:<line number>:
PASSED:
  REQUIRE( encode( "" ) == "" )
with expansion:
  "" == ""

-------------------------------------------------------------------------------
XmlEncode
  string with ampersand
-------------------------------------------------------------------------------
Xml.tests.cpp:<line number>
...............................................................................

Xml.tests.cpp:<line number>:
PASSED:
  REQUIRE( encode( "smith & jones" ) == "smith &amp; jones" )
with expansion:
  "smith &amp; jones" == "smith &amp; jones"

-------------------------------------------------------------------------------
XmlEncode
  string with less-than
-------------------------------------------------------------------------------
Xml.tests.cpp:<line number>
...............................................................................

Xml.tests.cpp:<line number>:
PASSED:
  REQUIRE( encode( "smith < jones" ) == "smith &lt; jones" )
with expansion:
  "smith &lt; jones" == "smith &lt; jones"

-------------------------------------------------------------------------------
XmlEncode
  string with greater-than
-------------------------------------------------------------------------------
Xml.tests.cpp:<line number>
...............................................................................

Xml.tests.cpp:<line number>:
PASSED:
  REQUIRE( encode( "smith > jones" ) == "smith > jones" )
with expansion:
  "smith > jones" == "smith > jones"

Xml.tests.cpp:<line number>:
PASSED:
  REQUIRE( encode( "smith ]]> jones" ) == "smith ]]&gt; jones" )
with expansion:
  "smith ]]&gt; jones"
  ==
  "smith ]]&gt; jones"

-------------------------------------------------------------------------------
XmlEncode
  string with quotes
-------------------------------------------------------------------------------
Xml.tests.cpp:<line number>
...............................................................................

Xml.tests.cpp:<line number>:
PASSED:
  REQUIRE( encode( stringWithQuotes ) == stringWithQuotes )
with expansion:
  "don't "quote" me on that"
  ==
  "don't "quote" me on that"

Xml.tests.cpp:<line number>:
PASSED:
  REQUIRE( encode( stringWithQuotes, Catch::XmlEncode::ForAttributes ) == "don't &quot;quote&quot; me on that" )
with expansion:
  "don't &quot;quote&quot; me on that"
  ==
  "don't &quot;quote&quot; me on that"

-------------------------------------------------------------------------------
XmlEncode
  string with control char (1)
-------------------------------------------------------------------------------
Xml.tests.cpp:<line number>
...............................................................................

Xml.tests.cpp:<line number>:
PASSED:
  REQUIRE( encode( "[\x01]" ) == "[\\x01]" )
with expansion:
  "[\x01]" == "[\x01]"

-------------------------------------------------------------------------------
XmlEncode
  string with control char (x7F)
-------------------------------------------------------------------------------
Xml.tests.cpp:<line number>
...............................................................................

Xml.tests.cpp:<line number>:
PASSED:
  REQUIRE( encode( "[\x7F]" ) == "[\\x7F]" )
with expansion:
  "[\x7F]" == "[\x7F]"

-------------------------------------------------------------------------------
atomic if
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( x == 0 )
with expansion:
  0 == 0

-------------------------------------------------------------------------------
boolean member
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( obj.prop != 0 )
with expansion:
  0x<hex digits> != 0

-------------------------------------------------------------------------------
checkedElse
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  CHECKED_ELSE( flag )
with expansion:
  true

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCheckedElse( true ) )
with expansion:
  true

-------------------------------------------------------------------------------
checkedElse, failing
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>: FAILED:
  CHECKED_ELSE( flag )
with expansion:
  false

Misc.tests.cpp:<line number>: FAILED:
  REQUIRE( testCheckedElse( false ) )
with expansion:
  false

-------------------------------------------------------------------------------
checkedIf
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  CHECKED_IF( flag )
with expansion:
  true

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( testCheckedIf( true ) )
with expansion:
  true

-------------------------------------------------------------------------------
checkedIf, failing
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>: FAILED:
  CHECKED_IF( flag )
with expansion:
  false

Misc.tests.cpp:<line number>: FAILED:
  REQUIRE( testCheckedIf( false ) )
with expansion:
  false

-------------------------------------------------------------------------------
comparisons between const int variables
-------------------------------------------------------------------------------
Condition.tests.cpp:<line number>
...............................................................................

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( unsigned_char_var == 1 )
with expansion:
  1 == 1

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( unsigned_short_var == 1 )
with expansion:
  1 == 1

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( unsigned_int_var == 1 )
with expansion:
  1 == 1

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( unsigned_long_var == 1 )
with expansion:
  1 == 1

-------------------------------------------------------------------------------
comparisons between int variables
-------------------------------------------------------------------------------
Condition.tests.cpp:<line number>
...............................................................................

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( long_var == unsigned_char_var )
with expansion:
  1 == 1

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( long_var == unsigned_short_var )
with expansion:
  1 == 1

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( long_var == unsigned_int_var )
with expansion:
  1 == 1

Condition.tests.cpp:<line number>:
PASSED:
  REQUIRE( long_var == unsigned_long_var )
with expansion:
  1 == 1

-------------------------------------------------------------------------------
even more nested SECTION tests
  c
  d (leaf)
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:

-------------------------------------------------------------------------------
even more nested SECTION tests
  c
  e (leaf)
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:

-------------------------------------------------------------------------------
even more nested SECTION tests
  f (leaf)
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:

loose text artifact
-------------------------------------------------------------------------------
just failure
-------------------------------------------------------------------------------
Message.tests.cpp:<line number>
...............................................................................

Message.tests.cpp:<line number>: FAILED:
explicitly with message:
  Previous info should not be seen

-------------------------------------------------------------------------------
long long
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( l == std::numeric_limits<long long>::max() )
with expansion:
  9223372036854775807 (0x<hex digits>)
  ==
  9223372036854775807 (0x<hex digits>)

-------------------------------------------------------------------------------
looped SECTION tests
  s1
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>: FAILED:
  CHECK( b > a )
with expansion:
  0 > 1

-------------------------------------------------------------------------------
looped tests
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>: FAILED:
  CHECK( ( fib[i] % 2 ) == 0 )
with expansion:
  1 == 0
with message:
  Testing if fib[0] (1) is even

Misc.tests.cpp:<line number>: FAILED:
  CHECK( ( fib[i] % 2 ) == 0 )
with expansion:
  1 == 0
with message:
  Testing if fib[1] (1) is even

Misc.tests.cpp:<line number>:
PASSED:
  CHECK( ( fib[i] % 2 ) == 0 )
with expansion:
  0 == 0
with message:
  Testing if fib[2] (2) is even

Misc.tests.cpp:<line number>: FAILED:
  CHECK( ( fib[i] % 2 ) == 0 )
with expansion:
  1 == 0
with message:
  Testing if fib[3] (3) is even

Misc.tests.cpp:<line number>: FAILED:
  CHECK( ( fib[i] % 2 ) == 0 )
with expansion:
  1 == 0
with message:
  Testing if fib[4] (5) is even

Misc.tests.cpp:<line number>:
PASSED:
  CHECK( ( fib[i] % 2 ) == 0 )
with expansion:
  0 == 0
with message:
  Testing if fib[5] (8) is even

Misc.tests.cpp:<line number>: FAILED:
  CHECK( ( fib[i] % 2 ) == 0 )
with expansion:
  1 == 0
with message:
  Testing if fib[6] (13) is even

Misc.tests.cpp:<line number>: 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:<line number>
...............................................................................

Misc.tests.cpp:<line number>: FAILED:
  REQUIRE( a == b )
with expansion:
  1 == 2

-------------------------------------------------------------------------------
more nested SECTION tests
  s1
  s3
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( a != b )
with expansion:
  1 != 2

-------------------------------------------------------------------------------
more nested SECTION tests
  s1
  s4
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( a < b )
with expansion:
  1 < 2

-------------------------------------------------------------------------------
nested SECTION tests
  s1
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( a != b )
with expansion:
  1 != 2

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( b != a )
with expansion:
  2 != 1

-------------------------------------------------------------------------------
nested SECTION tests
  s1
  s2
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( a != b )
with expansion:
  1 != 2

-------------------------------------------------------------------------------
non streamable - with conv. op
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( s == "7" )
with expansion:
  "7" == "7"

-------------------------------------------------------------------------------
non-copyable objects
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  CHECK( ti == typeid(int) )
with expansion:
  {?} == {?}

-------------------------------------------------------------------------------
not allowed
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:

-------------------------------------------------------------------------------
null strings
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( makeString( false ) != static_cast<char*>(0) )
with expansion:
  "valid string" != {null string}

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( makeString( true ) == static_cast<char*>(0) )
with expansion:
  {null string} == {null string}

-------------------------------------------------------------------------------
null_ptr
-------------------------------------------------------------------------------
Tricky.tests.cpp:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( ptr.get() == 0 )
with expansion:
  0 == 0

-------------------------------------------------------------------------------
pair<pair<int,const char *,pair<std::string,int> > -> toString
-------------------------------------------------------------------------------
ToStringPair.tests.cpp:<line number>
...............................................................................

ToStringPair.tests.cpp:<line number>:
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:<line number>
...............................................................................

Tricky.tests.cpp:<line number>:
PASSED:
  REQUIRE( p == 0 )
with expansion:
  0 == 0

-------------------------------------------------------------------------------
random SECTION tests
  s1
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( a != b )
with expansion:
  1 != 2

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( b != a )
with expansion:
  2 != 1

-------------------------------------------------------------------------------
random SECTION tests
  s2
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( a != b )
with expansion:
  1 != 2

-------------------------------------------------------------------------------
replaceInPlace
  replace single char
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  CHECK( Catch::replaceInPlace( letters, "b", "z" ) )
with expansion:
  true

String.tests.cpp:<line number>:
PASSED:
  CHECK( letters == "azcdefcg" )
with expansion:
  "azcdefcg" == "azcdefcg"

-------------------------------------------------------------------------------
replaceInPlace
  replace two chars
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  CHECK( Catch::replaceInPlace( letters, "c", "z" ) )
with expansion:
  true

String.tests.cpp:<line number>:
PASSED:
  CHECK( letters == "abzdefzg" )
with expansion:
  "abzdefzg" == "abzdefzg"

-------------------------------------------------------------------------------
replaceInPlace
  replace first char
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  CHECK( Catch::replaceInPlace( letters, "a", "z" ) )
with expansion:
  true

String.tests.cpp:<line number>:
PASSED:
  CHECK( letters == "zbcdefcg" )
with expansion:
  "zbcdefcg" == "zbcdefcg"

-------------------------------------------------------------------------------
replaceInPlace
  replace last char
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  CHECK( Catch::replaceInPlace( letters, "g", "z" ) )
with expansion:
  true

String.tests.cpp:<line number>:
PASSED:
  CHECK( letters == "abcdefcz" )
with expansion:
  "abcdefcz" == "abcdefcz"

-------------------------------------------------------------------------------
replaceInPlace
  replace all chars
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  CHECK( Catch::replaceInPlace( letters, letters, "replaced" ) )
with expansion:
  true

String.tests.cpp:<line number>:
PASSED:
  CHECK( letters == "replaced" )
with expansion:
  "replaced" == "replaced"

-------------------------------------------------------------------------------
replaceInPlace
  replace no chars
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  CHECK_FALSE( Catch::replaceInPlace( letters, "x", "z" ) )
with expansion:
  !false

String.tests.cpp:<line number>:
PASSED:
  CHECK( letters == letters )
with expansion:
  "abcdefcg" == "abcdefcg"

-------------------------------------------------------------------------------
replaceInPlace
  escape '
-------------------------------------------------------------------------------
String.tests.cpp:<line number>
...............................................................................

String.tests.cpp:<line number>:
PASSED:
  CHECK( Catch::replaceInPlace( s, "'", "|'" ) )
with expansion:
  true

String.tests.cpp:<line number>:
PASSED:
  CHECK( s == "didn|'t" )
with expansion:
  "didn|'t" == "didn|'t"

-------------------------------------------------------------------------------
send a single char to INFO
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>: FAILED:
  REQUIRE( false )
with message:
  3

-------------------------------------------------------------------------------
sends information to INFO
-------------------------------------------------------------------------------
Message.tests.cpp:<line number>
...............................................................................

Message.tests.cpp:<line number>: FAILED:
  REQUIRE( false )
with messages:
  hi
  i := 7

-------------------------------------------------------------------------------
std::pair<int,const std::string> -> toString
-------------------------------------------------------------------------------
ToStringPair.tests.cpp:<line number>
...............................................................................

ToStringPair.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify(value) == "{ 34, \"xyzzy\" }" )
with expansion:
  "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }"

-------------------------------------------------------------------------------
std::pair<int,std::string> -> toString
-------------------------------------------------------------------------------
ToStringPair.tests.cpp:<line number>
...............................................................................

ToStringPair.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify( value ) == "{ 34, \"xyzzy\" }" )
with expansion:
  "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }"

-------------------------------------------------------------------------------
std::vector<std::pair<std::string,int> > -> toString
-------------------------------------------------------------------------------
ToStringPair.tests.cpp:<line number>
...............................................................................

ToStringPair.tests.cpp:<line number>:
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:<line number>
...............................................................................

Tricky.tests.cpp:<line number>: FAILED:
  REQUIRE( std::string( "first" ) == "second" )
with expansion:
  "first" == "second"

-------------------------------------------------------------------------------
stringify( has_maker )
-------------------------------------------------------------------------------
ToStringWhich.tests.cpp:<line number>
...............................................................................

ToStringWhich.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify( item ) == "StringMaker<has_maker>" )
with expansion:
  "StringMaker<has_maker>"
  ==
  "StringMaker<has_maker>"

-------------------------------------------------------------------------------
stringify( has_maker_and_toString )
-------------------------------------------------------------------------------
ToStringWhich.tests.cpp:<line number>
...............................................................................

ToStringWhich.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify( item ) == "StringMaker<has_maker_and_operator>" )
with expansion:
  "StringMaker<has_maker_and_operator>"
  ==
  "StringMaker<has_maker_and_operator>"

-------------------------------------------------------------------------------
stringify( has_operator )
-------------------------------------------------------------------------------
ToStringWhich.tests.cpp:<line number>
...............................................................................

ToStringWhich.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify( item ) == "operator<<( has_operator )" )
with expansion:
  "operator<<( has_operator )"
  ==
  "operator<<( has_operator )"

-------------------------------------------------------------------------------
toString on const wchar_t const pointer returns the string contents
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  CHECK( result == "\"wide load\"" )
with expansion:
  ""wide load"" == ""wide load""

-------------------------------------------------------------------------------
toString on const wchar_t pointer returns the string contents
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  CHECK( result == "\"wide load\"" )
with expansion:
  ""wide load"" == ""wide load""

-------------------------------------------------------------------------------
toString on wchar_t const pointer returns the string contents
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  CHECK( result == "\"wide load\"" )
with expansion:
  ""wide load"" == ""wide load""

-------------------------------------------------------------------------------
toString on wchar_t returns the string contents
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  CHECK( result == "\"wide load\"" )
with expansion:
  ""wide load"" == ""wide load""

-------------------------------------------------------------------------------
toString( vectors<has_maker> )
-------------------------------------------------------------------------------
ToStringWhich.tests.cpp:<line number>
...............................................................................

ToStringWhich.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify( v ) == "{ StringMaker<has_maker> }" )
with expansion:
  "{ StringMaker<has_maker> }"
  ==
  "{ StringMaker<has_maker> }"

-------------------------------------------------------------------------------
toString( vectors<has_maker_and_operator> )
-------------------------------------------------------------------------------
ToStringWhich.tests.cpp:<line number>
...............................................................................

ToStringWhich.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify( v ) == "{ StringMaker<has_maker_and_operator> }" )
with expansion:
  "{ StringMaker<has_maker_and_operator> }"
  ==
  "{ StringMaker<has_maker_and_operator> }"

-------------------------------------------------------------------------------
toString( vectors<has_operator> )
-------------------------------------------------------------------------------
ToStringWhich.tests.cpp:<line number>
...............................................................................

ToStringWhich.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify( v ) == "{ operator<<( has_operator ) }" )
with expansion:
  "{ operator<<( has_operator ) }"
  ==
  "{ operator<<( has_operator ) }"

-------------------------------------------------------------------------------
toString(enum class w/operator<<)
-------------------------------------------------------------------------------
EnumToString.tests.cpp:<line number>
...............................................................................

EnumToString.tests.cpp:<line number>:
PASSED:
  CHECK( ::Catch::Detail::stringify(e0) == "E2/V0" )
with expansion:
  "E2/V0" == "E2/V0"

EnumToString.tests.cpp:<line number>:
PASSED:
  CHECK( ::Catch::Detail::stringify(e1) == "E2/V1" )
with expansion:
  "E2/V1" == "E2/V1"

EnumToString.tests.cpp:<line number>:
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:<line number>
...............................................................................

EnumToString.tests.cpp:<line number>: FAILED:
  CHECK( ::Catch::Detail::stringify(e0) == "0" )
with expansion:
  "{?}" == "0"

EnumToString.tests.cpp:<line number>: FAILED:
  CHECK( ::Catch::Detail::stringify(e1) == "1" )
with expansion:
  "{?}" == "1"

-------------------------------------------------------------------------------
toString(enum w/operator<<)
-------------------------------------------------------------------------------
EnumToString.tests.cpp:<line number>
...............................................................................

EnumToString.tests.cpp:<line number>:
PASSED:
  CHECK( ::Catch::Detail::stringify(e0) == "E2{0}" )
with expansion:
  "E2{0}" == "E2{0}"

EnumToString.tests.cpp:<line number>:
PASSED:
  CHECK( ::Catch::Detail::stringify(e1) == "E2{1}" )
with expansion:
  "E2{1}" == "E2{1}"

-------------------------------------------------------------------------------
toString(enum)
-------------------------------------------------------------------------------
EnumToString.tests.cpp:<line number>
...............................................................................

EnumToString.tests.cpp:<line number>:
PASSED:
  CHECK( ::Catch::Detail::stringify(e0) == "0" )
with expansion:
  "0" == "0"

EnumToString.tests.cpp:<line number>:
PASSED:
  CHECK( ::Catch::Detail::stringify(e1) == "1" )
with expansion:
  "1" == "1"

-------------------------------------------------------------------------------
tuple<>
-------------------------------------------------------------------------------
ToStringTuple.tests.cpp:<line number>
...............................................................................

ToStringTuple.tests.cpp:<line number>:
PASSED:
  CHECK( "{ }" == ::Catch::Detail::stringify(type{}) )
with expansion:
  "{ }" == "{ }"

ToStringTuple.tests.cpp:<line number>:
PASSED:
  CHECK( "{ }" == ::Catch::Detail::stringify(value) )
with expansion:
  "{ }" == "{ }"

-------------------------------------------------------------------------------
tuple<float,int>
-------------------------------------------------------------------------------
ToStringTuple.tests.cpp:<line number>
...............................................................................

ToStringTuple.tests.cpp:<line number>:
PASSED:
  CHECK( "1.2f" == ::Catch::Detail::stringify(float(1.2)) )
with expansion:
  "1.2f" == "1.2f"

ToStringTuple.tests.cpp:<line number>:
PASSED:
  CHECK( "{ 1.2f, 0 }" == ::Catch::Detail::stringify(type{1.2f,0}) )
with expansion:
  "{ 1.2f, 0 }" == "{ 1.2f, 0 }"

-------------------------------------------------------------------------------
tuple<int>
-------------------------------------------------------------------------------
ToStringTuple.tests.cpp:<line number>
...............................................................................

ToStringTuple.tests.cpp:<line number>:
PASSED:
  CHECK( "{ 0 }" == ::Catch::Detail::stringify(type{0}) )
with expansion:
  "{ 0 }" == "{ 0 }"

-------------------------------------------------------------------------------
tuple<0,int,const char *>
-------------------------------------------------------------------------------
ToStringTuple.tests.cpp:<line number>
...............................................................................

ToStringTuple.tests.cpp:<line number>:
PASSED:
  CHECK( "{ 0, 42, \"Catch me\" }" == ::Catch::Detail::stringify(value) )
with expansion:
  "{ 0, 42, "Catch me" }"
  ==
  "{ 0, 42, "Catch me" }"

-------------------------------------------------------------------------------
tuple<string,string>
-------------------------------------------------------------------------------
ToStringTuple.tests.cpp:<line number>
...............................................................................

ToStringTuple.tests.cpp:<line number>:
PASSED:
  CHECK( "{ \"hello\", \"world\" }" == ::Catch::Detail::stringify(type{"hello","world"}) )
with expansion:
  "{ "hello", "world" }"
  ==
  "{ "hello", "world" }"

-------------------------------------------------------------------------------
tuple<tuple<int>,tuple<>,float>
-------------------------------------------------------------------------------
ToStringTuple.tests.cpp:<line number>
...............................................................................

ToStringTuple.tests.cpp:<line number>:
PASSED:
  CHECK( "{ { 42 }, { }, 1.2f }" == ::Catch::Detail::stringify(value) )
with expansion:
  "{ { 42 }, { }, 1.2f }"
  ==
  "{ { 42 }, { }, 1.2f }"

-------------------------------------------------------------------------------
vec<vec<string,alloc>> -> toString
-------------------------------------------------------------------------------
ToStringVector.tests.cpp:<line number>
...............................................................................

ToStringVector.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify(v) == "{  }" )
with expansion:
  "{  }" == "{  }"

ToStringVector.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify(v) == "{ { \"hello\" }, { \"world\" } }" )
with expansion:
  "{ { "hello" }, { "world" } }"
  ==
  "{ { "hello" }, { "world" } }"

-------------------------------------------------------------------------------
vector<int,allocator> -> toString
-------------------------------------------------------------------------------
ToStringVector.tests.cpp:<line number>
...............................................................................

ToStringVector.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify(vv) == "{  }" )
with expansion:
  "{  }" == "{  }"

ToStringVector.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify(vv) == "{ 42 }" )
with expansion:
  "{ 42 }" == "{ 42 }"

ToStringVector.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify(vv) == "{ 42, 250 }" )
with expansion:
  "{ 42, 250 }" == "{ 42, 250 }"

-------------------------------------------------------------------------------
vector<int> -> toString
-------------------------------------------------------------------------------
ToStringVector.tests.cpp:<line number>
...............................................................................

ToStringVector.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify(vv) == "{  }" )
with expansion:
  "{  }" == "{  }"

ToStringVector.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify(vv) == "{ 42 }" )
with expansion:
  "{ 42 }" == "{ 42 }"

ToStringVector.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify(vv) == "{ 42, 250 }" )
with expansion:
  "{ 42, 250 }" == "{ 42, 250 }"

-------------------------------------------------------------------------------
vector<string> -> toString
-------------------------------------------------------------------------------
ToStringVector.tests.cpp:<line number>
...............................................................................

ToStringVector.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify(vv) == "{  }" )
with expansion:
  "{  }" == "{  }"

ToStringVector.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify(vv) == "{ \"hello\" }" )
with expansion:
  "{ "hello" }" == "{ "hello" }"

ToStringVector.tests.cpp:<line number>:
PASSED:
  REQUIRE( ::Catch::Detail::stringify(vv) == "{ \"hello\", \"world\" }" )
with expansion:
  "{ "hello", "world" }"
  ==
  "{ "hello", "world" }"

-------------------------------------------------------------------------------
vectors can be sized and resized
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.size() == 5 )
with expansion:
  5 == 5

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.capacity() >= 5 )
with expansion:
  5 >= 5

-------------------------------------------------------------------------------
vectors can be sized and resized
  resizing bigger changes size and capacity
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.size() == 10 )
with expansion:
  10 == 10

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.capacity() >= 10 )
with expansion:
  10 >= 10

-------------------------------------------------------------------------------
vectors can be sized and resized
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.size() == 5 )
with expansion:
  5 == 5

Misc.tests.cpp:<line number>:
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:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.size() == 0 )
with expansion:
  0 == 0

Misc.tests.cpp:<line number>:
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:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.capacity() == 0 )
with expansion:
  0 == 0

-------------------------------------------------------------------------------
vectors can be sized and resized
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.size() == 5 )
with expansion:
  5 == 5

Misc.tests.cpp:<line number>:
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:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.size() == 5 )
with expansion:
  5 == 5

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.capacity() >= 10 )
with expansion:
  10 >= 10

-------------------------------------------------------------------------------
vectors can be sized and resized
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.size() == 5 )
with expansion:
  5 == 5

Misc.tests.cpp:<line number>:
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:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.size() == 5 )
with expansion:
  5 == 5

Misc.tests.cpp:<line number>:
PASSED:
  REQUIRE( v.capacity() >= 5 )
with expansion:
  5 >= 5

-------------------------------------------------------------------------------
xmlentitycheck
  embedded xml
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:

-------------------------------------------------------------------------------
xmlentitycheck
  encoded chars
-------------------------------------------------------------------------------
Misc.tests.cpp:<line number>
...............................................................................

Misc.tests.cpp:<line number>:
PASSED:

===============================================================================
test cases: 191 | 137 passed |  50 failed |  4 failed as expected
assertions: 954 | 827 passed | 106 failed | 21 failed as expected

