Sort test ordering during Approval testing
diff --git a/projects/SelfTest/Baselines/console.std.approved.txt b/projects/SelfTest/Baselines/console.std.approved.txt
index ee8d807..7c5da08 100644
--- a/projects/SelfTest/Baselines/console.std.approved.txt
+++ b/projects/SelfTest/Baselines/console.std.approved.txt
@@ -4,6 +4,46 @@
 Run with -? for options
 
 -------------------------------------------------------------------------------
+'Not' checks that should fail
+-------------------------------------------------------------------------------
+ConditionTests.cpp:<line number>
+...............................................................................
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( false != false )
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( true != true )
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( !true )
+with expansion:
+  false
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK_FALSE( true )
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( !trueValue )
+with expansion:
+  false
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK_FALSE( trueValue )
+with expansion:
+  !true
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( !(1 == 1) )
+with expansion:
+  false
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK_FALSE( 1 == 1 )
+with expansion:
+  !(1 == 1)
+
+-------------------------------------------------------------------------------
 A METHOD_AS_TEST_CASE based test run that fails
 -------------------------------------------------------------------------------
 ClassTests.cpp:<line number>
@@ -26,6 +66,97 @@
   1 == 2
 
 -------------------------------------------------------------------------------
+A couple of nested sections followed by a failure
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+explicitly with message:
+  to infinity and beyond
+
+-------------------------------------------------------------------------------
+A failing expression with a non streamable type is still captured
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>: FAILED:
+  CHECK( &o1 == &o2 )
+with expansion:
+  0x<hex digits> == 0x<hex digits>
+
+TrickyTests.cpp:<line number>: FAILED:
+  CHECK( o1 == o2 )
+with expansion:
+  {?} == {?}
+
+-------------------------------------------------------------------------------
+An unchecked exception reports the line of the last assertion
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+  {Unknown expression after the reported line}
+due to unexpected exception with message:
+  unexpected exception
+
+-------------------------------------------------------------------------------
+Contains string matcher
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECK_THAT( testStringForMatching(), Contains( "not there" ) )
+with expansion:
+  "this string contains 'abc' as a substring" contains: "not there"
+
+-------------------------------------------------------------------------------
+Custom exceptions can be translated when testing for nothrow
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.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
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+  REQUIRE_THROWS_AS( throwCustom() )
+due to unexpected exception with message:
+  custom exception - not std
+
+-------------------------------------------------------------------------------
+Custom std-exceptions can be custom translated
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+due to unexpected exception with message:
+  custom std exception
+
+-------------------------------------------------------------------------------
+EndsWith string matcher
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECK_THAT( testStringForMatching(), EndsWith( "this" ) )
+with expansion:
+  "this string contains 'abc' as a substring" ends with: "this"
+
+-------------------------------------------------------------------------------
 Equality checks that should fail
 -------------------------------------------------------------------------------
 ConditionTests.cpp:<line number>
@@ -97,6 +228,100 @@
   1.3 == Approx( 1.301 )
 
 -------------------------------------------------------------------------------
+Equals string matcher
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECK_THAT( testStringForMatching(), Equals( "something else" ) )
+with expansion:
+  "this string contains 'abc' as a substring" equals: "something else"
+
+-------------------------------------------------------------------------------
+Expected exceptions that don't throw or unexpected exceptions fail the test
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+  CHECK_THROWS_AS( thisThrows() )
+due to unexpected exception with message:
+  expected exception
+
+ExceptionTests.cpp:<line number>: FAILED:
+  CHECK_THROWS_AS( thisDoesntThrow() )
+because no exception was thrown where one was expected:
+
+ExceptionTests.cpp:<line number>: FAILED:
+  CHECK_NOTHROW( thisThrows() )
+due to unexpected exception with message:
+  expected exception
+
+-------------------------------------------------------------------------------
+FAIL aborts the test
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+MessageTests.cpp:<line number>: FAILED:
+explicitly with message:
+  This is a failure
+
+-------------------------------------------------------------------------------
+FAIL does not require an argument
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+MessageTests.cpp:<line number>: FAILED:
+
+-------------------------------------------------------------------------------
+INFO and WARN do not abort tests
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+MessageTests.cpp:<line number>:
+warning:
+  this is a warning
+
+-------------------------------------------------------------------------------
+INFO gets logged on failure
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+MessageTests.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
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+MessageTests.cpp:<line number>: FAILED:
+  CHECK( a == 1 )
+with expansion:
+  2 == 1
+with messages:
+  this message may be logged later
+  this message should be logged
+
+MessageTests.cpp:<line number>: FAILED:
+  CHECK( a == 0 )
+with expansion:
+  2 == 0
+with message:
+  and this, but later
+
+-------------------------------------------------------------------------------
 Inequality checks that should fail
 -------------------------------------------------------------------------------
 ConditionTests.cpp:<line number>
@@ -128,6 +353,60 @@
   5 != 5
 
 -------------------------------------------------------------------------------
+Matchers can be composed with both && and || - failing
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.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 - failing
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.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
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+  REQUIRE_THROWS_WITH( thisThrows(), "should fail" )
+with expansion:
+  expected exception
+
+-------------------------------------------------------------------------------
+Nice descriptive name
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+warning:
+  This one ran
+
+-------------------------------------------------------------------------------
+Non-std exceptions can be translated
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+due to unexpected exception with message:
+  custom exception
+
+-------------------------------------------------------------------------------
 Ordering comparison checks that should fail
 -------------------------------------------------------------------------------
 ConditionTests.cpp:<line number>
@@ -229,64 +508,99 @@
   "hello" <= "a"
 
 -------------------------------------------------------------------------------
-'Not' checks that should fail
+Output from all sections is reported
+  one
 -------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
+MessageTests.cpp:<line number>
 ...............................................................................
 
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( false != false )
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( true != true )
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( !true )
-with expansion:
-  false
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK_FALSE( true )
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( !trueValue )
-with expansion:
-  false
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK_FALSE( trueValue )
-with expansion:
-  !true
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( !(1 == 1) )
-with expansion:
-  false
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK_FALSE( 1 == 1 )
-with expansion:
-  !(1 == 1)
+MessageTests.cpp:<line number>: FAILED:
+explicitly with message:
+  Message from section one
 
 -------------------------------------------------------------------------------
-Expected exceptions that don't throw or unexpected exceptions fail the test
+Output from all sections is reported
+  two
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+MessageTests.cpp:<line number>: FAILED:
+explicitly with message:
+  Message from section two
+
+-------------------------------------------------------------------------------
+Pointers can be converted to strings
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+MessageTests.cpp:<line number>:
+warning:
+  actual address of p: 0x<hex digits>
+
+MessageTests.cpp:<line number>:
+warning:
+  toString(p): 0x<hex digits>
+
+-------------------------------------------------------------------------------
+SCOPED_INFO is reset for each loop
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+MessageTests.cpp:<line number>: FAILED:
+  REQUIRE( i < 10 )
+with expansion:
+  10 < 10
+with messages:
+  current counter 10
+  i := 10
+
+A string sent directly to stdout
+A string sent directly to stderr
+Message from section one
+Message from section two
+-------------------------------------------------------------------------------
+StartsWith string matcher
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECK_THAT( testStringForMatching(), StartsWith( "string" ) )
+with expansion:
+  "this string contains 'abc' as a substring" starts with: "string"
+
+hello
+hello
+-------------------------------------------------------------------------------
+Tabs and newlines show in output
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECK( s1 == s2 )
+with expansion:
+  "if ($b == 10) {
+  		$a= 20;
+  }"
+  ==
+  "if ($b == 10) {
+  $a = 20;
+  }
+  "
+
+-------------------------------------------------------------------------------
+Unexpected exceptions can be translated
 -------------------------------------------------------------------------------
 ExceptionTests.cpp:<line number>
 ...............................................................................
 
 ExceptionTests.cpp:<line number>: FAILED:
-  CHECK_THROWS_AS( thisThrows() )
 due to unexpected exception with message:
-  expected exception
-
-ExceptionTests.cpp:<line number>: FAILED:
-  CHECK_THROWS_AS( thisDoesntThrow() )
-because no exception was thrown where one was expected:
-
-ExceptionTests.cpp:<line number>: FAILED:
-  CHECK_NOTHROW( thisThrows() )
-due to unexpected exception with message:
-  expected exception
+  3.14
 
 -------------------------------------------------------------------------------
 When unchecked exceptions are thrown directly they are always failures
@@ -299,29 +613,8 @@
   unexpected exception
 
 -------------------------------------------------------------------------------
-An unchecked exception reports the line of the last assertion
--------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
-...............................................................................
-
-ExceptionTests.cpp:<line number>: FAILED:
-  {Unknown expression after the reported line}
-due to unexpected exception with message:
-  unexpected exception
-
--------------------------------------------------------------------------------
-When unchecked exceptions are thrown from sections they are always failures
-  section name
--------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
-...............................................................................
-
-ExceptionTests.cpp:<line number>: FAILED:
-due to unexpected exception with message:
-  unexpected exception
-
--------------------------------------------------------------------------------
-When unchecked exceptions are thrown from functions they are always failures
+When unchecked exceptions are thrown during a CHECK the test should abort and
+fail
 -------------------------------------------------------------------------------
 ExceptionTests.cpp:<line number>
 ...............................................................................
@@ -344,8 +637,7 @@
   expected exception
 
 -------------------------------------------------------------------------------
-When unchecked exceptions are thrown during a CHECK the test should abort and
-fail
+When unchecked exceptions are thrown from functions they are always failures
 -------------------------------------------------------------------------------
 ExceptionTests.cpp:<line number>
 ...............................................................................
@@ -356,168 +648,69 @@
   expected exception
 
 -------------------------------------------------------------------------------
-Non-std exceptions can be translated
+When unchecked exceptions are thrown from sections they are always failures
+  section name
 -------------------------------------------------------------------------------
 ExceptionTests.cpp:<line number>
 ...............................................................................
 
 ExceptionTests.cpp:<line number>: FAILED:
 due to unexpected exception with message:
-  custom exception
+  unexpected exception
 
 -------------------------------------------------------------------------------
-Custom std-exceptions can be custom translated
+Where the LHS is not a simple value
 -------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
+TrickyTests.cpp:<line number>
 ...............................................................................
 
-ExceptionTests.cpp:<line number>: FAILED:
-due to unexpected exception with message:
-  custom std exception
-
--------------------------------------------------------------------------------
-Custom exceptions can be translated when testing for nothrow
--------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
-...............................................................................
-
-ExceptionTests.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
--------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
-...............................................................................
-
-ExceptionTests.cpp:<line number>: FAILED:
-  REQUIRE_THROWS_AS( throwCustom() )
-due to unexpected exception with message:
-  custom exception - not std
-
--------------------------------------------------------------------------------
-Unexpected exceptions can be translated
--------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
-...............................................................................
-
-ExceptionTests.cpp:<line number>: FAILED:
-due to unexpected exception with message:
-  3.14
-
--------------------------------------------------------------------------------
-Mismatching exception messages failing the test
--------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
-...............................................................................
-
-ExceptionTests.cpp:<line number>: FAILED:
-  REQUIRE_THROWS_WITH( thisThrows(), "should fail" )
-with expansion:
-  expected exception
-
--------------------------------------------------------------------------------
-INFO and WARN do not abort tests
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>:
+TrickyTests.cpp:<line number>:
 warning:
-  this is a warning
+  Uncomment the code in this test to check that it gives a sensible compiler
+  error
 
 -------------------------------------------------------------------------------
-INFO gets logged on failure
+Where there is more to the expression after the RHS
 -------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
+TrickyTests.cpp:<line number>
 ...............................................................................
 
-MessageTests.cpp:<line number>: FAILED:
-  REQUIRE( a == 1 )
+TrickyTests.cpp:<line number>:
+warning:
+  Uncomment the code in this test to check that it gives a sensible compiler
+  error
+
+-------------------------------------------------------------------------------
+checkedElse, failing
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECKED_ELSE( flag )
 with expansion:
-  2 == 1
-with messages:
-  this message should be logged
-  so should this
+  false
 
--------------------------------------------------------------------------------
-INFO gets logged on failure, even if captured before successful assertions
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>: FAILED:
-  CHECK( a == 1 )
+MiscTests.cpp:<line number>: FAILED:
+  REQUIRE( testCheckedElse( false ) )
 with expansion:
-  2 == 1
-with messages:
-  this message may be logged later
-  this message should be logged
+  false
 
-MessageTests.cpp:<line number>: FAILED:
-  CHECK( a == 0 )
+-------------------------------------------------------------------------------
+checkedIf, failing
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECKED_IF( flag )
 with expansion:
-  2 == 0
-with message:
-  and this, but later
+  false
 
--------------------------------------------------------------------------------
-FAIL aborts the test
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>: FAILED:
-explicitly with message:
-  This is a failure
-
--------------------------------------------------------------------------------
-FAIL does not require an argument
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>: FAILED:
-
--------------------------------------------------------------------------------
-Output from all sections is reported
-  one
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>: FAILED:
-explicitly with message:
-  Message from section one
-
--------------------------------------------------------------------------------
-Output from all sections is reported
-  two
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>: FAILED:
-explicitly with message:
-  Message from section two
-
-Message from section one
-Message from section two
--------------------------------------------------------------------------------
-SCOPED_INFO is reset for each loop
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>: FAILED:
-  REQUIRE( i < 10 )
+MiscTests.cpp:<line number>: FAILED:
+  REQUIRE( testCheckedIf( false ) )
 with expansion:
-  10 < 10
-with messages:
-  current counter 10
-  i := 10
+  false
 
 -------------------------------------------------------------------------------
 just failure
@@ -530,45 +723,6 @@
   Previous info should not be seen
 
 -------------------------------------------------------------------------------
-sends information to INFO
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>: FAILED:
-  REQUIRE( false )
-with messages:
-  hi
-  i := 7
-
--------------------------------------------------------------------------------
-Pointers can be converted to strings
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>:
-warning:
-  actual address of p: 0x<hex digits>
-
-MessageTests.cpp:<line number>:
-warning:
-  toString(p): 0x<hex digits>
-
--------------------------------------------------------------------------------
-more nested SECTION tests
-  s1
-  s2
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  REQUIRE( a == b )
-with expansion:
-  1 == 2
-
--------------------------------------------------------------------------------
 looped SECTION tests
   s1
 -------------------------------------------------------------------------------
@@ -628,39 +782,18 @@
 with message:
   Testing if fib[7] (21) is even
 
-A string sent directly to stdout
-A string sent directly to stderr
 -------------------------------------------------------------------------------
-checkedIf, failing
+more nested SECTION tests
+  s1
+  s2
 -------------------------------------------------------------------------------
 MiscTests.cpp:<line number>
 ...............................................................................
 
 MiscTests.cpp:<line number>: FAILED:
-  CHECKED_IF( flag )
+  REQUIRE( a == b )
 with expansion:
-  false
-
-MiscTests.cpp:<line number>: FAILED:
-  REQUIRE( testCheckedIf( false ) )
-with expansion:
-  false
-
--------------------------------------------------------------------------------
-checkedElse, failing
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECKED_ELSE( flag )
-with expansion:
-  false
-
-MiscTests.cpp:<line number>: FAILED:
-  REQUIRE( testCheckedElse( false ) )
-with expansion:
-  false
+  1 == 2
 
 -------------------------------------------------------------------------------
 send a single char to INFO
@@ -674,149 +807,16 @@
   3
 
 -------------------------------------------------------------------------------
-Contains string matcher
+sends information to INFO
 -------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
+MessageTests.cpp:<line number>
 ...............................................................................
 
-MiscTests.cpp:<line number>: FAILED:
-  CHECK_THAT( testStringForMatching(), Contains( "not there" ) )
-with expansion:
-  "this string contains 'abc' as a substring" contains: "not there"
-
--------------------------------------------------------------------------------
-StartsWith string matcher
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK_THAT( testStringForMatching(), StartsWith( "string" ) )
-with expansion:
-  "this string contains 'abc' as a substring" starts with: "string"
-
--------------------------------------------------------------------------------
-EndsWith string matcher
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK_THAT( testStringForMatching(), EndsWith( "this" ) )
-with expansion:
-  "this string contains 'abc' as a substring" ends with: "this"
-
--------------------------------------------------------------------------------
-Equals string matcher
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK_THAT( testStringForMatching(), Equals( "something else" ) )
-with expansion:
-  "this string contains 'abc' as a substring" equals: "something else"
-
--------------------------------------------------------------------------------
-Matchers can be composed with both && and || - failing
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.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 - failing
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK_THAT( testStringForMatching(), !Contains( "substring" ) )
-with expansion:
-  "this string contains 'abc' as a substring" not contains: "substring"
-
--------------------------------------------------------------------------------
-Nice descriptive name
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-warning:
-  This one ran
-
--------------------------------------------------------------------------------
-A couple of nested sections followed by a failure
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-explicitly with message:
-  to infinity and beyond
-
--------------------------------------------------------------------------------
-Tabs and newlines show in output
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK( s1 == s2 )
-with expansion:
-  "if ($b == 10) {
-  		$a= 20;
-  }"
-  ==
-  "if ($b == 10) {
-  $a = 20;
-  }
-  "
-
-hello
-hello
--------------------------------------------------------------------------------
-Where there is more to the expression after the RHS
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-warning:
-  Uncomment the code in this test to check that it gives a sensible compiler
-  error
-
--------------------------------------------------------------------------------
-Where the LHS is not a simple value
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-warning:
-  Uncomment the code in this test to check that it gives a sensible compiler
-  error
-
--------------------------------------------------------------------------------
-A failing expression with a non streamable type is still captured
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>: FAILED:
-  CHECK( &o1 == &o2 )
-with expansion:
-  0x<hex digits> == 0x<hex digits>
-
-TrickyTests.cpp:<line number>: FAILED:
-  CHECK( o1 == o2 )
-with expansion:
-  {?} == {?}
+MessageTests.cpp:<line number>: FAILED:
+  REQUIRE( false )
+with messages:
+  hi
+  i := 7
 
 -------------------------------------------------------------------------------
 string literals of different sizes can be compared
diff --git a/projects/SelfTest/Baselines/console.sw.approved.txt b/projects/SelfTest/Baselines/console.sw.approved.txt
index 3359a0f..b9fdcea 100644
--- a/projects/SelfTest/Baselines/console.sw.approved.txt
+++ b/projects/SelfTest/Baselines/console.sw.approved.txt
@@ -4,126 +4,366 @@
 Run with -? for options
 
 -------------------------------------------------------------------------------
-toString(enum)
+# A test name that starts with a #
 -------------------------------------------------------------------------------
-EnumToString.cpp:<line number>
+MiscTests.cpp:<line number>
 ...............................................................................
 
-EnumToString.cpp:<line number>:
+MiscTests.cpp:<line number>:
 PASSED:
-  CHECK( Catch::toString(e0) == "0" )
-with expansion:
-  "0" == "0"
-
-EnumToString.cpp:<line number>:
-PASSED:
-  CHECK( Catch::toString(e1) == "1" )
-with expansion:
-  "1" == "1"
+with message:
+  yay
 
 -------------------------------------------------------------------------------
-toString(enum w/operator<<)
+'Not' checks that should fail
 -------------------------------------------------------------------------------
-EnumToString.cpp:<line number>
+ConditionTests.cpp:<line number>
 ...............................................................................
 
-EnumToString.cpp:<line number>:
-PASSED:
-  CHECK( Catch::toString(e0) == "E2{0}" )
-with expansion:
-  "E2{0}" == "E2{0}"
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( false != false )
 
-EnumToString.cpp:<line number>:
-PASSED:
-  CHECK( Catch::toString(e1) == "E2{1}" )
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( true != true )
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( !true )
 with expansion:
-  "E2{1}" == "E2{1}"
+  false
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK_FALSE( true )
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( !trueValue )
+with expansion:
+  false
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK_FALSE( trueValue )
+with expansion:
+  !true
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( !(1 == 1) )
+with expansion:
+  false
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK_FALSE( 1 == 1 )
+with expansion:
+  !(1 == 1)
 
 -------------------------------------------------------------------------------
-toString(enum class)
+'Not' checks that should succeed
 -------------------------------------------------------------------------------
-EnumToString.cpp:<line number>
+ConditionTests.cpp:<line number>
 ...............................................................................
 
-EnumToString.cpp:<line number>:
+ConditionTests.cpp:<line number>:
 PASSED:
-  CHECK( Catch::toString(e0) == "0" )
-with expansion:
-  "0" == "0"
+  REQUIRE( false == false )
 
-EnumToString.cpp:<line number>:
+ConditionTests.cpp:<line number>:
 PASSED:
-  CHECK( Catch::toString(e1) == "1" )
+  REQUIRE( true == true )
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( !false )
 with expansion:
-  "1" == "1"
+  true
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE_FALSE( false )
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( !falseValue )
+with expansion:
+  true
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE_FALSE( falseValue )
+with expansion:
+  !false
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( !(1 == 2) )
+with expansion:
+  true
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE_FALSE( 1 == 2 )
+with expansion:
+  !(1 == 2)
 
 -------------------------------------------------------------------------------
-toString(enum class w/operator<<)
+(unimplemented) static bools can be evaluated
+  compare to true
 -------------------------------------------------------------------------------
-EnumToString.cpp:<line number>
+TrickyTests.cpp:<line number>
 ...............................................................................
 
-EnumToString.cpp:<line number>:
+TrickyTests.cpp:<line number>:
 PASSED:
-  CHECK( Catch::toString(e0) == "E2/V0" )
+  REQUIRE( is_true<true>::value == true )
 with expansion:
-  "E2/V0" == "E2/V0"
+  true == true
 
-EnumToString.cpp:<line number>:
+TrickyTests.cpp:<line number>:
 PASSED:
-  CHECK( Catch::toString(e1) == "E2/V1" )
+  REQUIRE( true == is_true<true>::value )
 with expansion:
-  "E2/V1" == "E2/V1"
-
-EnumToString.cpp:<line number>:
-PASSED:
-  CHECK( Catch::toString(e3) == "Unknown enum value 10" )
-with expansion:
-  "Unknown enum value 10"
-  ==
-  "Unknown enum value 10"
+  true == true
 
 -------------------------------------------------------------------------------
-Some simple comparisons between doubles
+(unimplemented) static bools can be evaluated
+  compare to false
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+  REQUIRE( is_true<false>::value == false )
+with expansion:
+  false == false
+
+TrickyTests.cpp:<line number>:
+PASSED:
+  REQUIRE( false == is_true<false>::value )
+with expansion:
+  false == false
+
+-------------------------------------------------------------------------------
+(unimplemented) static bools can be evaluated
+  negation
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+  REQUIRE( !is_true<false>::value )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+(unimplemented) static bools can be evaluated
+  double negation
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+  REQUIRE( !!is_true<true>::value )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+(unimplemented) static bools can be evaluated
+  direct
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+  REQUIRE( is_true<true>::value )
+with expansion:
+  true
+
+TrickyTests.cpp:<line number>:
+PASSED:
+  REQUIRE_FALSE( is_true<false>::value )
+with expansion:
+  !false
+
+-------------------------------------------------------------------------------
+A METHOD_AS_TEST_CASE based test run that fails
+-------------------------------------------------------------------------------
+ClassTests.cpp:<line number>
+...............................................................................
+
+ClassTests.cpp:<line number>: FAILED:
+  REQUIRE( s == "world" )
+with expansion:
+  "hello" == "world"
+
+-------------------------------------------------------------------------------
+A METHOD_AS_TEST_CASE based test run that succeeds
+-------------------------------------------------------------------------------
+ClassTests.cpp:<line number>
+...............................................................................
+
+ClassTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s == "hello" )
+with expansion:
+  "hello" == "hello"
+
+-------------------------------------------------------------------------------
+A TEST_CASE_METHOD based test run that fails
+-------------------------------------------------------------------------------
+ClassTests.cpp:<line number>
+...............................................................................
+
+ClassTests.cpp:<line number>: FAILED:
+  REQUIRE( m_a == 2 )
+with expansion:
+  1 == 2
+
+-------------------------------------------------------------------------------
+A TEST_CASE_METHOD based test run that succeeds
+-------------------------------------------------------------------------------
+ClassTests.cpp:<line number>
+...............................................................................
+
+ClassTests.cpp:<line number>:
+PASSED:
+  REQUIRE( m_a == 1 )
+with expansion:
+  1 == 1
+
+-------------------------------------------------------------------------------
+A couple of nested sections followed by a failure
+  Outer
+  Inner
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+with message:
+  that's not flying - that's failing in style
+
+-------------------------------------------------------------------------------
+A couple of nested sections followed by a failure
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+explicitly with message:
+  to infinity and beyond
+
+-------------------------------------------------------------------------------
+A failing expression with a non streamable type is still captured
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>: FAILED:
+  CHECK( &o1 == &o2 )
+with expansion:
+  0x<hex digits> == 0x<hex digits>
+
+TrickyTests.cpp:<line number>: FAILED:
+  CHECK( o1 == o2 )
+with expansion:
+  {?} == {?}
+
+-------------------------------------------------------------------------------
+AllOf matcher
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  CHECK_THAT( testStringForMatching(), AllOf( Catch::Contains( "string" ), Catch::Contains( "abc" ) ) )
+with expansion:
+  "this string contains 'abc' as a substring" ( contains: "string" and
+  contains: "abc" )
+
+-------------------------------------------------------------------------------
+An expression with side-effects should only be evaluated once
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+  REQUIRE( i++ == 7 )
+with expansion:
+  7 == 7
+
+TrickyTests.cpp:<line number>:
+PASSED:
+  REQUIRE( i++ == 8 )
+with expansion:
+  8 == 8
+
+-------------------------------------------------------------------------------
+An unchecked exception reports the line of the last assertion
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>:
+PASSED:
+  CHECK( 1 == 1 )
+
+ExceptionTests.cpp:<line number>: FAILED:
+  {Unknown expression after the reported line}
+due to unexpected exception with message:
+  unexpected exception
+
+-------------------------------------------------------------------------------
+Anonymous test case 1
+-------------------------------------------------------------------------------
+VariadicMacrosTests.cpp:<line number>
+...............................................................................
+
+VariadicMacrosTests.cpp:<line number>:
+PASSED:
+with message:
+  anonymous test case
+
+-------------------------------------------------------------------------------
+AnyOf matcher
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  CHECK_THAT( testStringForMatching(), AnyOf( Catch::Contains( "string" ), Catch::Contains( "not there" ) ) )
+with expansion:
+  "this string contains 'abc' as a substring" ( contains: "string" or contains:
+  "not there" )
+
+MiscTests.cpp:<line number>:
+PASSED:
+  CHECK_THAT( testStringForMatching(), AnyOf( Catch::Contains( "not there" ), Catch::Contains( "string" ) ) )
+with expansion:
+  "this string contains 'abc' as a substring" ( contains: "not there" or
+  contains: "string" )
+
+-------------------------------------------------------------------------------
+Approximate PI
 -------------------------------------------------------------------------------
 ApproxTests.cpp:<line number>
 ...............................................................................
 
 ApproxTests.cpp:<line number>:
 PASSED:
-  REQUIRE( d == Approx( 1.23 ) )
+  REQUIRE( divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) )
 with expansion:
-  1.23 == Approx( 1.23 )
+  3.1428571429 == Approx( 3.141 )
 
 ApproxTests.cpp:<line number>:
 PASSED:
-  REQUIRE( d != Approx( 1.22 ) )
+  REQUIRE( divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) )
 with expansion:
-  1.23 != Approx( 1.22 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( d != Approx( 1.24 ) )
-with expansion:
-  1.23 != Approx( 1.24 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( Approx( d ) == 1.23 )
-with expansion:
-  Approx( 1.23 ) == 1.23
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( Approx( d ) != 1.22 )
-with expansion:
-  Approx( 1.23 ) != 1.22
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( Approx( d ) != 1.24 )
-with expansion:
-  Approx( 1.23 ) != 1.24
+  3.1428571429 != Approx( 3.141 )
 
 -------------------------------------------------------------------------------
 Approximate comparisons with different epsilons
@@ -216,553 +456,169 @@
   1.234 == Approx( 1.2339999676 )
 
 -------------------------------------------------------------------------------
-Use a custom approx
+Assertions then sections
 -------------------------------------------------------------------------------
-ApproxTests.cpp:<line number>
+TrickyTests.cpp:<line number>
 ...............................................................................
 
-ApproxTests.cpp:<line number>:
+TrickyTests.cpp:<line number>:
 PASSED:
-  REQUIRE( d == approx( 1.23 ) )
+  REQUIRE( Catch::alwaysTrue() )
 with expansion:
-  1.23 == Approx( 1.23 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( d == approx( 1.22 ) )
-with expansion:
-  1.23 == Approx( 1.22 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( d == approx( 1.24 ) )
-with expansion:
-  1.23 == Approx( 1.24 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( d != approx( 1.25 ) )
-with expansion:
-  1.23 != Approx( 1.25 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( approx( d ) == 1.23 )
-with expansion:
-  Approx( 1.23 ) == 1.23
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( approx( d ) == 1.22 )
-with expansion:
-  Approx( 1.23 ) == 1.22
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( approx( d ) == 1.24 )
-with expansion:
-  Approx( 1.23 ) == 1.24
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( approx( d ) != 1.25 )
-with expansion:
-  Approx( 1.23 ) != 1.25
+  true
 
 -------------------------------------------------------------------------------
-Approximate PI
+Assertions then sections
+  A section
 -------------------------------------------------------------------------------
-ApproxTests.cpp:<line number>
+TrickyTests.cpp:<line number>
 ...............................................................................
 
-ApproxTests.cpp:<line number>:
+TrickyTests.cpp:<line number>:
 PASSED:
-  REQUIRE( divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) )
+  REQUIRE( Catch::alwaysTrue() )
 with expansion:
-  3.1428571429 == Approx( 3.141 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) )
-with expansion:
-  3.1428571429 != Approx( 3.141 )
+  true
 
 -------------------------------------------------------------------------------
-A METHOD_AS_TEST_CASE based test run that succeeds
+Assertions then sections
+  A section
+  Another section
 -------------------------------------------------------------------------------
-ClassTests.cpp:<line number>
+TrickyTests.cpp:<line number>
 ...............................................................................
 
-ClassTests.cpp:<line number>:
+TrickyTests.cpp:<line number>:
 PASSED:
-  REQUIRE( s == "hello" )
+  REQUIRE( Catch::alwaysTrue() )
 with expansion:
-  "hello" == "hello"
+  true
 
 -------------------------------------------------------------------------------
-A METHOD_AS_TEST_CASE based test run that fails
+Assertions then sections
 -------------------------------------------------------------------------------
-ClassTests.cpp:<line number>
+TrickyTests.cpp:<line number>
 ...............................................................................
 
-ClassTests.cpp:<line number>: FAILED:
-  REQUIRE( s == "world" )
-with expansion:
-  "hello" == "world"
-
--------------------------------------------------------------------------------
-A TEST_CASE_METHOD based test run that succeeds
--------------------------------------------------------------------------------
-ClassTests.cpp:<line number>
-...............................................................................
-
-ClassTests.cpp:<line number>:
+TrickyTests.cpp:<line number>:
 PASSED:
-  REQUIRE( m_a == 1 )
+  REQUIRE( Catch::alwaysTrue() )
 with expansion:
-  1 == 1
+  true
 
 -------------------------------------------------------------------------------
-A TEST_CASE_METHOD based test run that fails
+Assertions then sections
+  A section
 -------------------------------------------------------------------------------
-ClassTests.cpp:<line number>
+TrickyTests.cpp:<line number>
 ...............................................................................
 
-ClassTests.cpp:<line number>: FAILED:
-  REQUIRE( m_a == 2 )
+TrickyTests.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::alwaysTrue() )
 with expansion:
-  1 == 2
+  true
 
 -------------------------------------------------------------------------------
-Equality checks that should succeed
+Assertions then sections
+  A section
+  Another other section
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::alwaysTrue() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Comparing function pointers
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+  REQUIRE( a )
+with expansion:
+  true
+
+TrickyTests.cpp:<line number>:
+PASSED:
+  REQUIRE( a == &foo )
+with expansion:
+  0x<hex digits> == 0x<hex digits>
+
+-------------------------------------------------------------------------------
+Comparing member function pointers
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+  CHECK( m == &S::f )
+with expansion:
+  0x<hex digits>
+  ==
+  0x<hex digits>
+
+-------------------------------------------------------------------------------
+Comparisons between ints where one side is computed
 -------------------------------------------------------------------------------
 ConditionTests.cpp:<line number>
 ...............................................................................
 
 ConditionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( data.int_seven == 7 )
+  CHECK( 54 == 6*9 )
 with expansion:
-  7 == 7
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.float_nine_point_one == Approx( 9.1f ) )
-with expansion:
-  9.1f == Approx( 9.1000003815 )
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.double_pi == Approx( 3.1415926535 ) )
-with expansion:
-  3.1415926535 == Approx( 3.1415926535 )
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello == "hello" )
-with expansion:
-  "hello" == "hello"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( "hello" == data.str_hello )
-with expansion:
-  "hello" == "hello"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello.size() == 5 )
-with expansion:
-  5 == 5
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( x == Approx( 1.3 ) )
-with expansion:
-  1.3 == Approx( 1.3 )
+  54 == 54
 
 -------------------------------------------------------------------------------
-Equality checks that should fail
--------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
-...............................................................................
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven == 6 )
-with expansion:
-  7 == 6
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven == 8 )
-with expansion:
-  7 == 8
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven == 0 )
-with expansion:
-  7 == 0
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.float_nine_point_one == Approx( 9.11f ) )
-with expansion:
-  9.1f == Approx( 9.1099996567 )
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.float_nine_point_one == Approx( 9.0f ) )
-with expansion:
-  9.1f == Approx( 9.0 )
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.float_nine_point_one == Approx( 1 ) )
-with expansion:
-  9.1f == Approx( 1.0 )
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.float_nine_point_one == Approx( 0 ) )
-with expansion:
-  9.1f == Approx( 0.0 )
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.double_pi == Approx( 3.1415 ) )
-with expansion:
-  3.1415926535 == Approx( 3.1415 )
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.str_hello == "goodbye" )
-with expansion:
-  "hello" == "goodbye"
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.str_hello == "hell" )
-with expansion:
-  "hello" == "hell"
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.str_hello == "hello1" )
-with expansion:
-  "hello" == "hello1"
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.str_hello.size() == 6 )
-with expansion:
-  5 == 6
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( x == Approx( 1.301 ) )
-with expansion:
-  1.3 == Approx( 1.301 )
-
--------------------------------------------------------------------------------
-Inequality checks that should succeed
+Comparisons between unsigned ints and negative signed ints match c++ standard
+behaviour
 -------------------------------------------------------------------------------
 ConditionTests.cpp:<line number>
 ...............................................................................
 
 ConditionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( data.int_seven != 6 )
+  CHECK( ( -1 > 2u ) )
 with expansion:
-  7 != 6
+  true
 
 ConditionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( data.int_seven != 8 )
+  CHECK( -1 > 2u )
 with expansion:
-  7 != 8
+  -1 > 2
 
 ConditionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( data.float_nine_point_one != Approx( 9.11f ) )
+  CHECK( ( 2u < -1 ) )
 with expansion:
-  9.1f != Approx( 9.1099996567 )
+  true
 
 ConditionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( data.float_nine_point_one != Approx( 9.0f ) )
+  CHECK( 2u < -1 )
 with expansion:
-  9.1f != Approx( 9.0 )
+  2 < -1
 
 ConditionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( data.float_nine_point_one != Approx( 1 ) )
+  CHECK( ( minInt > 2u ) )
 with expansion:
-  9.1f != Approx( 1.0 )
+  true
 
 ConditionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( data.float_nine_point_one != Approx( 0 ) )
+  CHECK( minInt > 2u )
 with expansion:
-  9.1f != Approx( 0.0 )
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.double_pi != Approx( 3.1415 ) )
-with expansion:
-  3.1415926535 != Approx( 3.1415 )
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello != "goodbye" )
-with expansion:
-  "hello" != "goodbye"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello != "hell" )
-with expansion:
-  "hello" != "hell"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello != "hello1" )
-with expansion:
-  "hello" != "hello1"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello.size() != 6 )
-with expansion:
-  5 != 6
-
--------------------------------------------------------------------------------
-Inequality checks that should fail
--------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
-...............................................................................
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven != 7 )
-with expansion:
-  7 != 7
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.float_nine_point_one != Approx( 9.1f ) )
-with expansion:
-  9.1f != Approx( 9.1000003815 )
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.double_pi != Approx( 3.1415926535 ) )
-with expansion:
-  3.1415926535 != Approx( 3.1415926535 )
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.str_hello != "hello" )
-with expansion:
-  "hello" != "hello"
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.str_hello.size() != 5 )
-with expansion:
-  5 != 5
-
--------------------------------------------------------------------------------
-Ordering comparison checks that should succeed
--------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
-...............................................................................
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven < 8 )
-with expansion:
-  7 < 8
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven > 6 )
-with expansion:
-  7 > 6
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven > 0 )
-with expansion:
-  7 > 0
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven > -1 )
-with expansion:
-  7 > -1
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven >= 7 )
-with expansion:
-  7 >= 7
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven >= 6 )
-with expansion:
-  7 >= 6
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven <= 7 )
-with expansion:
-  7 <= 7
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven <= 8 )
-with expansion:
-  7 <= 8
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.float_nine_point_one > 9 )
-with expansion:
-  9.1f > 9
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.float_nine_point_one < 10 )
-with expansion:
-  9.1f < 10
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.float_nine_point_one < 9.2 )
-with expansion:
-  9.1f < 9.2
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello <= "hello" )
-with expansion:
-  "hello" <= "hello"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello >= "hello" )
-with expansion:
-  "hello" >= "hello"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello < "hellp" )
-with expansion:
-  "hello" < "hellp"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello < "zebra" )
-with expansion:
-  "hello" < "zebra"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello > "hellm" )
-with expansion:
-  "hello" > "hellm"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello > "a" )
-with expansion:
-  "hello" > "a"
-
--------------------------------------------------------------------------------
-Ordering comparison checks that should fail
--------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
-...............................................................................
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven > 7 )
-with expansion:
-  7 > 7
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven < 7 )
-with expansion:
-  7 < 7
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven > 8 )
-with expansion:
-  7 > 8
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven < 6 )
-with expansion:
-  7 < 6
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven < 0 )
-with expansion:
-  7 < 0
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven < -1 )
-with expansion:
-  7 < -1
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven >= 8 )
-with expansion:
-  7 >= 8
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven <= 6 )
-with expansion:
-  7 <= 6
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.float_nine_point_one < 9 )
-with expansion:
-  9.1f < 9
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.float_nine_point_one > 10 )
-with expansion:
-  9.1f > 10
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.float_nine_point_one > 9.2 )
-with expansion:
-  9.1f > 9.2
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.str_hello > "hello" )
-with expansion:
-  "hello" > "hello"
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.str_hello < "hello" )
-with expansion:
-  "hello" < "hello"
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.str_hello > "hellp" )
-with expansion:
-  "hello" > "hellp"
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.str_hello > "z" )
-with expansion:
-  "hello" > "z"
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.str_hello < "hellm" )
-with expansion:
-  "hello" < "hellm"
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.str_hello < "a" )
-with expansion:
-  "hello" < "a"
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.str_hello >= "z" )
-with expansion:
-  "hello" >= "z"
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.str_hello <= "a" )
-with expansion:
-  "hello" <= "a"
+  -2147483648 > 2
 
 -------------------------------------------------------------------------------
 Comparisons with int literals don't warn when mixing signed/ unsigned
@@ -851,390 +707,15 @@
   4
 
 -------------------------------------------------------------------------------
-comparisons between int variables
+Contains string matcher
 -------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
+MiscTests.cpp:<line number>
 ...............................................................................
 
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( long_var == unsigned_char_var )
+MiscTests.cpp:<line number>: FAILED:
+  CHECK_THAT( testStringForMatching(), Contains( "not there" ) )
 with expansion:
-  1 == 1
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( long_var == unsigned_short_var )
-with expansion:
-  1 == 1
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( long_var == unsigned_int_var )
-with expansion:
-  1 == 1
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( long_var == unsigned_long_var )
-with expansion:
-  1 == 1
-
--------------------------------------------------------------------------------
-comparisons between const int variables
--------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
-...............................................................................
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( unsigned_char_var == 1 )
-with expansion:
-  1 == 1
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( unsigned_short_var == 1 )
-with expansion:
-  1 == 1
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( unsigned_int_var == 1 )
-with expansion:
-  1 == 1
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( unsigned_long_var == 1 )
-with expansion:
-  1 == 1
-
--------------------------------------------------------------------------------
-Comparisons between unsigned ints and negative signed ints match c++ standard
-behaviour
--------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
-...............................................................................
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  CHECK( ( -1 > 2u ) )
-with expansion:
-  true
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  CHECK( -1 > 2u )
-with expansion:
-  -1 > 2
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  CHECK( ( 2u < -1 ) )
-with expansion:
-  true
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  CHECK( 2u < -1 )
-with expansion:
-  2 < -1
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  CHECK( ( minInt > 2u ) )
-with expansion:
-  true
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  CHECK( minInt > 2u )
-with expansion:
-  -2147483648 > 2
-
--------------------------------------------------------------------------------
-Comparisons between ints where one side is computed
--------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
-...............................................................................
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  CHECK( 54 == 6*9 )
-with expansion:
-  54 == 54
-
--------------------------------------------------------------------------------
-Pointers can be compared to null
--------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
-...............................................................................
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( p == nullptr )
-with expansion:
-  NULL == nullptr
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( p == pNULL )
-with expansion:
-  NULL == NULL
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( p != nullptr )
-with expansion:
-  0x<hex digits> != nullptr
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( cp != nullptr )
-with expansion:
-  0x<hex digits> != nullptr
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( cpc != nullptr )
-with expansion:
-  0x<hex digits> != nullptr
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( returnsNull() == nullptr )
-with expansion:
-  {null string} == nullptr
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( returnsConstNull() == nullptr )
-with expansion:
-  {null string} == nullptr
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( nullptr != p )
-with expansion:
-  nullptr != 0x<hex digits>
-
--------------------------------------------------------------------------------
-'Not' checks that should succeed
--------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
-...............................................................................
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( false == false )
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( true == true )
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( !false )
-with expansion:
-  true
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE_FALSE( false )
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( !falseValue )
-with expansion:
-  true
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE_FALSE( falseValue )
-with expansion:
-  !false
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( !(1 == 2) )
-with expansion:
-  true
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE_FALSE( 1 == 2 )
-with expansion:
-  !(1 == 2)
-
--------------------------------------------------------------------------------
-'Not' checks that should fail
--------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
-...............................................................................
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( false != false )
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( true != true )
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( !true )
-with expansion:
-  false
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK_FALSE( true )
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( !trueValue )
-with expansion:
-  false
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK_FALSE( trueValue )
-with expansion:
-  !true
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( !(1 == 1) )
-with expansion:
-  false
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK_FALSE( 1 == 1 )
-with expansion:
-  !(1 == 1)
-
--------------------------------------------------------------------------------
-When checked exceptions are thrown they can be expected or unexpected
--------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
-...............................................................................
-
-ExceptionTests.cpp:<line number>:
-PASSED:
-  REQUIRE_THROWS_AS( thisThrows() )
-
-ExceptionTests.cpp:<line number>:
-PASSED:
-  REQUIRE_NOTHROW( thisDoesntThrow() )
-
-ExceptionTests.cpp:<line number>:
-PASSED:
-  REQUIRE_THROWS( thisThrows() )
-
--------------------------------------------------------------------------------
-Expected exceptions that don't throw or unexpected exceptions fail the test
--------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
-...............................................................................
-
-ExceptionTests.cpp:<line number>: FAILED:
-  CHECK_THROWS_AS( thisThrows() )
-due to unexpected exception with message:
-  expected exception
-
-ExceptionTests.cpp:<line number>: FAILED:
-  CHECK_THROWS_AS( thisDoesntThrow() )
-because no exception was thrown where one was expected:
-
-ExceptionTests.cpp:<line number>: FAILED:
-  CHECK_NOTHROW( thisThrows() )
-due to unexpected exception with message:
-  expected exception
-
--------------------------------------------------------------------------------
-When unchecked exceptions are thrown directly they are always failures
--------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
-...............................................................................
-
-ExceptionTests.cpp:<line number>: FAILED:
-due to unexpected exception with message:
-  unexpected exception
-
--------------------------------------------------------------------------------
-An unchecked exception reports the line of the last assertion
--------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
-...............................................................................
-
-ExceptionTests.cpp:<line number>:
-PASSED:
-  CHECK( 1 == 1 )
-
-ExceptionTests.cpp:<line number>: FAILED:
-  {Unknown expression after the reported line}
-due to unexpected exception with message:
-  unexpected exception
-
--------------------------------------------------------------------------------
-When unchecked exceptions are thrown from sections they are always failures
-  section name
--------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
-...............................................................................
-
-ExceptionTests.cpp:<line number>: FAILED:
-due to unexpected exception with message:
-  unexpected exception
-
--------------------------------------------------------------------------------
-When unchecked exceptions are thrown from functions they are always failures
--------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
-...............................................................................
-
-ExceptionTests.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
--------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
-...............................................................................
-
-ExceptionTests.cpp:<line number>: FAILED:
-  REQUIRE( thisThrows() == 0 )
-due to unexpected exception with message:
-  expected exception
-
--------------------------------------------------------------------------------
-When unchecked exceptions are thrown during a CHECK the test should abort and
-fail
--------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
-...............................................................................
-
-ExceptionTests.cpp:<line number>: FAILED:
-  CHECK( thisThrows() == 0 )
-due to unexpected exception with message:
-  expected exception
-
--------------------------------------------------------------------------------
-Non-std exceptions can be translated
--------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
-...............................................................................
-
-ExceptionTests.cpp:<line number>: FAILED:
-due to unexpected exception with message:
-  custom exception
-
--------------------------------------------------------------------------------
-Custom std-exceptions can be custom translated
--------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
-...............................................................................
-
-ExceptionTests.cpp:<line number>: FAILED:
-due to unexpected exception with message:
-  custom std exception
+  "this string contains 'abc' as a substring" contains: "not there"
 
 -------------------------------------------------------------------------------
 Custom exceptions can be translated when testing for nothrow
@@ -1259,24 +740,192 @@
   custom exception - not std
 
 -------------------------------------------------------------------------------
-Unexpected exceptions can be translated
+Custom std-exceptions can be custom translated
 -------------------------------------------------------------------------------
 ExceptionTests.cpp:<line number>
 ...............................................................................
 
 ExceptionTests.cpp:<line number>: FAILED:
 due to unexpected exception with message:
-  3.14
+  custom std exception
 
 -------------------------------------------------------------------------------
-NotImplemented exception
+Demonstrate that a non-const == is not used
 -------------------------------------------------------------------------------
-ExceptionTests.cpp:<line number>
+TrickyTests.cpp:<line number>
 ...............................................................................
 
-ExceptionTests.cpp:<line number>:
+TrickyTests.cpp:<line number>:
 PASSED:
-  REQUIRE_THROWS( thisFunctionNotImplemented( 7 ) )
+  REQUIRE( t == 1u )
+with expansion:
+  {?} == 1
+
+-------------------------------------------------------------------------------
+EndsWith string matcher
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECK_THAT( testStringForMatching(), EndsWith( "this" ) )
+with expansion:
+  "this string contains 'abc' as a substring" ends with: "this"
+
+-------------------------------------------------------------------------------
+Equality checks that should fail
+-------------------------------------------------------------------------------
+ConditionTests.cpp:<line number>
+...............................................................................
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.int_seven == 6 )
+with expansion:
+  7 == 6
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.int_seven == 8 )
+with expansion:
+  7 == 8
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.int_seven == 0 )
+with expansion:
+  7 == 0
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.float_nine_point_one == Approx( 9.11f ) )
+with expansion:
+  9.1f == Approx( 9.1099996567 )
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.float_nine_point_one == Approx( 9.0f ) )
+with expansion:
+  9.1f == Approx( 9.0 )
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.float_nine_point_one == Approx( 1 ) )
+with expansion:
+  9.1f == Approx( 1.0 )
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.float_nine_point_one == Approx( 0 ) )
+with expansion:
+  9.1f == Approx( 0.0 )
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.double_pi == Approx( 3.1415 ) )
+with expansion:
+  3.1415926535 == Approx( 3.1415 )
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.str_hello == "goodbye" )
+with expansion:
+  "hello" == "goodbye"
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.str_hello == "hell" )
+with expansion:
+  "hello" == "hell"
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.str_hello == "hello1" )
+with expansion:
+  "hello" == "hello1"
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.str_hello.size() == 6 )
+with expansion:
+  5 == 6
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( x == Approx( 1.301 ) )
+with expansion:
+  1.3 == Approx( 1.301 )
+
+-------------------------------------------------------------------------------
+Equality checks that should succeed
+-------------------------------------------------------------------------------
+ConditionTests.cpp:<line number>
+...............................................................................
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.int_seven == 7 )
+with expansion:
+  7 == 7
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.float_nine_point_one == Approx( 9.1f ) )
+with expansion:
+  9.1f == Approx( 9.1000003815 )
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.double_pi == Approx( 3.1415926535 ) )
+with expansion:
+  3.1415926535 == Approx( 3.1415926535 )
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.str_hello == "hello" )
+with expansion:
+  "hello" == "hello"
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( "hello" == data.str_hello )
+with expansion:
+  "hello" == "hello"
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.str_hello.size() == 5 )
+with expansion:
+  5 == 5
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( x == Approx( 1.3 ) )
+with expansion:
+  1.3 == Approx( 1.3 )
+
+-------------------------------------------------------------------------------
+Equals
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.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"
+
+-------------------------------------------------------------------------------
+Equals string matcher
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECK_THAT( testStringForMatching(), Equals( "something else" ) )
+with expansion:
+  "this string contains 'abc' as a substring" equals: "something else"
+
+-------------------------------------------------------------------------------
+Equals string matcher, with NULL
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE_THAT( "", Equals(nullptr) )
+with expansion:
+  "" equals: ""
 
 -------------------------------------------------------------------------------
 Exception messages can be tested for
@@ -1324,1315 +973,78 @@
   REQUIRE_THROWS_WITH( thisThrows(), Contains( "exCept", Catch::CaseSensitive::No ) )
 
 -------------------------------------------------------------------------------
-Mismatching exception messages failing the test
+Expected exceptions that don't throw or unexpected exceptions fail the test
 -------------------------------------------------------------------------------
 ExceptionTests.cpp:<line number>
 ...............................................................................
 
-ExceptionTests.cpp:<line number>:
-PASSED:
-  REQUIRE_THROWS_WITH( thisThrows(), "expected exception" )
+ExceptionTests.cpp:<line number>: FAILED:
+  CHECK_THROWS_AS( thisThrows() )
+due to unexpected exception with message:
+  expected exception
 
 ExceptionTests.cpp:<line number>: FAILED:
-  REQUIRE_THROWS_WITH( thisThrows(), "should fail" )
-with expansion:
+  CHECK_THROWS_AS( thisDoesntThrow() )
+because no exception was thrown where one was expected:
+
+ExceptionTests.cpp:<line number>: FAILED:
+  CHECK_NOTHROW( thisThrows() )
+due to unexpected exception with message:
   expected exception
 
 -------------------------------------------------------------------------------
-Generators over two ranges
+FAIL aborts the test
 -------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
+MessageTests.cpp:<line number>
 ...............................................................................
 
-GeneratorTests.cpp:<line number>:
+MessageTests.cpp:<line number>: FAILED:
+explicitly with message:
+  This is a failure
+
+-------------------------------------------------------------------------------
+FAIL does not require an argument
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+MessageTests.cpp:<line number>: FAILED:
+
+-------------------------------------------------------------------------------
+Factorials are computed
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
 PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+  REQUIRE( Factorial(0) == 1 )
+with expansion:
+  1 == 1
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( Factorial(1) == 1 )
+with expansion:
+  1 == 1
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( Factorial(2) == 2 )
 with expansion:
   2 == 2
 
-GeneratorTests.cpp:<line number>:
+MiscTests.cpp:<line number>:
 PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  200 == 200
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  4 == 4
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  200 == 200
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+  REQUIRE( Factorial(3) == 6 )
 with expansion:
   6 == 6
 
-GeneratorTests.cpp:<line number>:
+MiscTests.cpp:<line number>:
 PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+  REQUIRE( Factorial(10) == 3628800 )
 with expansion:
-  200 == 200
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  8 == 8
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  200 == 200
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  10 == 10
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  200 == 200
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  30 == 30
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  200 == 200
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  40 == 40
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  200 == 200
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  42 == 42
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  200 == 200
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  72 == 72
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  200 == 200
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  2 == 2
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  202 == 202
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  4 == 4
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  202 == 202
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  6 == 6
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  202 == 202
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  8 == 8
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  202 == 202
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  10 == 10
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  202 == 202
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  30 == 30
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  202 == 202
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  40 == 40
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  202 == 202
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  42 == 42
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  202 == 202
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  72 == 72
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  202 == 202
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  2 == 2
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  204 == 204
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  4 == 4
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  204 == 204
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  6 == 6
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  204 == 204
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  8 == 8
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  204 == 204
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  10 == 10
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  204 == 204
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  30 == 30
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  204 == 204
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  40 == 40
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  204 == 204
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  42 == 42
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  204 == 204
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  72 == 72
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  204 == 204
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  2 == 2
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  206 == 206
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  4 == 4
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  206 == 206
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  6 == 6
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  206 == 206
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  8 == 8
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  206 == 206
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  10 == 10
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  206 == 206
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  30 == 30
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  206 == 206
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  40 == 40
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  206 == 206
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  42 == 42
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  206 == 206
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  72 == 72
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  206 == 206
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  2 == 2
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  208 == 208
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  4 == 4
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  208 == 208
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  6 == 6
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  208 == 208
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  8 == 8
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  208 == 208
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  10 == 10
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  208 == 208
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  30 == 30
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  208 == 208
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  40 == 40
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  208 == 208
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  42 == 42
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  208 == 208
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  72 == 72
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  208 == 208
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  2 == 2
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  210 == 210
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  4 == 4
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  210 == 210
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  6 == 6
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  210 == 210
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  8 == 8
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  210 == 210
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  10 == 10
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  210 == 210
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  30 == 30
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  210 == 210
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  40 == 40
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  210 == 210
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  42 == 42
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  210 == 210
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  72 == 72
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  210 == 210
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  2 == 2
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  212 == 212
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  4 == 4
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  212 == 212
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  6 == 6
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  212 == 212
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  8 == 8
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  212 == 212
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  10 == 10
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  212 == 212
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  30 == 30
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  212 == 212
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  40 == 40
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  212 == 212
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  42 == 42
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  212 == 212
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  72 == 72
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  212 == 212
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  2 == 2
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  214 == 214
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  4 == 4
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  214 == 214
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  6 == 6
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  214 == 214
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  8 == 8
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  214 == 214
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  10 == 10
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  214 == 214
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  30 == 30
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  214 == 214
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  40 == 40
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  214 == 214
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  42 == 42
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  214 == 214
-
--------------------------------------------------------------------------------
-Generators over two ranges
--------------------------------------------------------------------------------
-GeneratorTests.cpp:<line number>
-...............................................................................
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
-with expansion:
-  72 == 72
-
-GeneratorTests.cpp:<line number>:
-PASSED:
-  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
-with expansion:
-  214 == 214
+  3628800 (0x<hex digits>) == 3628800 (0x<hex digits>)
 
 -------------------------------------------------------------------------------
 Generator over a range of pairs
@@ -2659,6 +1071,1302 @@
   2 == 2
 
 -------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  2 == 2
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  4 == 4
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  6 == 6
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  8 == 8
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  10 == 10
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  30 == 30
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  40 == 40
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  42 == 42
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  72 == 72
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  2 == 2
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  4 == 4
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  6 == 6
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  8 == 8
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  10 == 10
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  30 == 30
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  40 == 40
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  42 == 42
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  72 == 72
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  2 == 2
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  4 == 4
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  6 == 6
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  8 == 8
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  10 == 10
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  30 == 30
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  40 == 40
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  42 == 42
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  72 == 72
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  2 == 2
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  4 == 4
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  6 == 6
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  8 == 8
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  10 == 10
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  30 == 30
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  40 == 40
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  42 == 42
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  72 == 72
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  2 == 2
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  4 == 4
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  6 == 6
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  8 == 8
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  10 == 10
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  30 == 30
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  40 == 40
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  42 == 42
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  72 == 72
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  2 == 2
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  4 == 4
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  6 == 6
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  8 == 8
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  10 == 10
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  30 == 30
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  40 == 40
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  42 == 42
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  72 == 72
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  2 == 2
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  4 == 4
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  6 == 6
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  8 == 8
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  10 == 10
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  30 == 30
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  40 == 40
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  42 == 42
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  72 == 72
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  2 == 2
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  214 == 214
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  4 == 4
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  214 == 214
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  6 == 6
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  214 == 214
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  8 == 8
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  214 == 214
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  10 == 10
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  214 == 214
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  30 == 30
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  214 == 214
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  40 == 40
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  214 == 214
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  42 == 42
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  214 == 214
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+  72 == 72
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+  CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+  214 == 214
+
+-------------------------------------------------------------------------------
 INFO and WARN do not abort tests
 -------------------------------------------------------------------------------
 MessageTests.cpp:<line number>
@@ -2670,17 +2378,6 @@
   this is a warning
 
 -------------------------------------------------------------------------------
-SUCCEED counts as a test pass
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>:
-PASSED:
-with message:
-  this is a success
-
--------------------------------------------------------------------------------
 INFO gets logged on failure
 -------------------------------------------------------------------------------
 MessageTests.cpp:<line number>
@@ -2731,1726 +2428,107 @@
   but not this
 
 -------------------------------------------------------------------------------
-FAIL aborts the test
+Inequality checks that should fail
 -------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
+ConditionTests.cpp:<line number>
 ...............................................................................
 
-MessageTests.cpp:<line number>: FAILED:
-explicitly with message:
-  This is a failure
-
--------------------------------------------------------------------------------
-FAIL does not require an argument
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>: FAILED:
-
--------------------------------------------------------------------------------
-SUCCESS does not require an argument
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>:
-PASSED:
-
--------------------------------------------------------------------------------
-Output from all sections is reported
-  one
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>: FAILED:
-explicitly with message:
-  Message from section one
-
--------------------------------------------------------------------------------
-Output from all sections is reported
-  two
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>: FAILED:
-explicitly with message:
-  Message from section two
-
-Message from section one
--------------------------------------------------------------------------------
-Standard output from all sections is reported
-  one
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-
-No assertions in section 'one'
-
-Message from section two
--------------------------------------------------------------------------------
-Standard output from all sections is reported
-  two
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-
-No assertions in section 'two'
-
--------------------------------------------------------------------------------
-SCOPED_INFO is reset for each loop
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>:
-PASSED:
-  REQUIRE( i < 10 )
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.int_seven != 7 )
 with expansion:
-  0 < 10
-with messages:
-  current counter 0
-  i := 0
+  7 != 7
 
-MessageTests.cpp:<line number>:
-PASSED:
-  REQUIRE( i < 10 )
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.float_nine_point_one != Approx( 9.1f ) )
 with expansion:
-  1 < 10
-with messages:
-  current counter 1
-  i := 1
-
-MessageTests.cpp:<line number>:
-PASSED:
-  REQUIRE( i < 10 )
-with expansion:
-  2 < 10
-with messages:
-  current counter 2
-  i := 2
-
-MessageTests.cpp:<line number>:
-PASSED:
-  REQUIRE( i < 10 )
-with expansion:
-  3 < 10
-with messages:
-  current counter 3
-  i := 3
-
-MessageTests.cpp:<line number>:
-PASSED:
-  REQUIRE( i < 10 )
-with expansion:
-  4 < 10
-with messages:
-  current counter 4
-  i := 4
-
-MessageTests.cpp:<line number>:
-PASSED:
-  REQUIRE( i < 10 )
-with expansion:
-  5 < 10
-with messages:
-  current counter 5
-  i := 5
-
-MessageTests.cpp:<line number>:
-PASSED:
-  REQUIRE( i < 10 )
-with expansion:
-  6 < 10
-with messages:
-  current counter 6
-  i := 6
-
-MessageTests.cpp:<line number>:
-PASSED:
-  REQUIRE( i < 10 )
-with expansion:
-  7 < 10
-with messages:
-  current counter 7
-  i := 7
+  9.1f != Approx( 9.1000003815 )
 
-MessageTests.cpp:<line number>:
-PASSED:
-  REQUIRE( i < 10 )
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.double_pi != Approx( 3.1415926535 ) )
 with expansion:
-  8 < 10
-with messages:
-  current counter 8
-  i := 8
+  3.1415926535 != Approx( 3.1415926535 )
 
-MessageTests.cpp:<line number>:
-PASSED:
-  REQUIRE( i < 10 )
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.str_hello != "hello" )
 with expansion:
-  9 < 10
-with messages:
-  current counter 9
-  i := 9
+  "hello" != "hello"
 
-MessageTests.cpp:<line number>: FAILED:
-  REQUIRE( i < 10 )
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.str_hello.size() != 5 )
 with expansion:
-  10 < 10
-with messages:
-  current counter 10
-  i := 10
+  5 != 5
 
 -------------------------------------------------------------------------------
-The NO_FAIL macro reports a failure but does not fail the test
+Inequality checks that should succeed
 -------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
+ConditionTests.cpp:<line number>
 ...............................................................................
 
-MessageTests.cpp:<line number>:
-FAILED - but was ok:
-  CHECK_NOFAIL( 1 == 2 )
-
--------------------------------------------------------------------------------
-just failure
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>: FAILED:
-explicitly with message:
-  Previous info should not be seen
-
--------------------------------------------------------------------------------
-sends information to INFO
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>: FAILED:
-  REQUIRE( false )
-with messages:
-  hi
-  i := 7
-
--------------------------------------------------------------------------------
-Pointers can be converted to strings
--------------------------------------------------------------------------------
-MessageTests.cpp:<line number>
-...............................................................................
-
-MessageTests.cpp:<line number>:
-warning:
-  actual address of p: 0x<hex digits>
-
-MessageTests.cpp:<line number>:
-warning:
-  toString(p): 0x<hex digits>
-
--------------------------------------------------------------------------------
-random SECTION tests
-  s1
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
+ConditionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( a != b )
+  REQUIRE( data.int_seven != 6 )
 with expansion:
-  1 != 2
+  7 != 6
 
-MiscTests.cpp:<line number>:
+ConditionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( b != a )
+  REQUIRE( data.int_seven != 8 )
 with expansion:
-  2 != 1
+  7 != 8
 
--------------------------------------------------------------------------------
-random SECTION tests
-  s2
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
+ConditionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( a != b )
+  REQUIRE( data.float_nine_point_one != Approx( 9.11f ) )
 with expansion:
-  1 != 2
-
--------------------------------------------------------------------------------
-nested SECTION tests
-  s1
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
+  9.1f != Approx( 9.1099996567 )
 
-MiscTests.cpp:<line number>:
+ConditionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( a != b )
+  REQUIRE( data.float_nine_point_one != Approx( 9.0f ) )
 with expansion:
-  1 != 2
+  9.1f != Approx( 9.0 )
 
-MiscTests.cpp:<line number>:
+ConditionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( b != a )
+  REQUIRE( data.float_nine_point_one != Approx( 1 ) )
 with expansion:
-  2 != 1
+  9.1f != Approx( 1.0 )
 
--------------------------------------------------------------------------------
-nested SECTION tests
-  s1
-  s2
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
+ConditionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( a != b )
+  REQUIRE( data.float_nine_point_one != Approx( 0 ) )
 with expansion:
-  1 != 2
+  9.1f != Approx( 0.0 )
 
--------------------------------------------------------------------------------
-more nested SECTION tests
-  s1
-  s2
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  REQUIRE( a == b )
-with expansion:
-  1 == 2
-
--------------------------------------------------------------------------------
-more nested SECTION tests
-  s1
-  s3
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
+ConditionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( a != b )
+  REQUIRE( data.double_pi != Approx( 3.1415 ) )
 with expansion:
-  1 != 2
+  3.1415926535 != Approx( 3.1415 )
 
--------------------------------------------------------------------------------
-more nested SECTION tests
-  s1
-  s4
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
+ConditionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( a < b )
+  REQUIRE( data.str_hello != "goodbye" )
 with expansion:
-  1 < 2
+  "hello" != "goodbye"
 
--------------------------------------------------------------------------------
-even more nested SECTION tests
-  c
-  d (leaf)
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
+ConditionTests.cpp:<line number>:
 PASSED:
-
--------------------------------------------------------------------------------
-even more nested SECTION tests
-  c
-  e (leaf)
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-
--------------------------------------------------------------------------------
-even more nested SECTION tests
-  f (leaf)
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-
--------------------------------------------------------------------------------
-looped SECTION tests
-  s1
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK( b > a )
+  REQUIRE( data.str_hello != "hell" )
 with expansion:
-  0 > 1
-
--------------------------------------------------------------------------------
-looped tests
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK( ( fib[i] % 2 ) == 0 )
-with expansion:
-  1 == 0
-with message:
-  Testing if fib[0] (1) is even
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK( ( fib[i] % 2 ) == 0 )
-with expansion:
-  1 == 0
-with message:
-  Testing if fib[1] (1) is even
+  "hello" != "hell"
 
-MiscTests.cpp:<line number>:
+ConditionTests.cpp:<line number>:
 PASSED:
-  CHECK( ( fib[i] % 2 ) == 0 )
+  REQUIRE( data.str_hello != "hello1" )
 with expansion:
-  0 == 0
-with message:
-  Testing if fib[2] (2) is even
+  "hello" != "hello1"
 
-MiscTests.cpp:<line number>: FAILED:
-  CHECK( ( fib[i] % 2 ) == 0 )
-with expansion:
-  1 == 0
-with message:
-  Testing if fib[3] (3) is even
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK( ( fib[i] % 2 ) == 0 )
-with expansion:
-  1 == 0
-with message:
-  Testing if fib[4] (5) is even
-
-MiscTests.cpp:<line number>:
+ConditionTests.cpp:<line number>:
 PASSED:
-  CHECK( ( fib[i] % 2 ) == 0 )
+  REQUIRE( data.str_hello.size() != 6 )
 with expansion:
-  0 == 0
-with message:
-  Testing if fib[5] (8) is even
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK( ( fib[i] % 2 ) == 0 )
-with expansion:
-  1 == 0
-with message:
-  Testing if fib[6] (13) is even
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK( ( fib[i] % 2 ) == 0 )
-with expansion:
-  1 == 0
-with message:
-  Testing if fib[7] (21) is even
-
-A string sent directly to stdout
-A string sent directly to stderr
--------------------------------------------------------------------------------
-null strings
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( makeString( false ) != static_cast<char*>(nullptr) )
-with expansion:
-  "valid string" != {null string}
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( makeString( true ) == static_cast<char*>(nullptr) )
-with expansion:
-  {null string} == {null string}
-
--------------------------------------------------------------------------------
-checkedIf
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  CHECKED_IF( flag )
-with expansion:
-  true
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCheckedIf( true ) )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-checkedIf, failing
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECKED_IF( flag )
-with expansion:
-  false
-
-MiscTests.cpp:<line number>: FAILED:
-  REQUIRE( testCheckedIf( false ) )
-with expansion:
-  false
-
--------------------------------------------------------------------------------
-checkedElse
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  CHECKED_ELSE( flag )
-with expansion:
-  true
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCheckedElse( true ) )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-checkedElse, failing
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECKED_ELSE( flag )
-with expansion:
-  false
-
-MiscTests.cpp:<line number>: FAILED:
-  REQUIRE( testCheckedElse( false ) )
-with expansion:
-  false
-
--------------------------------------------------------------------------------
-xmlentitycheck
-  embedded xml
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-
--------------------------------------------------------------------------------
-xmlentitycheck
-  encoded chars
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-
--------------------------------------------------------------------------------
-send a single char to INFO
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  REQUIRE( false )
-with message:
-  3
-
--------------------------------------------------------------------------------
-atomic if
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( x == 0 )
-with expansion:
-  0 == 0
-
--------------------------------------------------------------------------------
-String matchers
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE_THAT( testStringForMatching(), Contains( "string" ) )
-with expansion:
-  "this string contains 'abc' as a substring" contains: "string"
-
-MiscTests.cpp:<line number>:
-PASSED:
-  CHECK_THAT( testStringForMatching(), Contains( "abc" ) )
-with expansion:
-  "this string contains 'abc' as a substring" contains: "abc"
-
-MiscTests.cpp:<line number>:
-PASSED:
-  CHECK_THAT( testStringForMatching(), StartsWith( "this" ) )
-with expansion:
-  "this string contains 'abc' as a substring" starts with: "this"
-
-MiscTests.cpp:<line number>:
-PASSED:
-  CHECK_THAT( testStringForMatching(), EndsWith( "substring" ) )
-with expansion:
-  "this string contains 'abc' as a substring" ends with: "substring"
-
--------------------------------------------------------------------------------
-Contains string matcher
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK_THAT( testStringForMatching(), Contains( "not there" ) )
-with expansion:
-  "this string contains 'abc' as a substring" contains: "not there"
-
--------------------------------------------------------------------------------
-StartsWith string matcher
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK_THAT( testStringForMatching(), StartsWith( "string" ) )
-with expansion:
-  "this string contains 'abc' as a substring" starts with: "string"
-
--------------------------------------------------------------------------------
-EndsWith string matcher
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK_THAT( testStringForMatching(), EndsWith( "this" ) )
-with expansion:
-  "this string contains 'abc' as a substring" ends with: "this"
-
--------------------------------------------------------------------------------
-Equals string matcher
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK_THAT( testStringForMatching(), Equals( "something else" ) )
-with expansion:
-  "this string contains 'abc' as a substring" equals: "something else"
-
--------------------------------------------------------------------------------
-Equals string matcher, with NULL
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE_THAT( "", Equals(nullptr) )
-with expansion:
-  "" equals: ""
-
--------------------------------------------------------------------------------
-AllOf matcher
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  CHECK_THAT( testStringForMatching(), AllOf( Catch::Contains( "string" ), Catch::Contains( "abc" ) ) )
-with expansion:
-  "this string contains 'abc' as a substring" ( contains: "string" and
-  contains: "abc" )
-
--------------------------------------------------------------------------------
-AnyOf matcher
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  CHECK_THAT( testStringForMatching(), AnyOf( Catch::Contains( "string" ), Catch::Contains( "not there" ) ) )
-with expansion:
-  "this string contains 'abc' as a substring" ( contains: "string" or contains:
-  "not there" )
-
-MiscTests.cpp:<line number>:
-PASSED:
-  CHECK_THAT( testStringForMatching(), AnyOf( Catch::Contains( "not there" ), Catch::Contains( "string" ) ) )
-with expansion:
-  "this string contains 'abc' as a substring" ( contains: "not there" or
-  contains: "string" )
-
--------------------------------------------------------------------------------
-Equals
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.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 can be (AllOf) composed with the && operator
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.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
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.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" )
-
-MiscTests.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 ||
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.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
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.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
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.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
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK_THAT( testStringForMatching(), !Contains( "substring" ) )
-with expansion:
-  "this string contains 'abc' as a substring" not contains: "substring"
-
--------------------------------------------------------------------------------
-Factorials are computed
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( Factorial(0) == 1 )
-with expansion:
-  1 == 1
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( Factorial(1) == 1 )
-with expansion:
-  1 == 1
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( Factorial(2) == 2 )
-with expansion:
-  2 == 2
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( Factorial(3) == 6 )
-with expansion:
-  6 == 6
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( Factorial(10) == 3628800 )
-with expansion:
-  3628800 (0x<hex digits>) == 3628800 (0x<hex digits>)
-
--------------------------------------------------------------------------------
-Nice descriptive name
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-warning:
-  This one ran
-
--------------------------------------------------------------------------------
-vectors can be sized and resized
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( v.size() == 5 )
-with expansion:
-  5 == 5
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( v.capacity() >= 5 )
-with expansion:
-  5 >= 5
-
--------------------------------------------------------------------------------
-vectors can be sized and resized
-  resizing bigger changes size and capacity
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( v.size() == 10 )
-with expansion:
-  10 == 10
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( v.capacity() >= 10 )
-with expansion:
-  10 >= 10
-
--------------------------------------------------------------------------------
-vectors can be sized and resized
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( v.size() == 5 )
-with expansion:
-  5 == 5
-
-MiscTests.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
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( v.size() == 0 )
-with expansion:
-  0 == 0
-
-MiscTests.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
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( v.capacity() == 0 )
-with expansion:
-  0 == 0
-
--------------------------------------------------------------------------------
-vectors can be sized and resized
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( v.size() == 5 )
-with expansion:
-  5 == 5
-
-MiscTests.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
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( v.size() == 5 )
-with expansion:
-  5 == 5
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( v.capacity() >= 10 )
-with expansion:
-  10 >= 10
-
--------------------------------------------------------------------------------
-vectors can be sized and resized
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( v.size() == 5 )
-with expansion:
-  5 == 5
-
-MiscTests.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
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( v.size() == 5 )
-with expansion:
-  5 == 5
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( v.capacity() >= 5 )
-with expansion:
-  5 >= 5
-
--------------------------------------------------------------------------------
-A couple of nested sections followed by a failure
-  Outer
-  Inner
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-with message:
-  that's not flying - that's failing in style
-
--------------------------------------------------------------------------------
-A couple of nested sections followed by a failure
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-explicitly with message:
-  to infinity and beyond
-
--------------------------------------------------------------------------------
-not allowed
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-
--------------------------------------------------------------------------------
-Tabs and newlines show in output
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>: FAILED:
-  CHECK( s1 == s2 )
-with expansion:
-  "if ($b == 10) {
-  		$a= 20;
-  }"
-  ==
-  "if ($b == 10) {
-  $a = 20;
-  }
-  "
-
--------------------------------------------------------------------------------
-toString on const wchar_t const pointer returns the string contents
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  CHECK( result == "\"wide load\"" )
-with expansion:
-  ""wide load"" == ""wide load""
-
--------------------------------------------------------------------------------
-toString on const wchar_t pointer returns the string contents
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  CHECK( result == "\"wide load\"" )
-with expansion:
-  ""wide load"" == ""wide load""
-
--------------------------------------------------------------------------------
-toString on wchar_t const pointer returns the string contents
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  CHECK( result == "\"wide load\"" )
-with expansion:
-  ""wide load"" == ""wide load""
-
--------------------------------------------------------------------------------
-toString on wchar_t returns the string contents
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  CHECK( result == "\"wide load\"" )
-with expansion:
-  ""wide load"" == ""wide load""
-
--------------------------------------------------------------------------------
-XmlEncode
-  normal string
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( encode( "normal string" ) == "normal string" )
-with expansion:
-  "normal string" == "normal string"
-
--------------------------------------------------------------------------------
-XmlEncode
-  empty string
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( encode( "" ) == "" )
-with expansion:
-  "" == ""
-
--------------------------------------------------------------------------------
-XmlEncode
-  string with ampersand
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( encode( "smith & jones" ) == "smith &amp; jones" )
-with expansion:
-  "smith &amp; jones" == "smith &amp; jones"
-
--------------------------------------------------------------------------------
-XmlEncode
-  string with less-than
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( encode( "smith < jones" ) == "smith &lt; jones" )
-with expansion:
-  "smith &lt; jones" == "smith &lt; jones"
-
--------------------------------------------------------------------------------
-XmlEncode
-  string with greater-than
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( encode( "smith > jones" ) == "smith > jones" )
-with expansion:
-  "smith > jones" == "smith > jones"
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( encode( "smith ]]> jones" ) == "smith ]]&gt; jones" )
-with expansion:
-  "smith ]]&gt; jones"
-  ==
-  "smith ]]&gt; jones"
-
--------------------------------------------------------------------------------
-XmlEncode
-  string with quotes
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( encode( stringWithQuotes ) == stringWithQuotes )
-with expansion:
-  "don't "quote" me on that"
-  ==
-  "don't "quote" me on that"
-
-MiscTests.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)
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( encode( "[\x01]" ) == "[&#x01;]" )
-with expansion:
-  "[&#x01;]" == "[&#x01;]"
-
--------------------------------------------------------------------------------
-XmlEncode
-  string with control char (x7F)
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( encode( "[\x7F]" ) == "[&#x7F;]" )
-with expansion:
-  "[&#x7F;]" == "[&#x7F;]"
-
--------------------------------------------------------------------------------
-long long
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-  REQUIRE( l == std::numeric_limits<long long>::max() )
-with expansion:
-  9223372036854775807 (0x<hex digits>)
-  ==
-  9223372036854775807 (0x<hex digits>)
-
--------------------------------------------------------------------------------
-This test 'should' fail but doesn't
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-with message:
-  oops!
-
--------------------------------------------------------------------------------
-# A test name that starts with a #
--------------------------------------------------------------------------------
-MiscTests.cpp:<line number>
-...............................................................................
-
-MiscTests.cpp:<line number>:
-PASSED:
-with message:
-  yay
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  default - no arguments
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( config.shouldDebugBreak == false )
-with expansion:
-  false == false
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( config.abortAfter == -1 )
-with expansion:
-  -1 == -1
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( config.noThrow == false )
-with expansion:
-  false == false
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( config.reporterNames.empty() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  test lists
-  1 test
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( cfg.testSpec().matches( fakeTestCase( "notIncluded" ) ) == false )
-with expansion:
-  false == false
-
-TestMain.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:
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false )
-with expansion:
-  false == false
-
-TestMain.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 ~
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false )
-with expansion:
-  false == false
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) ) )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  reporter
-  -r/console
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( config.reporterNames[0] == "console" )
-with expansion:
-  "console" == "console"
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  reporter
-  -r/xml
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.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
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( config.reporterNames.size() == 2 )
-with expansion:
-  2 == 2
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( config.reporterNames[0] == "xml" )
-with expansion:
-  "xml" == "xml"
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( config.reporterNames[1] == "junit" )
-with expansion:
-  "junit" == "junit"
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  reporter
-  --reporter/junit
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( config.reporterNames[0] == "junit" )
-with expansion:
-  "junit" == "junit"
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  debugger
-  -b
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( config.shouldDebugBreak == true )
-with expansion:
-  true == true
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  debugger
-  --break
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( config.shouldDebugBreak )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  abort
-  -a aborts after first failure
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.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
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( config.abortAfter == 2 )
-with expansion:
-  2 == 2
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  abort
-  -x must be greater than zero
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE_THAT( parseIntoConfigAndReturnError( argv, config ), Contains( "greater than zero" ) )
-with expansion:
-  "Value after -x or --abortAfter must be greater than zero
-  - while parsing: (-x, --abortx <no. failures>)" contains: "greater than zero"
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  abort
-  -x must be numeric
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE_THAT( parseIntoConfigAndReturnError( argv, config ), Contains( "-x" ) )
-with expansion:
-  "Unable to convert oops to destination type
-  - while parsing: (-x, --abortx <no. failures>)" contains: "-x"
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  nothrow
-  -e
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( config.noThrow == true )
-with expansion:
-  true == true
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  nothrow
-  --nothrow
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( config.noThrow == true )
-with expansion:
-  true == true
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  output filename
-  -o filename
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.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
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.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
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( config.abortAfter == 1 )
-with expansion:
-  1 == 1
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( config.shouldDebugBreak )
-with expansion:
-  true
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( config.noThrow == true )
-with expansion:
-  true == true
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  use-colour
-  without option
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( config.useColour == UseColour::Auto )
-with expansion:
-  0 == 0
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  use-colour
-  auto
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( config.useColour == UseColour::Auto )
-with expansion:
-  0 == 0
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  use-colour
-  yes
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( config.useColour == UseColour::Yes )
-with expansion:
-  1 == 1
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  use-colour
-  no
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE( config.useColour == UseColour::No )
-with expansion:
-  2 == 2
-
--------------------------------------------------------------------------------
-Process can be configured on command line
-  use-colour
-  error
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  REQUIRE_THROWS_WITH( parseIntoConfig( argv, config ), Contains( "colour mode must be one of" ) )
+  5 != 6
 
 -------------------------------------------------------------------------------
 Long strings can be wrapped
@@ -4906,163 +2984,6 @@
           six"
 
 -------------------------------------------------------------------------------
-replaceInPlace
-  replace single char
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( replaceInPlace( letters, "b", "z" ) )
-with expansion:
-  true
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( letters == "azcdefcg" )
-with expansion:
-  "azcdefcg" == "azcdefcg"
-
--------------------------------------------------------------------------------
-replaceInPlace
-  replace two chars
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( replaceInPlace( letters, "c", "z" ) )
-with expansion:
-  true
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( letters == "abzdefzg" )
-with expansion:
-  "abzdefzg" == "abzdefzg"
-
--------------------------------------------------------------------------------
-replaceInPlace
-  replace first char
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( replaceInPlace( letters, "a", "z" ) )
-with expansion:
-  true
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( letters == "zbcdefcg" )
-with expansion:
-  "zbcdefcg" == "zbcdefcg"
-
--------------------------------------------------------------------------------
-replaceInPlace
-  replace last char
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( replaceInPlace( letters, "g", "z" ) )
-with expansion:
-  true
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( letters == "abcdefcz" )
-with expansion:
-  "abcdefcz" == "abcdefcz"
-
--------------------------------------------------------------------------------
-replaceInPlace
-  replace all chars
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( replaceInPlace( letters, letters, "replaced" ) )
-with expansion:
-  true
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( letters == "replaced" )
-with expansion:
-  "replaced" == "replaced"
-
--------------------------------------------------------------------------------
-replaceInPlace
-  replace no chars
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK_FALSE( replaceInPlace( letters, "x", "z" ) )
-with expansion:
-  !false
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( letters == letters )
-with expansion:
-  "abcdefcg" == "abcdefcg"
-
--------------------------------------------------------------------------------
-replaceInPlace
-  escape '
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( replaceInPlace( s, "'", "|'" ) )
-with expansion:
-  true
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( s == "didn|'t" )
-with expansion:
-  "didn|'t" == "didn|'t"
-
-hello
-hello
--------------------------------------------------------------------------------
-Text can be formatted using the Text class
--------------------------------------------------------------------------------
-TestMain.cpp:<line number>
-...............................................................................
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( Text( "hi there" ).toString() == "hi there" )
-with expansion:
-  "hi there" == "hi there"
-
-TestMain.cpp:<line number>:
-PASSED:
-  CHECK( Text( "hi there", narrow ).toString() == "hi\nthere" )
-with expansion:
-  "hi
-  there"
-  ==
-  "hi
-  there"
-
--------------------------------------------------------------------------------
 Long text is truncted
 -------------------------------------------------------------------------------
 TestMain.cpp:<line number>
@@ -6086,214 +4007,130 @@
   was called
 
 -------------------------------------------------------------------------------
-Parsing a std::pair
+Matchers can be (AllOf) composed with the && operator
 -------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
+MiscTests.cpp:<line number>
 ...............................................................................
 
-TrickyTests.cpp:<line number>:
+MiscTests.cpp:<line number>:
 PASSED:
-  REQUIRE( (std::pair<int, int>( 1, 2 )) == aNicePair )
+  CHECK_THAT( testStringForMatching(), Contains( "string" ) && Contains( "abc" ) && Contains( "substring" ) && Contains( "contains" ) )
 with expansion:
-  std::pair( 1, 2 ) == std::pair( 1, 2 )
+  "this string contains 'abc' as a substring" ( contains: "string" and
+  contains: "abc" and contains: "substring" and contains: "contains" )
 
 -------------------------------------------------------------------------------
-Where there is more to the expression after the RHS
+Matchers can be (AnyOf) composed with the || operator
 -------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
+MiscTests.cpp:<line number>
 ...............................................................................
 
-TrickyTests.cpp:<line number>:
+MiscTests.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" )
+
+MiscTests.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 ||
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.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
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.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
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.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
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.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
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>:
+PASSED:
+  REQUIRE_THROWS_WITH( thisThrows(), "expected exception" )
+
+ExceptionTests.cpp:<line number>: FAILED:
+  REQUIRE_THROWS_WITH( thisThrows(), "should fail" )
+with expansion:
+  expected exception
+
+-------------------------------------------------------------------------------
+Nice descriptive name
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
 warning:
-  Uncomment the code in this test to check that it gives a sensible compiler
-  error
+  This one ran
 
 -------------------------------------------------------------------------------
-Where the LHS is not a simple value
+Non-std exceptions can be translated
 -------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
+ExceptionTests.cpp:<line number>
 ...............................................................................
 
-TrickyTests.cpp:<line number>:
-warning:
-  Uncomment the code in this test to check that it gives a sensible compiler
-  error
+ExceptionTests.cpp:<line number>: FAILED:
+due to unexpected exception with message:
+  custom exception
 
 -------------------------------------------------------------------------------
-A failing expression with a non streamable type is still captured
+NotImplemented exception
 -------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
+ExceptionTests.cpp:<line number>
 ...............................................................................
 
-TrickyTests.cpp:<line number>: FAILED:
-  CHECK( &o1 == &o2 )
-with expansion:
-  0x<hex digits> == 0x<hex digits>
-
-TrickyTests.cpp:<line number>: FAILED:
-  CHECK( o1 == o2 )
-with expansion:
-  {?} == {?}
-
--------------------------------------------------------------------------------
-string literals of different sizes can be compared
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>: FAILED:
-  REQUIRE( std::string( "first" ) == "second" )
-with expansion:
-  "first" == "second"
-
--------------------------------------------------------------------------------
-An expression with side-effects should only be evaluated once
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
+ExceptionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( i++ == 7 )
-with expansion:
-  7 == 7
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( i++ == 8 )
-with expansion:
-  8 == 8
-
--------------------------------------------------------------------------------
-Operators at different namespace levels not hijacked by Koenig lookup
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( 0x<hex digits> == o )
-with expansion:
-  3221225472 (0x<hex digits>) == {?}
-
--------------------------------------------------------------------------------
-Demonstrate that a non-const == is not used
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( t == 1u )
-with expansion:
-  {?} == 1
-
--------------------------------------------------------------------------------
-Test enum bit values
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( 0x<hex digits> == bit30and31 )
-with expansion:
-  3221225472 (0x<hex digits>) == 3221225472
-
--------------------------------------------------------------------------------
-boolean member
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( obj.prop != nullptr )
-with expansion:
-  0x<hex digits> != nullptr
-
--------------------------------------------------------------------------------
-(unimplemented) static bools can be evaluated
-  compare to true
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( is_true<true>::value == true )
-with expansion:
-  true == true
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( true == is_true<true>::value )
-with expansion:
-  true == true
-
--------------------------------------------------------------------------------
-(unimplemented) static bools can be evaluated
-  compare to false
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( is_true<false>::value == false )
-with expansion:
-  false == false
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( false == is_true<false>::value )
-with expansion:
-  false == false
-
--------------------------------------------------------------------------------
-(unimplemented) static bools can be evaluated
-  negation
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( !is_true<false>::value )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-(unimplemented) static bools can be evaluated
-  double negation
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( !!is_true<true>::value )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-(unimplemented) static bools can be evaluated
-  direct
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( is_true<true>::value )
-with expansion:
-  true
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE_FALSE( is_true<false>::value )
-with expansion:
-  !false
+  REQUIRE_THROWS( thisFunctionNotImplemented( 7 ) )
 
 -------------------------------------------------------------------------------
 Objects that evaluated in boolean contexts can be checked
@@ -6320,1412 +4157,247 @@
   !false
 
 -------------------------------------------------------------------------------
-Assertions then sections
+Operators at different namespace levels not hijacked by Koenig lookup
 -------------------------------------------------------------------------------
 TrickyTests.cpp:<line number>
 ...............................................................................
 
 TrickyTests.cpp:<line number>:
 PASSED:
-  REQUIRE( Catch::alwaysTrue() )
+  REQUIRE( 0x<hex digits> == o )
 with expansion:
-  true
+  3221225472 (0x<hex digits>) == {?}
 
 -------------------------------------------------------------------------------
-Assertions then sections
-  A section
+Ordering comparison checks that should fail
 -------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
+ConditionTests.cpp:<line number>
 ...............................................................................
 
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::alwaysTrue() )
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.int_seven > 7 )
 with expansion:
-  true
+  7 > 7
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.int_seven < 7 )
+with expansion:
+  7 < 7
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.int_seven > 8 )
+with expansion:
+  7 > 8
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.int_seven < 6 )
+with expansion:
+  7 < 6
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.int_seven < 0 )
+with expansion:
+  7 < 0
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.int_seven < -1 )
+with expansion:
+  7 < -1
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.int_seven >= 8 )
+with expansion:
+  7 >= 8
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.int_seven <= 6 )
+with expansion:
+  7 <= 6
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.float_nine_point_one < 9 )
+with expansion:
+  9.1f < 9
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.float_nine_point_one > 10 )
+with expansion:
+  9.1f > 10
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.float_nine_point_one > 9.2 )
+with expansion:
+  9.1f > 9.2
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.str_hello > "hello" )
+with expansion:
+  "hello" > "hello"
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.str_hello < "hello" )
+with expansion:
+  "hello" < "hello"
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.str_hello > "hellp" )
+with expansion:
+  "hello" > "hellp"
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.str_hello > "z" )
+with expansion:
+  "hello" > "z"
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.str_hello < "hellm" )
+with expansion:
+  "hello" < "hellm"
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.str_hello < "a" )
+with expansion:
+  "hello" < "a"
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.str_hello >= "z" )
+with expansion:
+  "hello" >= "z"
+
+ConditionTests.cpp:<line number>: FAILED:
+  CHECK( data.str_hello <= "a" )
+with expansion:
+  "hello" <= "a"
 
 -------------------------------------------------------------------------------
-Assertions then sections
-  A section
-  Another section
+Ordering comparison checks that should succeed
 -------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
+ConditionTests.cpp:<line number>
 ...............................................................................
 
-TrickyTests.cpp:<line number>:
+ConditionTests.cpp:<line number>:
 PASSED:
-  REQUIRE( Catch::alwaysTrue() )
+  REQUIRE( data.int_seven < 8 )
 with expansion:
-  true
+  7 < 8
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.int_seven > 6 )
+with expansion:
+  7 > 6
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.int_seven > 0 )
+with expansion:
+  7 > 0
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.int_seven > -1 )
+with expansion:
+  7 > -1
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.int_seven >= 7 )
+with expansion:
+  7 >= 7
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.int_seven >= 6 )
+with expansion:
+  7 >= 6
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.int_seven <= 7 )
+with expansion:
+  7 <= 7
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.int_seven <= 8 )
+with expansion:
+  7 <= 8
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.float_nine_point_one > 9 )
+with expansion:
+  9.1f > 9
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.float_nine_point_one < 10 )
+with expansion:
+  9.1f < 10
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.float_nine_point_one < 9.2 )
+with expansion:
+  9.1f < 9.2
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.str_hello <= "hello" )
+with expansion:
+  "hello" <= "hello"
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.str_hello >= "hello" )
+with expansion:
+  "hello" >= "hello"
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.str_hello < "hellp" )
+with expansion:
+  "hello" < "hellp"
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.str_hello < "zebra" )
+with expansion:
+  "hello" < "zebra"
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.str_hello > "hellm" )
+with expansion:
+  "hello" > "hellm"
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( data.str_hello > "a" )
+with expansion:
+  "hello" > "a"
 
 -------------------------------------------------------------------------------
-Assertions then sections
+Output from all sections is reported
+  one
 -------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
+MessageTests.cpp:<line number>
 ...............................................................................
 
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::alwaysTrue() )
-with expansion:
-  true
+MessageTests.cpp:<line number>: FAILED:
+explicitly with message:
+  Message from section one
 
 -------------------------------------------------------------------------------
-Assertions then sections
-  A section
+Output from all sections is reported
+  two
 -------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
+MessageTests.cpp:<line number>
 ...............................................................................
 
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::alwaysTrue() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Assertions then sections
-  A section
-  Another other section
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::alwaysTrue() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-non streamable - with conv. op
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s == "7" )
-with expansion:
-  "7" == "7"
-
--------------------------------------------------------------------------------
-Comparing function pointers
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( a )
-with expansion:
-  true
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( a == &foo )
-with expansion:
-  0x<hex digits> == 0x<hex digits>
-
--------------------------------------------------------------------------------
-Comparing member function pointers
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  CHECK( m == &S::f )
-with expansion:
-  0x<hex digits>
-  ==
-  0x<hex digits>
-
--------------------------------------------------------------------------------
-pointer to class
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( p == 0 )
-with expansion:
-  NULL == 0
-
--------------------------------------------------------------------------------
-null_ptr
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-  REQUIRE( ptr.get() == nullptr )
-with expansion:
-  NULL == nullptr
-
--------------------------------------------------------------------------------
-X/level/0/a
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-
--------------------------------------------------------------------------------
-X/level/0/b
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-
--------------------------------------------------------------------------------
-X/level/1/a
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-
--------------------------------------------------------------------------------
-X/level/1/b
--------------------------------------------------------------------------------
-TrickyTests.cpp:<line number>
-...............................................................................
-
-TrickyTests.cpp:<line number>:
-PASSED:
-
--------------------------------------------------------------------------------
-toString( has_toString )
--------------------------------------------------------------------------------
-ToStringWhich.cpp:<line number>
-...............................................................................
-
-ToStringWhich.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString( item ) == "toString( has_toString )" )
-with expansion:
-  "toString( has_toString )"
-  ==
-  "toString( has_toString )"
-
--------------------------------------------------------------------------------
-toString( has_maker )
--------------------------------------------------------------------------------
-ToStringWhich.cpp:<line number>
-...............................................................................
-
-ToStringWhich.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString( item ) == "StringMaker<has_maker>" )
-with expansion:
-  "StringMaker<has_maker>"
-  ==
-  "StringMaker<has_maker>"
-
--------------------------------------------------------------------------------
-toString( has_maker_and_toString )
--------------------------------------------------------------------------------
-ToStringWhich.cpp:<line number>
-...............................................................................
-
-ToStringWhich.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString( item ) == "toString( has_maker_and_toString )" )
-with expansion:
-  "toString( has_maker_and_toString )"
-  ==
-  "toString( has_maker_and_toString )"
-
--------------------------------------------------------------------------------
-toString( vectors<has_toString )
--------------------------------------------------------------------------------
-ToStringWhich.cpp:<line number>
-...............................................................................
-
-ToStringWhich.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString( v ) == "{ {?} }" )
-with expansion:
-  "{ {?} }" == "{ {?} }"
-
--------------------------------------------------------------------------------
-toString( vectors<has_maker )
--------------------------------------------------------------------------------
-ToStringWhich.cpp:<line number>
-...............................................................................
-
-ToStringWhich.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker> }" )
-with expansion:
-  "{ StringMaker<has_maker> }"
-  ==
-  "{ StringMaker<has_maker> }"
-
--------------------------------------------------------------------------------
-toString( vectors<has_maker_and_toString )
--------------------------------------------------------------------------------
-ToStringWhich.cpp:<line number>
-...............................................................................
-
-ToStringWhich.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker_and_toString> }" )
-with expansion:
-  "{ StringMaker<has_maker_and_toString> }"
-  ==
-  "{ StringMaker<has_maker_and_toString> }"
-
--------------------------------------------------------------------------------
-Tracker
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isOpen() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
-  successfully close one section
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isSuccessfullyCompleted() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isComplete() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( ctx.completedCycle() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isSuccessfullyCompleted() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isOpen() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
-  fail one section
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isSuccessfullyCompleted() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isComplete() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( ctx.completedCycle() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isSuccessfullyCompleted() == false )
-with expansion:
-  false == false
-
--------------------------------------------------------------------------------
-Tracker
-  fail one section
-  re-enter after failed section
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase2.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1b.isOpen() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( ctx.completedCycle() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isSuccessfullyCompleted() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isOpen() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
-  fail one section
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isSuccessfullyCompleted() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isComplete() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( ctx.completedCycle() )
-with expansion:
-  true
-
-PartTrackerTests.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
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase2.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1b.isOpen() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( ctx.completedCycle() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isSuccessfullyCompleted() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isOpen() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
-  successfully close one section, then find another
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2.isOpen() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.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
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase2.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1b.isOpen() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2b.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.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
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( ctx.completedCycle() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2b.isSuccessfullyCompleted() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase2.isComplete() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase2.isSuccessfullyCompleted() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isOpen() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
-  successfully close one section, then find another
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2.isOpen() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.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
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase2.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1b.isOpen() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2b.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.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
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( ctx.completedCycle() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2b.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2b.isSuccessfullyCompleted() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase2.isSuccessfullyCompleted() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase3.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1c.isOpen() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2c.isOpen() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase3.isSuccessfullyCompleted() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isOpen() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
-  open a nested section
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isComplete() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isComplete() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isComplete() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isOpen() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
-  start a generator
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1.index() == 0 )
-with expansion:
-  0 == 0
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1.isComplete() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isComplete() == false )
-with expansion:
-  false == false
-
--------------------------------------------------------------------------------
-Tracker
-  start a generator
-  close outer section
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isComplete() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isSuccessfullyCompleted() == false )
-with expansion:
-  false == false
-
--------------------------------------------------------------------------------
-Tracker
-  start a generator
-  close outer section
-  Re-enter for second generation
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase2.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1b.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1b.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1b.index() == 1 )
-with expansion:
-  1 == 1
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isComplete() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1b.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1b.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase2.isComplete() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isOpen() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
-  start a generator
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1.index() == 0 )
-with expansion:
-  0 == 0
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1.isComplete() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isComplete() == false )
-with expansion:
-  false == false
-
--------------------------------------------------------------------------------
-Tracker
-  start a generator
-  Start a new inner section
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isComplete() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.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
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase2.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1b.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1b.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1b.index() == 1 )
-with expansion:
-  1 == 1
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2b.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2b.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1b.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1b.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase2.isComplete() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isOpen() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-Tracker
-  start a generator
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1.index() == 0 )
-with expansion:
-  0 == 0
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1.isComplete() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isComplete() == false )
-with expansion:
-  false == false
-
--------------------------------------------------------------------------------
-Tracker
-  start a generator
-  Fail an inner section
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2.isSuccessfullyCompleted() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1.isComplete() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.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
--------------------------------------------------------------------------------
-PartTrackerTests.cpp:<line number>
-...............................................................................
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase2.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1b.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1b.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1b.index() == 0 )
-with expansion:
-  0 == 0
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2b.isOpen() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1b.isComplete() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1b.isComplete() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase2.isComplete() == false )
-with expansion:
-  false == false
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase3.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1c.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1c.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1c.index() == 1 )
-with expansion:
-  1 == 1
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2c.isOpen() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s2c.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( g1c.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s1c.isComplete() )
-with expansion:
-  true
-
-PartTrackerTests.cpp:<line number>:
-PASSED:
-  REQUIRE( testCase3.isComplete() )
-with expansion:
-  true
-
--------------------------------------------------------------------------------
-std::pair<int,std::string> -> toString
--------------------------------------------------------------------------------
-ToStringPair.cpp:<line number>
-...............................................................................
-
-ToStringPair.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString( value ) == "{ 34, \"xyzzy\" }" )
-with expansion:
-  "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }"
-
--------------------------------------------------------------------------------
-std::pair<int,const std::string> -> toString
--------------------------------------------------------------------------------
-ToStringPair.cpp:<line number>
-...............................................................................
-
-ToStringPair.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString(value) == "{ 34, \"xyzzy\" }" )
-with expansion:
-  "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }"
-
--------------------------------------------------------------------------------
-std::vector<std::pair<std::string,int> > -> toString
--------------------------------------------------------------------------------
-ToStringPair.cpp:<line number>
-...............................................................................
-
-ToStringPair.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString( pr ) == "{ { \"green\", 55 } }" )
-with expansion:
-  "{ { "green", 55 } }"
-  ==
-  "{ { "green", 55 } }"
-
--------------------------------------------------------------------------------
-pair<pair<int,const char *,pair<std::string,int> > -> toString
--------------------------------------------------------------------------------
-ToStringPair.cpp:<line number>
-...............................................................................
-
-ToStringPair.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" )
-with expansion:
-  "{ { 42, "Arthur" }, { "Ford", 24 } }"
-  ==
-  "{ { 42, "Arthur" }, { "Ford", 24 } }"
-
--------------------------------------------------------------------------------
-vector<int> -> toString
--------------------------------------------------------------------------------
-ToStringVector.cpp:<line number>
-...............................................................................
-
-ToStringVector.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString(vv) == "{  }" )
-with expansion:
-  "{  }" == "{  }"
-
-ToStringVector.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString(vv) == "{ 42 }" )
-with expansion:
-  "{ 42 }" == "{ 42 }"
-
-ToStringVector.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString(vv) == "{ 42, 250 }" )
-with expansion:
-  "{ 42, 250 }" == "{ 42, 250 }"
-
--------------------------------------------------------------------------------
-vector<string> -> toString
--------------------------------------------------------------------------------
-ToStringVector.cpp:<line number>
-...............................................................................
-
-ToStringVector.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString(vv) == "{  }" )
-with expansion:
-  "{  }" == "{  }"
-
-ToStringVector.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString(vv) == "{ \"hello\" }" )
-with expansion:
-  "{ "hello" }" == "{ "hello" }"
-
-ToStringVector.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString(vv) == "{ \"hello\", \"world\" }" )
-with expansion:
-  "{ "hello", "world" }"
-  ==
-  "{ "hello", "world" }"
-
--------------------------------------------------------------------------------
-vector<int,allocator> -> toString
--------------------------------------------------------------------------------
-ToStringVector.cpp:<line number>
-...............................................................................
-
-ToStringVector.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString(vv) == "{  }" )
-with expansion:
-  "{  }" == "{  }"
-
-ToStringVector.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString(vv) == "{ 42 }" )
-with expansion:
-  "{ 42 }" == "{ 42 }"
-
-ToStringVector.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString(vv) == "{ 42, 250 }" )
-with expansion:
-  "{ 42, 250 }" == "{ 42, 250 }"
-
--------------------------------------------------------------------------------
-vec<vec<string,alloc>> -> toString
--------------------------------------------------------------------------------
-ToStringVector.cpp:<line number>
-...............................................................................
-
-ToStringVector.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString(v) == "{  }" )
-with expansion:
-  "{  }" == "{  }"
-
-ToStringVector.cpp:<line number>:
-PASSED:
-  REQUIRE( Catch::toString(v) == "{ { \"hello\" }, { \"world\" } }" )
-with expansion:
-  "{ { "hello" }, { "world" } }"
-  ==
-  "{ { "hello" }, { "world" } }"
+MessageTests.cpp:<line number>: FAILED:
+explicitly with message:
+  Message from section two
 
 -------------------------------------------------------------------------------
 Parse test names and tags
@@ -8755,194 +5427,717 @@
   true == true
 
 -------------------------------------------------------------------------------
-tuple<>
+Parsing a std::pair
 -------------------------------------------------------------------------------
-ToStringTuple.cpp:<line number>
+TrickyTests.cpp:<line number>
 ...............................................................................
 
-ToStringTuple.cpp:<line number>:
+TrickyTests.cpp:<line number>:
 PASSED:
-  CHECK( "{ }" == Catch::toString(type{}) )
+  REQUIRE( (std::pair<int, int>( 1, 2 )) == aNicePair )
 with expansion:
-  "{ }" == "{ }"
-
-ToStringTuple.cpp:<line number>:
-PASSED:
-  CHECK( "{ }" == Catch::toString(value) )
-with expansion:
-  "{ }" == "{ }"
+  std::pair( 1, 2 ) == std::pair( 1, 2 )
 
 -------------------------------------------------------------------------------
-tuple<int>
+Pointers can be compared to null
 -------------------------------------------------------------------------------
-ToStringTuple.cpp:<line number>
+ConditionTests.cpp:<line number>
 ...............................................................................
 
-ToStringTuple.cpp:<line number>:
+ConditionTests.cpp:<line number>:
 PASSED:
-  CHECK( "{ 0 }" == Catch::toString(type{0}) )
+  REQUIRE( p == nullptr )
 with expansion:
-  "{ 0 }" == "{ 0 }"
+  NULL == nullptr
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( p == pNULL )
+with expansion:
+  NULL == NULL
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( p != nullptr )
+with expansion:
+  0x<hex digits> != nullptr
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( cp != nullptr )
+with expansion:
+  0x<hex digits> != nullptr
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( cpc != nullptr )
+with expansion:
+  0x<hex digits> != nullptr
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( returnsNull() == nullptr )
+with expansion:
+  {null string} == nullptr
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( returnsConstNull() == nullptr )
+with expansion:
+  {null string} == nullptr
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( nullptr != p )
+with expansion:
+  nullptr != 0x<hex digits>
 
 -------------------------------------------------------------------------------
-tuple<float,int>
+Pointers can be converted to strings
 -------------------------------------------------------------------------------
-ToStringTuple.cpp:<line number>
+MessageTests.cpp:<line number>
 ...............................................................................
 
-ToStringTuple.cpp:<line number>:
-PASSED:
-  CHECK( "1.2f" == Catch::toString(float(1.2)) )
-with expansion:
-  "1.2f" == "1.2f"
+MessageTests.cpp:<line number>:
+warning:
+  actual address of p: 0x<hex digits>
 
-ToStringTuple.cpp:<line number>:
-PASSED:
-  CHECK( "{ 1.2f, 0 }" == Catch::toString(type{1.2,0}) )
-with expansion:
-  "{ 1.2f, 0 }" == "{ 1.2f, 0 }"
+MessageTests.cpp:<line number>:
+warning:
+  toString(p): 0x<hex digits>
 
 -------------------------------------------------------------------------------
-tuple<string,string>
+Process can be configured on command line
+  default - no arguments
 -------------------------------------------------------------------------------
-ToStringTuple.cpp:<line number>
+TestMain.cpp:<line number>
 ...............................................................................
 
-ToStringTuple.cpp:<line number>:
+TestMain.cpp:<line number>:
 PASSED:
-  CHECK( "{ \"hello\", \"world\" }" == Catch::toString(type{"hello","world"}) )
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( config.shouldDebugBreak == false )
 with expansion:
-  "{ "hello", "world" }"
-  ==
-  "{ "hello", "world" }"
+  false == false
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( config.abortAfter == -1 )
+with expansion:
+  -1 == -1
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( config.noThrow == false )
+with expansion:
+  false == false
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( config.reporterNames.empty() )
+with expansion:
+  true
 
 -------------------------------------------------------------------------------
-tuple<tuple<int>,tuple<>,float>
+Process can be configured on command line
+  test lists
+  1 test
 -------------------------------------------------------------------------------
-ToStringTuple.cpp:<line number>
+TestMain.cpp:<line number>
 ...............................................................................
 
-ToStringTuple.cpp:<line number>:
+TestMain.cpp:<line number>:
 PASSED:
-  CHECK( "{ { 42 }, { }, 1.2f }" == Catch::toString(value) )
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( cfg.testSpec().matches( fakeTestCase( "notIncluded" ) ) == false )
 with expansion:
-  "{ { 42 }, { }, 1.2f }"
-  ==
-  "{ { 42 }, { }, 1.2f }"
+  false == false
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( cfg.testSpec().matches( fakeTestCase( "test1" ) ) )
+with expansion:
+  true
 
 -------------------------------------------------------------------------------
-tuple<nullptr,int,const char *>
+Process can be configured on command line
+  test lists
+  Specify one test case exclusion using exclude:
 -------------------------------------------------------------------------------
-ToStringTuple.cpp:<line number>
+TestMain.cpp:<line number>
 ...............................................................................
 
-ToStringTuple.cpp:<line number>:
+TestMain.cpp:<line number>:
 PASSED:
-  CHECK( "{ nullptr, 42, \"Catch me\" }" == Catch::toString(value) )
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false )
 with expansion:
-  "{ nullptr, 42, "Catch me" }"
-  ==
-  "{ nullptr, 42, "Catch me" }"
+  false == false
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) ) )
+with expansion:
+  true
 
 -------------------------------------------------------------------------------
-Tag alias can be registered against tag patterns
-  The same tag alias can only be registered once
+Process can be configured on command line
+  test lists
+  Specify one test case exclusion using ~
 -------------------------------------------------------------------------------
-TagAliasTests.cpp:<line number>
+TestMain.cpp:<line number>
 ...............................................................................
 
-TagAliasTests.cpp:<line number>:
+TestMain.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]"
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
 
-TagAliasTests.cpp:<line number>:
+TestMain.cpp:<line number>:
 PASSED:
-  CHECK_THAT( what, Contains( "file" ) )
+  REQUIRE( cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false )
 with expansion:
-  "error: tag alias, "[@zzz]" already registered.
-  First seen at file:2
-  Redefined at file:10" contains:
-  "file"
+  false == false
 
-TagAliasTests.cpp:<line number>:
+TestMain.cpp:<line number>:
 PASSED:
-  CHECK_THAT( what, Contains( "2" ) )
+  REQUIRE( cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) ) )
 with expansion:
-  "error: tag alias, "[@zzz]" already registered.
-  First seen at file:2
-  Redefined at file:10" contains:
-  "2"
-
-TagAliasTests.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"
+  true
 
 -------------------------------------------------------------------------------
-Tag alias can be registered against tag patterns
-  Tag aliases must be of the form [@name]
+Process can be configured on command line
+  reporter
+  -r/console
 -------------------------------------------------------------------------------
-TagAliasTests.cpp:<line number>
+TestMain.cpp:<line number>
 ...............................................................................
 
-TagAliasTests.cpp:<line number>:
+TestMain.cpp:<line number>:
 PASSED:
-  CHECK_THROWS( registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) ) )
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
 
-TagAliasTests.cpp:<line number>:
+TestMain.cpp:<line number>:
 PASSED:
-  CHECK_THROWS( registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) ) )
-
-TagAliasTests.cpp:<line number>:
-PASSED:
-  CHECK_THROWS( registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) ) )
-
-TagAliasTests.cpp:<line number>:
-PASSED:
-  CHECK_THROWS( registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) ) )
+  REQUIRE( config.reporterNames[0] == "console" )
+with expansion:
+  "console" == "console"
 
 -------------------------------------------------------------------------------
-Anonymous test case 1
+Process can be configured on command line
+  reporter
+  -r/xml
 -------------------------------------------------------------------------------
-VariadicMacrosTests.cpp:<line number>
+TestMain.cpp:<line number>
 ...............................................................................
 
-VariadicMacrosTests.cpp:<line number>:
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.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
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( config.reporterNames.size() == 2 )
+with expansion:
+  2 == 2
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( config.reporterNames[0] == "xml" )
+with expansion:
+  "xml" == "xml"
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( config.reporterNames[1] == "junit" )
+with expansion:
+  "junit" == "junit"
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+  reporter
+  --reporter/junit
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( config.reporterNames[0] == "junit" )
+with expansion:
+  "junit" == "junit"
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+  debugger
+  -b
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( config.shouldDebugBreak == true )
+with expansion:
+  true == true
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+  debugger
+  --break
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( config.shouldDebugBreak )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+  abort
+  -a aborts after first failure
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.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
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( config.abortAfter == 2 )
+with expansion:
+  2 == 2
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+  abort
+  -x must be greater than zero
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE_THAT( parseIntoConfigAndReturnError( argv, config ), Contains( "greater than zero" ) )
+with expansion:
+  "Value after -x or --abortAfter must be greater than zero
+  - while parsing: (-x, --abortx <no. failures>)" contains: "greater than zero"
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+  abort
+  -x must be numeric
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE_THAT( parseIntoConfigAndReturnError( argv, config ), Contains( "-x" ) )
+with expansion:
+  "Unable to convert oops to destination type
+  - while parsing: (-x, --abortx <no. failures>)" contains: "-x"
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+  nothrow
+  -e
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( config.noThrow == true )
+with expansion:
+  true == true
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+  nothrow
+  --nothrow
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( config.noThrow == true )
+with expansion:
+  true == true
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+  output filename
+  -o filename
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.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
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.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
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( config.abortAfter == 1 )
+with expansion:
+  1 == 1
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( config.shouldDebugBreak )
+with expansion:
+  true
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( config.noThrow == true )
+with expansion:
+  true == true
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+  use-colour
+  without option
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( config.useColour == UseColour::Auto )
+with expansion:
+  0 == 0
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+  use-colour
+  auto
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( config.useColour == UseColour::Auto )
+with expansion:
+  0 == 0
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+  use-colour
+  yes
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( config.useColour == UseColour::Yes )
+with expansion:
+  1 == 1
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+  use-colour
+  no
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( config.useColour == UseColour::No )
+with expansion:
+  2 == 2
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+  use-colour
+  error
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE_THROWS_WITH( parseIntoConfig( argv, config ), Contains( "colour mode must be one of" ) )
+
+-------------------------------------------------------------------------------
+SCOPED_INFO is reset for each loop
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+MessageTests.cpp:<line number>:
+PASSED:
+  REQUIRE( i < 10 )
+with expansion:
+  0 < 10
+with messages:
+  current counter 0
+  i := 0
+
+MessageTests.cpp:<line number>:
+PASSED:
+  REQUIRE( i < 10 )
+with expansion:
+  1 < 10
+with messages:
+  current counter 1
+  i := 1
+
+MessageTests.cpp:<line number>:
+PASSED:
+  REQUIRE( i < 10 )
+with expansion:
+  2 < 10
+with messages:
+  current counter 2
+  i := 2
+
+MessageTests.cpp:<line number>:
+PASSED:
+  REQUIRE( i < 10 )
+with expansion:
+  3 < 10
+with messages:
+  current counter 3
+  i := 3
+
+MessageTests.cpp:<line number>:
+PASSED:
+  REQUIRE( i < 10 )
+with expansion:
+  4 < 10
+with messages:
+  current counter 4
+  i := 4
+
+MessageTests.cpp:<line number>:
+PASSED:
+  REQUIRE( i < 10 )
+with expansion:
+  5 < 10
+with messages:
+  current counter 5
+  i := 5
+
+MessageTests.cpp:<line number>:
+PASSED:
+  REQUIRE( i < 10 )
+with expansion:
+  6 < 10
+with messages:
+  current counter 6
+  i := 6
+
+MessageTests.cpp:<line number>:
+PASSED:
+  REQUIRE( i < 10 )
+with expansion:
+  7 < 10
+with messages:
+  current counter 7
+  i := 7
+
+MessageTests.cpp:<line number>:
+PASSED:
+  REQUIRE( i < 10 )
+with expansion:
+  8 < 10
+with messages:
+  current counter 8
+  i := 8
+
+MessageTests.cpp:<line number>:
+PASSED:
+  REQUIRE( i < 10 )
+with expansion:
+  9 < 10
+with messages:
+  current counter 9
+  i := 9
+
+MessageTests.cpp:<line number>: FAILED:
+  REQUIRE( i < 10 )
+with expansion:
+  10 < 10
+with messages:
+  current counter 10
+  i := 10
+
+-------------------------------------------------------------------------------
+SUCCEED counts as a test pass
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+MessageTests.cpp:<line number>:
 PASSED:
 with message:
-  anonymous test case
+  this is a success
 
 -------------------------------------------------------------------------------
-Test case with one argument
+SUCCESS does not require an argument
 -------------------------------------------------------------------------------
-VariadicMacrosTests.cpp:<line number>
+MessageTests.cpp:<line number>
 ...............................................................................
 
-VariadicMacrosTests.cpp:<line number>:
+MessageTests.cpp:<line number>:
 PASSED:
-with message:
-  no assertions
 
 -------------------------------------------------------------------------------
-Variadic macros
-  Section with one argument
+Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or
+          methods
+     Given: No operations precede me
 -------------------------------------------------------------------------------
-VariadicMacrosTests.cpp:<line number>
+BDDTests.cpp:<line number>
 ...............................................................................
 
-VariadicMacrosTests.cpp:<line number>:
+BDDTests.cpp:<line number>:
 PASSED:
-with message:
-  no assertions
+  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
+-------------------------------------------------------------------------------
+BDDTests.cpp:<line number>
+...............................................................................
+
+BDDTests.cpp:<line number>:
+PASSED:
+  REQUIRE( after > before )
+with expansion:
+  1 > 0
 
 -------------------------------------------------------------------------------
 Scenario: Do that thing with the thing
@@ -8976,6 +6171,24 @@
   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
+-------------------------------------------------------------------------------
+BDDTests.cpp:<line number>
+...............................................................................
+
+BDDTests.cpp:<line number>:
+PASSED:
+with message:
+  boo!
+
+-------------------------------------------------------------------------------
 Scenario: Vector resizing affects size and capacity
      Given: an empty vector
 -------------------------------------------------------------------------------
@@ -9066,53 +6279,2840 @@
 with expansion:
   0 == 0
 
+A string sent directly to stdout
+A string sent directly to stderr
 -------------------------------------------------------------------------------
-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
+Some simple comparisons between doubles
 -------------------------------------------------------------------------------
-BDDTests.cpp:<line number>
+ApproxTests.cpp:<line number>
 ...............................................................................
 
-BDDTests.cpp:<line number>:
+ApproxTests.cpp:<line number>:
+PASSED:
+  REQUIRE( d == Approx( 1.23 ) )
+with expansion:
+  1.23 == Approx( 1.23 )
+
+ApproxTests.cpp:<line number>:
+PASSED:
+  REQUIRE( d != Approx( 1.22 ) )
+with expansion:
+  1.23 != Approx( 1.22 )
+
+ApproxTests.cpp:<line number>:
+PASSED:
+  REQUIRE( d != Approx( 1.24 ) )
+with expansion:
+  1.23 != Approx( 1.24 )
+
+ApproxTests.cpp:<line number>:
+PASSED:
+  REQUIRE( Approx( d ) == 1.23 )
+with expansion:
+  Approx( 1.23 ) == 1.23
+
+ApproxTests.cpp:<line number>:
+PASSED:
+  REQUIRE( Approx( d ) != 1.22 )
+with expansion:
+  Approx( 1.23 ) != 1.22
+
+ApproxTests.cpp:<line number>:
+PASSED:
+  REQUIRE( Approx( d ) != 1.24 )
+with expansion:
+  Approx( 1.23 ) != 1.24
+
+Message from section one
+-------------------------------------------------------------------------------
+Standard output from all sections is reported
+  one
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+
+No assertions in section 'one'
+
+Message from section two
+-------------------------------------------------------------------------------
+Standard output from all sections is reported
+  two
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+
+No assertions in section 'two'
+
+-------------------------------------------------------------------------------
+StartsWith string matcher
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECK_THAT( testStringForMatching(), StartsWith( "string" ) )
+with expansion:
+  "this string contains 'abc' as a substring" starts with: "string"
+
+-------------------------------------------------------------------------------
+String matchers
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE_THAT( testStringForMatching(), Contains( "string" ) )
+with expansion:
+  "this string contains 'abc' as a substring" contains: "string"
+
+MiscTests.cpp:<line number>:
+PASSED:
+  CHECK_THAT( testStringForMatching(), Contains( "abc" ) )
+with expansion:
+  "this string contains 'abc' as a substring" contains: "abc"
+
+MiscTests.cpp:<line number>:
+PASSED:
+  CHECK_THAT( testStringForMatching(), StartsWith( "this" ) )
+with expansion:
+  "this string contains 'abc' as a substring" starts with: "this"
+
+MiscTests.cpp:<line number>:
+PASSED:
+  CHECK_THAT( testStringForMatching(), EndsWith( "substring" ) )
+with expansion:
+  "this string contains 'abc' as a substring" ends with: "substring"
+
+hello
+hello
+-------------------------------------------------------------------------------
+Tabs and newlines show in output
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.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
+-------------------------------------------------------------------------------
+TagAliasTests.cpp:<line number>
+...............................................................................
+
+TagAliasTests.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]"
+
+TagAliasTests.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"
+
+TagAliasTests.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"
+
+TagAliasTests.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]
+-------------------------------------------------------------------------------
+TagAliasTests.cpp:<line number>
+...............................................................................
+
+TagAliasTests.cpp:<line number>:
+PASSED:
+  CHECK_THROWS( registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) ) )
+
+TagAliasTests.cpp:<line number>:
+PASSED:
+  CHECK_THROWS( registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) ) )
+
+TagAliasTests.cpp:<line number>:
+PASSED:
+  CHECK_THROWS( registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) ) )
+
+TagAliasTests.cpp:<line number>:
+PASSED:
+  CHECK_THROWS( registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) ) )
+
+-------------------------------------------------------------------------------
+Test case with one argument
+-------------------------------------------------------------------------------
+VariadicMacrosTests.cpp:<line number>
+...............................................................................
+
+VariadicMacrosTests.cpp:<line number>:
 PASSED:
 with message:
-  boo!
+  no assertions
 
 -------------------------------------------------------------------------------
-Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or
-          methods
-     Given: No operations precede me
+Test enum bit values
 -------------------------------------------------------------------------------
-BDDTests.cpp:<line number>
+TrickyTests.cpp:<line number>
 ...............................................................................
 
-BDDTests.cpp:<line number>:
+TrickyTests.cpp:<line number>:
 PASSED:
-  REQUIRE( before == 0 )
+  REQUIRE( 0x<hex digits> == bit30and31 )
+with expansion:
+  3221225472 (0x<hex digits>) == 3221225472
+
+-------------------------------------------------------------------------------
+Text can be formatted using the Text class
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( Text( "hi there" ).toString() == "hi there" )
+with expansion:
+  "hi there" == "hi there"
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( Text( "hi there", narrow ).toString() == "hi\nthere" )
+with expansion:
+  "hi
+  there"
+  ==
+  "hi
+  there"
+
+-------------------------------------------------------------------------------
+The NO_FAIL macro reports a failure but does not fail the test
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+MessageTests.cpp:<line number>:
+FAILED - but was ok:
+  CHECK_NOFAIL( 1 == 2 )
+
+-------------------------------------------------------------------------------
+This test 'should' fail but doesn't
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+with message:
+  oops!
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isOpen() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+  successfully close one section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isSuccessfullyCompleted() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isComplete() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( ctx.completedCycle() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isSuccessfullyCompleted() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isOpen() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+  fail one section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isSuccessfullyCompleted() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isComplete() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( ctx.completedCycle() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isSuccessfullyCompleted() == false )
+with expansion:
+  false == false
+
+-------------------------------------------------------------------------------
+Tracker
+  fail one section
+  re-enter after failed section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase2.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1b.isOpen() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( ctx.completedCycle() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isSuccessfullyCompleted() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isOpen() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+  fail one section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isSuccessfullyCompleted() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isComplete() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( ctx.completedCycle() )
+with expansion:
+  true
+
+PartTrackerTests.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
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase2.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1b.isOpen() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( ctx.completedCycle() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isSuccessfullyCompleted() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isOpen() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+  successfully close one section, then find another
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2.isOpen() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.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
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase2.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1b.isOpen() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2b.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.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
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( ctx.completedCycle() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2b.isSuccessfullyCompleted() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase2.isComplete() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase2.isSuccessfullyCompleted() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isOpen() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+  successfully close one section, then find another
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2.isOpen() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.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
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase2.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1b.isOpen() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2b.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.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
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( ctx.completedCycle() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2b.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2b.isSuccessfullyCompleted() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase2.isSuccessfullyCompleted() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase3.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1c.isOpen() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2c.isOpen() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase3.isSuccessfullyCompleted() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isOpen() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+  open a nested section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isComplete() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isComplete() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isComplete() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isOpen() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+  start a generator
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1.index() == 0 )
+with expansion:
+  0 == 0
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1.isComplete() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isComplete() == false )
+with expansion:
+  false == false
+
+-------------------------------------------------------------------------------
+Tracker
+  start a generator
+  close outer section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isComplete() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isSuccessfullyCompleted() == false )
+with expansion:
+  false == false
+
+-------------------------------------------------------------------------------
+Tracker
+  start a generator
+  close outer section
+  Re-enter for second generation
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase2.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1b.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1b.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1b.index() == 1 )
+with expansion:
+  1 == 1
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isComplete() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1b.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1b.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase2.isComplete() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isOpen() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+  start a generator
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1.index() == 0 )
+with expansion:
+  0 == 0
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1.isComplete() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isComplete() == false )
+with expansion:
+  false == false
+
+-------------------------------------------------------------------------------
+Tracker
+  start a generator
+  Start a new inner section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isComplete() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.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
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase2.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1b.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1b.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1b.index() == 1 )
+with expansion:
+  1 == 1
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2b.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2b.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1b.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1b.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase2.isComplete() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isOpen() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Tracker
+  start a generator
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1.index() == 0 )
+with expansion:
+  0 == 0
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1.isComplete() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isComplete() == false )
+with expansion:
+  false == false
+
+-------------------------------------------------------------------------------
+Tracker
+  start a generator
+  Fail an inner section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2.isSuccessfullyCompleted() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1.isComplete() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.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
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase2.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1b.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1b.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1b.index() == 0 )
+with expansion:
+  0 == 0
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2b.isOpen() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1b.isComplete() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1b.isComplete() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase2.isComplete() == false )
+with expansion:
+  false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase3.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1c.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1c.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1c.index() == 1 )
+with expansion:
+  1 == 1
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2c.isOpen() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s2c.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( g1c.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s1c.isComplete() )
+with expansion:
+  true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCase3.isComplete() )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Unexpected exceptions can be translated
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+due to unexpected exception with message:
+  3.14
+
+-------------------------------------------------------------------------------
+Use a custom approx
+-------------------------------------------------------------------------------
+ApproxTests.cpp:<line number>
+...............................................................................
+
+ApproxTests.cpp:<line number>:
+PASSED:
+  REQUIRE( d == approx( 1.23 ) )
+with expansion:
+  1.23 == Approx( 1.23 )
+
+ApproxTests.cpp:<line number>:
+PASSED:
+  REQUIRE( d == approx( 1.22 ) )
+with expansion:
+  1.23 == Approx( 1.22 )
+
+ApproxTests.cpp:<line number>:
+PASSED:
+  REQUIRE( d == approx( 1.24 ) )
+with expansion:
+  1.23 == Approx( 1.24 )
+
+ApproxTests.cpp:<line number>:
+PASSED:
+  REQUIRE( d != approx( 1.25 ) )
+with expansion:
+  1.23 != Approx( 1.25 )
+
+ApproxTests.cpp:<line number>:
+PASSED:
+  REQUIRE( approx( d ) == 1.23 )
+with expansion:
+  Approx( 1.23 ) == 1.23
+
+ApproxTests.cpp:<line number>:
+PASSED:
+  REQUIRE( approx( d ) == 1.22 )
+with expansion:
+  Approx( 1.23 ) == 1.22
+
+ApproxTests.cpp:<line number>:
+PASSED:
+  REQUIRE( approx( d ) == 1.24 )
+with expansion:
+  Approx( 1.23 ) == 1.24
+
+ApproxTests.cpp:<line number>:
+PASSED:
+  REQUIRE( approx( d ) != 1.25 )
+with expansion:
+  Approx( 1.23 ) != 1.25
+
+-------------------------------------------------------------------------------
+Variadic macros
+  Section with one argument
+-------------------------------------------------------------------------------
+VariadicMacrosTests.cpp:<line number>
+...............................................................................
+
+VariadicMacrosTests.cpp:<line number>:
+PASSED:
+with message:
+  no assertions
+
+-------------------------------------------------------------------------------
+When checked exceptions are thrown they can be expected or unexpected
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>:
+PASSED:
+  REQUIRE_THROWS_AS( thisThrows() )
+
+ExceptionTests.cpp:<line number>:
+PASSED:
+  REQUIRE_NOTHROW( thisDoesntThrow() )
+
+ExceptionTests.cpp:<line number>:
+PASSED:
+  REQUIRE_THROWS( thisThrows() )
+
+-------------------------------------------------------------------------------
+When unchecked exceptions are thrown directly they are always failures
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+due to unexpected exception with message:
+  unexpected exception
+
+-------------------------------------------------------------------------------
+When unchecked exceptions are thrown during a CHECK the test should abort and
+fail
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.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
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.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
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.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
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+due to unexpected exception with message:
+  unexpected exception
+
+-------------------------------------------------------------------------------
+Where the LHS is not a simple value
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.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
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+warning:
+  Uncomment the code in this test to check that it gives a sensible compiler
+  error
+
+-------------------------------------------------------------------------------
+X/level/0/a
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+
+-------------------------------------------------------------------------------
+X/level/0/b
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+
+-------------------------------------------------------------------------------
+X/level/1/a
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+
+-------------------------------------------------------------------------------
+X/level/1/b
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+
+-------------------------------------------------------------------------------
+XmlEncode
+  normal string
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( encode( "normal string" ) == "normal string" )
+with expansion:
+  "normal string" == "normal string"
+
+-------------------------------------------------------------------------------
+XmlEncode
+  empty string
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( encode( "" ) == "" )
+with expansion:
+  "" == ""
+
+-------------------------------------------------------------------------------
+XmlEncode
+  string with ampersand
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( encode( "smith & jones" ) == "smith &amp; jones" )
+with expansion:
+  "smith &amp; jones" == "smith &amp; jones"
+
+-------------------------------------------------------------------------------
+XmlEncode
+  string with less-than
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( encode( "smith < jones" ) == "smith &lt; jones" )
+with expansion:
+  "smith &lt; jones" == "smith &lt; jones"
+
+-------------------------------------------------------------------------------
+XmlEncode
+  string with greater-than
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( encode( "smith > jones" ) == "smith > jones" )
+with expansion:
+  "smith > jones" == "smith > jones"
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( encode( "smith ]]> jones" ) == "smith ]]&gt; jones" )
+with expansion:
+  "smith ]]&gt; jones"
+  ==
+  "smith ]]&gt; jones"
+
+-------------------------------------------------------------------------------
+XmlEncode
+  string with quotes
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( encode( stringWithQuotes ) == stringWithQuotes )
+with expansion:
+  "don't "quote" me on that"
+  ==
+  "don't "quote" me on that"
+
+MiscTests.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)
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( encode( "[\x01]" ) == "[&#x01;]" )
+with expansion:
+  "[&#x01;]" == "[&#x01;]"
+
+-------------------------------------------------------------------------------
+XmlEncode
+  string with control char (x7F)
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( encode( "[\x7F]" ) == "[&#x7F;]" )
+with expansion:
+  "[&#x7F;]" == "[&#x7F;]"
+
+-------------------------------------------------------------------------------
+atomic if
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( x == 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
+boolean member
 -------------------------------------------------------------------------------
-BDDTests.cpp:<line number>
+TrickyTests.cpp:<line number>
 ...............................................................................
 
-BDDTests.cpp:<line number>:
+TrickyTests.cpp:<line number>:
 PASSED:
-  REQUIRE( after > before )
+  REQUIRE( obj.prop != nullptr )
 with expansion:
-  1 > 0
+  0x<hex digits> != nullptr
+
+-------------------------------------------------------------------------------
+checkedElse
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  CHECKED_ELSE( flag )
+with expansion:
+  true
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCheckedElse( true ) )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+checkedElse, failing
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECKED_ELSE( flag )
+with expansion:
+  false
+
+MiscTests.cpp:<line number>: FAILED:
+  REQUIRE( testCheckedElse( false ) )
+with expansion:
+  false
+
+-------------------------------------------------------------------------------
+checkedIf
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  CHECKED_IF( flag )
+with expansion:
+  true
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( testCheckedIf( true ) )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+checkedIf, failing
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECKED_IF( flag )
+with expansion:
+  false
+
+MiscTests.cpp:<line number>: FAILED:
+  REQUIRE( testCheckedIf( false ) )
+with expansion:
+  false
+
+-------------------------------------------------------------------------------
+comparisons between const int variables
+-------------------------------------------------------------------------------
+ConditionTests.cpp:<line number>
+...............................................................................
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( unsigned_char_var == 1 )
+with expansion:
+  1 == 1
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( unsigned_short_var == 1 )
+with expansion:
+  1 == 1
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( unsigned_int_var == 1 )
+with expansion:
+  1 == 1
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( unsigned_long_var == 1 )
+with expansion:
+  1 == 1
+
+-------------------------------------------------------------------------------
+comparisons between int variables
+-------------------------------------------------------------------------------
+ConditionTests.cpp:<line number>
+...............................................................................
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( long_var == unsigned_char_var )
+with expansion:
+  1 == 1
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( long_var == unsigned_short_var )
+with expansion:
+  1 == 1
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( long_var == unsigned_int_var )
+with expansion:
+  1 == 1
+
+ConditionTests.cpp:<line number>:
+PASSED:
+  REQUIRE( long_var == unsigned_long_var )
+with expansion:
+  1 == 1
+
+-------------------------------------------------------------------------------
+even more nested SECTION tests
+  c
+  d (leaf)
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+
+-------------------------------------------------------------------------------
+even more nested SECTION tests
+  c
+  e (leaf)
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+
+-------------------------------------------------------------------------------
+even more nested SECTION tests
+  f (leaf)
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+
+-------------------------------------------------------------------------------
+just failure
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+MessageTests.cpp:<line number>: FAILED:
+explicitly with message:
+  Previous info should not be seen
+
+-------------------------------------------------------------------------------
+long long
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.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
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECK( b > a )
+with expansion:
+  0 > 1
+
+-------------------------------------------------------------------------------
+looped tests
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECK( ( fib[i] % 2 ) == 0 )
+with expansion:
+  1 == 0
+with message:
+  Testing if fib[0] (1) is even
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECK( ( fib[i] % 2 ) == 0 )
+with expansion:
+  1 == 0
+with message:
+  Testing if fib[1] (1) is even
+
+MiscTests.cpp:<line number>:
+PASSED:
+  CHECK( ( fib[i] % 2 ) == 0 )
+with expansion:
+  0 == 0
+with message:
+  Testing if fib[2] (2) is even
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECK( ( fib[i] % 2 ) == 0 )
+with expansion:
+  1 == 0
+with message:
+  Testing if fib[3] (3) is even
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECK( ( fib[i] % 2 ) == 0 )
+with expansion:
+  1 == 0
+with message:
+  Testing if fib[4] (5) is even
+
+MiscTests.cpp:<line number>:
+PASSED:
+  CHECK( ( fib[i] % 2 ) == 0 )
+with expansion:
+  0 == 0
+with message:
+  Testing if fib[5] (8) is even
+
+MiscTests.cpp:<line number>: FAILED:
+  CHECK( ( fib[i] % 2 ) == 0 )
+with expansion:
+  1 == 0
+with message:
+  Testing if fib[6] (13) is even
+
+MiscTests.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
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+  REQUIRE( a == b )
+with expansion:
+  1 == 2
+
+-------------------------------------------------------------------------------
+more nested SECTION tests
+  s1
+  s3
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( a != b )
+with expansion:
+  1 != 2
+
+-------------------------------------------------------------------------------
+more nested SECTION tests
+  s1
+  s4
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( a < b )
+with expansion:
+  1 < 2
+
+-------------------------------------------------------------------------------
+nested SECTION tests
+  s1
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( a != b )
+with expansion:
+  1 != 2
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( b != a )
+with expansion:
+  2 != 1
+
+-------------------------------------------------------------------------------
+nested SECTION tests
+  s1
+  s2
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( a != b )
+with expansion:
+  1 != 2
+
+-------------------------------------------------------------------------------
+non streamable - with conv. op
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+  REQUIRE( s == "7" )
+with expansion:
+  "7" == "7"
+
+-------------------------------------------------------------------------------
+not allowed
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+
+-------------------------------------------------------------------------------
+null strings
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( makeString( false ) != static_cast<char*>(nullptr) )
+with expansion:
+  "valid string" != {null string}
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( makeString( true ) == static_cast<char*>(nullptr) )
+with expansion:
+  {null string} == {null string}
+
+-------------------------------------------------------------------------------
+null_ptr
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+  REQUIRE( ptr.get() == nullptr )
+with expansion:
+  NULL == nullptr
+
+-------------------------------------------------------------------------------
+pair<pair<int,const char *,pair<std::string,int> > -> toString
+-------------------------------------------------------------------------------
+ToStringPair.cpp:<line number>
+...............................................................................
+
+ToStringPair.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" )
+with expansion:
+  "{ { 42, "Arthur" }, { "Ford", 24 } }"
+  ==
+  "{ { 42, "Arthur" }, { "Ford", 24 } }"
+
+-------------------------------------------------------------------------------
+pointer to class
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+  REQUIRE( p == 0 )
+with expansion:
+  NULL == 0
+
+-------------------------------------------------------------------------------
+random SECTION tests
+  s1
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( a != b )
+with expansion:
+  1 != 2
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( b != a )
+with expansion:
+  2 != 1
+
+-------------------------------------------------------------------------------
+random SECTION tests
+  s2
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( a != b )
+with expansion:
+  1 != 2
+
+-------------------------------------------------------------------------------
+replaceInPlace
+  replace single char
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( replaceInPlace( letters, "b", "z" ) )
+with expansion:
+  true
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( letters == "azcdefcg" )
+with expansion:
+  "azcdefcg" == "azcdefcg"
+
+-------------------------------------------------------------------------------
+replaceInPlace
+  replace two chars
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( replaceInPlace( letters, "c", "z" ) )
+with expansion:
+  true
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( letters == "abzdefzg" )
+with expansion:
+  "abzdefzg" == "abzdefzg"
+
+-------------------------------------------------------------------------------
+replaceInPlace
+  replace first char
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( replaceInPlace( letters, "a", "z" ) )
+with expansion:
+  true
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( letters == "zbcdefcg" )
+with expansion:
+  "zbcdefcg" == "zbcdefcg"
+
+-------------------------------------------------------------------------------
+replaceInPlace
+  replace last char
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( replaceInPlace( letters, "g", "z" ) )
+with expansion:
+  true
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( letters == "abcdefcz" )
+with expansion:
+  "abcdefcz" == "abcdefcz"
+
+-------------------------------------------------------------------------------
+replaceInPlace
+  replace all chars
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( replaceInPlace( letters, letters, "replaced" ) )
+with expansion:
+  true
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( letters == "replaced" )
+with expansion:
+  "replaced" == "replaced"
+
+-------------------------------------------------------------------------------
+replaceInPlace
+  replace no chars
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_FALSE( replaceInPlace( letters, "x", "z" ) )
+with expansion:
+  !false
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( letters == letters )
+with expansion:
+  "abcdefcg" == "abcdefcg"
+
+-------------------------------------------------------------------------------
+replaceInPlace
+  escape '
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( replaceInPlace( s, "'", "|'" ) )
+with expansion:
+  true
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( s == "didn|'t" )
+with expansion:
+  "didn|'t" == "didn|'t"
+
+-------------------------------------------------------------------------------
+send a single char to INFO
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+  REQUIRE( false )
+with message:
+  3
+
+-------------------------------------------------------------------------------
+sends information to INFO
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+MessageTests.cpp:<line number>: FAILED:
+  REQUIRE( false )
+with messages:
+  hi
+  i := 7
+
+-------------------------------------------------------------------------------
+std::pair<int,const std::string> -> toString
+-------------------------------------------------------------------------------
+ToStringPair.cpp:<line number>
+...............................................................................
+
+ToStringPair.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(value) == "{ 34, \"xyzzy\" }" )
+with expansion:
+  "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }"
+
+-------------------------------------------------------------------------------
+std::pair<int,std::string> -> toString
+-------------------------------------------------------------------------------
+ToStringPair.cpp:<line number>
+...............................................................................
+
+ToStringPair.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( value ) == "{ 34, \"xyzzy\" }" )
+with expansion:
+  "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }"
+
+-------------------------------------------------------------------------------
+std::vector<std::pair<std::string,int> > -> toString
+-------------------------------------------------------------------------------
+ToStringPair.cpp:<line number>
+...............................................................................
+
+ToStringPair.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( pr ) == "{ { \"green\", 55 } }" )
+with expansion:
+  "{ { "green", 55 } }"
+  ==
+  "{ { "green", 55 } }"
+
+-------------------------------------------------------------------------------
+string literals of different sizes can be compared
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>: FAILED:
+  REQUIRE( std::string( "first" ) == "second" )
+with expansion:
+  "first" == "second"
+
+-------------------------------------------------------------------------------
+toString on const wchar_t const pointer returns the string contents
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  CHECK( result == "\"wide load\"" )
+with expansion:
+  ""wide load"" == ""wide load""
+
+-------------------------------------------------------------------------------
+toString on const wchar_t pointer returns the string contents
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  CHECK( result == "\"wide load\"" )
+with expansion:
+  ""wide load"" == ""wide load""
+
+-------------------------------------------------------------------------------
+toString on wchar_t const pointer returns the string contents
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  CHECK( result == "\"wide load\"" )
+with expansion:
+  ""wide load"" == ""wide load""
+
+-------------------------------------------------------------------------------
+toString on wchar_t returns the string contents
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  CHECK( result == "\"wide load\"" )
+with expansion:
+  ""wide load"" == ""wide load""
+
+-------------------------------------------------------------------------------
+toString( has_maker )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( item ) == "StringMaker<has_maker>" )
+with expansion:
+  "StringMaker<has_maker>"
+  ==
+  "StringMaker<has_maker>"
+
+-------------------------------------------------------------------------------
+toString( has_maker_and_toString )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( item ) == "toString( has_maker_and_toString )" )
+with expansion:
+  "toString( has_maker_and_toString )"
+  ==
+  "toString( has_maker_and_toString )"
+
+-------------------------------------------------------------------------------
+toString( has_toString )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( item ) == "toString( has_toString )" )
+with expansion:
+  "toString( has_toString )"
+  ==
+  "toString( has_toString )"
+
+-------------------------------------------------------------------------------
+toString( vectors<has_maker )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker> }" )
+with expansion:
+  "{ StringMaker<has_maker> }"
+  ==
+  "{ StringMaker<has_maker> }"
+
+-------------------------------------------------------------------------------
+toString( vectors<has_maker_and_toString )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker_and_toString> }" )
+with expansion:
+  "{ StringMaker<has_maker_and_toString> }"
+  ==
+  "{ StringMaker<has_maker_and_toString> }"
+
+-------------------------------------------------------------------------------
+toString( vectors<has_toString )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( v ) == "{ {?} }" )
+with expansion:
+  "{ {?} }" == "{ {?} }"
+
+-------------------------------------------------------------------------------
+toString(enum class w/operator<<)
+-------------------------------------------------------------------------------
+EnumToString.cpp:<line number>
+...............................................................................
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e0) == "E2/V0" )
+with expansion:
+  "E2/V0" == "E2/V0"
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e1) == "E2/V1" )
+with expansion:
+  "E2/V1" == "E2/V1"
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e3) == "Unknown enum value 10" )
+with expansion:
+  "Unknown enum value 10"
+  ==
+  "Unknown enum value 10"
+
+-------------------------------------------------------------------------------
+toString(enum class)
+-------------------------------------------------------------------------------
+EnumToString.cpp:<line number>
+...............................................................................
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e0) == "0" )
+with expansion:
+  "0" == "0"
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e1) == "1" )
+with expansion:
+  "1" == "1"
+
+-------------------------------------------------------------------------------
+toString(enum w/operator<<)
+-------------------------------------------------------------------------------
+EnumToString.cpp:<line number>
+...............................................................................
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e0) == "E2{0}" )
+with expansion:
+  "E2{0}" == "E2{0}"
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e1) == "E2{1}" )
+with expansion:
+  "E2{1}" == "E2{1}"
+
+-------------------------------------------------------------------------------
+toString(enum)
+-------------------------------------------------------------------------------
+EnumToString.cpp:<line number>
+...............................................................................
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e0) == "0" )
+with expansion:
+  "0" == "0"
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e1) == "1" )
+with expansion:
+  "1" == "1"
+
+-------------------------------------------------------------------------------
+tuple<>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+  CHECK( "{ }" == Catch::toString(type{}) )
+with expansion:
+  "{ }" == "{ }"
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+  CHECK( "{ }" == Catch::toString(value) )
+with expansion:
+  "{ }" == "{ }"
+
+-------------------------------------------------------------------------------
+tuple<float,int>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+  CHECK( "1.2f" == Catch::toString(float(1.2)) )
+with expansion:
+  "1.2f" == "1.2f"
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+  CHECK( "{ 1.2f, 0 }" == Catch::toString(type{1.2,0}) )
+with expansion:
+  "{ 1.2f, 0 }" == "{ 1.2f, 0 }"
+
+-------------------------------------------------------------------------------
+tuple<int>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+  CHECK( "{ 0 }" == Catch::toString(type{0}) )
+with expansion:
+  "{ 0 }" == "{ 0 }"
+
+-------------------------------------------------------------------------------
+tuple<nullptr,int,const char *>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+  CHECK( "{ nullptr, 42, \"Catch me\" }" == Catch::toString(value) )
+with expansion:
+  "{ nullptr, 42, "Catch me" }"
+  ==
+  "{ nullptr, 42, "Catch me" }"
+
+-------------------------------------------------------------------------------
+tuple<string,string>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+  CHECK( "{ \"hello\", \"world\" }" == Catch::toString(type{"hello","world"}) )
+with expansion:
+  "{ "hello", "world" }"
+  ==
+  "{ "hello", "world" }"
+
+-------------------------------------------------------------------------------
+tuple<tuple<int>,tuple<>,float>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+  CHECK( "{ { 42 }, { }, 1.2f }" == Catch::toString(value) )
+with expansion:
+  "{ { 42 }, { }, 1.2f }"
+  ==
+  "{ { 42 }, { }, 1.2f }"
+
+-------------------------------------------------------------------------------
+vec<vec<string,alloc>> -> toString
+-------------------------------------------------------------------------------
+ToStringVector.cpp:<line number>
+...............................................................................
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(v) == "{  }" )
+with expansion:
+  "{  }" == "{  }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(v) == "{ { \"hello\" }, { \"world\" } }" )
+with expansion:
+  "{ { "hello" }, { "world" } }"
+  ==
+  "{ { "hello" }, { "world" } }"
+
+-------------------------------------------------------------------------------
+vector<int,allocator> -> toString
+-------------------------------------------------------------------------------
+ToStringVector.cpp:<line number>
+...............................................................................
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{  }" )
+with expansion:
+  "{  }" == "{  }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{ 42 }" )
+with expansion:
+  "{ 42 }" == "{ 42 }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{ 42, 250 }" )
+with expansion:
+  "{ 42, 250 }" == "{ 42, 250 }"
+
+-------------------------------------------------------------------------------
+vector<int> -> toString
+-------------------------------------------------------------------------------
+ToStringVector.cpp:<line number>
+...............................................................................
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{  }" )
+with expansion:
+  "{  }" == "{  }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{ 42 }" )
+with expansion:
+  "{ 42 }" == "{ 42 }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{ 42, 250 }" )
+with expansion:
+  "{ 42, 250 }" == "{ 42, 250 }"
+
+-------------------------------------------------------------------------------
+vector<string> -> toString
+-------------------------------------------------------------------------------
+ToStringVector.cpp:<line number>
+...............................................................................
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{  }" )
+with expansion:
+  "{  }" == "{  }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{ \"hello\" }" )
+with expansion:
+  "{ "hello" }" == "{ "hello" }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{ \"hello\", \"world\" }" )
+with expansion:
+  "{ "hello", "world" }"
+  ==
+  "{ "hello", "world" }"
+
+-------------------------------------------------------------------------------
+vectors can be sized and resized
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( v.size() == 5 )
+with expansion:
+  5 == 5
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( v.capacity() >= 5 )
+with expansion:
+  5 >= 5
+
+-------------------------------------------------------------------------------
+vectors can be sized and resized
+  resizing bigger changes size and capacity
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( v.size() == 10 )
+with expansion:
+  10 == 10
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( v.capacity() >= 10 )
+with expansion:
+  10 >= 10
+
+-------------------------------------------------------------------------------
+vectors can be sized and resized
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( v.size() == 5 )
+with expansion:
+  5 == 5
+
+MiscTests.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
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( v.size() == 0 )
+with expansion:
+  0 == 0
+
+MiscTests.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
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( v.capacity() == 0 )
+with expansion:
+  0 == 0
+
+-------------------------------------------------------------------------------
+vectors can be sized and resized
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( v.size() == 5 )
+with expansion:
+  5 == 5
+
+MiscTests.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
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( v.size() == 5 )
+with expansion:
+  5 == 5
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( v.capacity() >= 10 )
+with expansion:
+  10 >= 10
+
+-------------------------------------------------------------------------------
+vectors can be sized and resized
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( v.size() == 5 )
+with expansion:
+  5 == 5
+
+MiscTests.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
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( v.size() == 5 )
+with expansion:
+  5 == 5
+
+MiscTests.cpp:<line number>:
+PASSED:
+  REQUIRE( v.capacity() >= 5 )
+with expansion:
+  5 >= 5
+
+-------------------------------------------------------------------------------
+xmlentitycheck
+  embedded xml
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+
+-------------------------------------------------------------------------------
+xmlentitycheck
+  encoded chars
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
 
 ===============================================================================
 test cases: 169 | 124 passed | 43 failed |  2 failed as expected
diff --git a/projects/SelfTest/Baselines/console.swa4.approved.txt b/projects/SelfTest/Baselines/console.swa4.approved.txt
index 76af9f5..5334abc 100644
--- a/projects/SelfTest/Baselines/console.swa4.approved.txt
+++ b/projects/SelfTest/Baselines/console.swa4.approved.txt
@@ -4,612 +4,37 @@
 Run with -? for options
 
 -------------------------------------------------------------------------------
-toString(enum)
+# A test name that starts with a #
 -------------------------------------------------------------------------------
-EnumToString.cpp:<line number>
+MiscTests.cpp:<line number>
 ...............................................................................
 
-EnumToString.cpp:<line number>:
+MiscTests.cpp:<line number>:
 PASSED:
-  CHECK( Catch::toString(e0) == "0" )
-with expansion:
-  "0" == "0"
-
-EnumToString.cpp:<line number>:
-PASSED:
-  CHECK( Catch::toString(e1) == "1" )
-with expansion:
-  "1" == "1"
+with message:
+  yay
 
 -------------------------------------------------------------------------------
-toString(enum w/operator<<)
--------------------------------------------------------------------------------
-EnumToString.cpp:<line number>
-...............................................................................
-
-EnumToString.cpp:<line number>:
-PASSED:
-  CHECK( Catch::toString(e0) == "E2{0}" )
-with expansion:
-  "E2{0}" == "E2{0}"
-
-EnumToString.cpp:<line number>:
-PASSED:
-  CHECK( Catch::toString(e1) == "E2{1}" )
-with expansion:
-  "E2{1}" == "E2{1}"
-
--------------------------------------------------------------------------------
-toString(enum class)
--------------------------------------------------------------------------------
-EnumToString.cpp:<line number>
-...............................................................................
-
-EnumToString.cpp:<line number>:
-PASSED:
-  CHECK( Catch::toString(e0) == "0" )
-with expansion:
-  "0" == "0"
-
-EnumToString.cpp:<line number>:
-PASSED:
-  CHECK( Catch::toString(e1) == "1" )
-with expansion:
-  "1" == "1"
-
--------------------------------------------------------------------------------
-toString(enum class w/operator<<)
--------------------------------------------------------------------------------
-EnumToString.cpp:<line number>
-...............................................................................
-
-EnumToString.cpp:<line number>:
-PASSED:
-  CHECK( Catch::toString(e0) == "E2/V0" )
-with expansion:
-  "E2/V0" == "E2/V0"
-
-EnumToString.cpp:<line number>:
-PASSED:
-  CHECK( Catch::toString(e1) == "E2/V1" )
-with expansion:
-  "E2/V1" == "E2/V1"
-
-EnumToString.cpp:<line number>:
-PASSED:
-  CHECK( Catch::toString(e3) == "Unknown enum value 10" )
-with expansion:
-  "Unknown enum value 10"
-  ==
-  "Unknown enum value 10"
-
--------------------------------------------------------------------------------
-Some simple comparisons between doubles
--------------------------------------------------------------------------------
-ApproxTests.cpp:<line number>
-...............................................................................
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( d == Approx( 1.23 ) )
-with expansion:
-  1.23 == Approx( 1.23 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( d != Approx( 1.22 ) )
-with expansion:
-  1.23 != Approx( 1.22 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( d != Approx( 1.24 ) )
-with expansion:
-  1.23 != Approx( 1.24 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( Approx( d ) == 1.23 )
-with expansion:
-  Approx( 1.23 ) == 1.23
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( Approx( d ) != 1.22 )
-with expansion:
-  Approx( 1.23 ) != 1.22
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( Approx( d ) != 1.24 )
-with expansion:
-  Approx( 1.23 ) != 1.24
-
--------------------------------------------------------------------------------
-Approximate comparisons with different epsilons
--------------------------------------------------------------------------------
-ApproxTests.cpp:<line number>
-...............................................................................
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( d != Approx( 1.231 ) )
-with expansion:
-  1.23 != Approx( 1.231 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( d == Approx( 1.231 ).epsilon( 0.1 ) )
-with expansion:
-  1.23 == Approx( 1.231 )
-
--------------------------------------------------------------------------------
-Approximate comparisons with floats
--------------------------------------------------------------------------------
-ApproxTests.cpp:<line number>
-...............................................................................
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( 1.23f == Approx( 1.23f ) )
-with expansion:
-  1.23f == Approx( 1.2300000191 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( 0.0f == Approx( 0.0f ) )
-with expansion:
-  0.0f == Approx( 0.0 )
-
--------------------------------------------------------------------------------
-Approximate comparisons with ints
--------------------------------------------------------------------------------
-ApproxTests.cpp:<line number>
-...............................................................................
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( 1 == Approx( 1 ) )
-with expansion:
-  1 == Approx( 1.0 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( 0 == Approx( 0 ) )
-with expansion:
-  0 == Approx( 0.0 )
-
--------------------------------------------------------------------------------
-Approximate comparisons with mixed numeric types
--------------------------------------------------------------------------------
-ApproxTests.cpp:<line number>
-...............................................................................
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( 1.0f == Approx( 1 ) )
-with expansion:
-  1.0f == Approx( 1.0 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( 0 == Approx( dZero) )
-with expansion:
-  0 == Approx( 0.0 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( 0 == Approx( dSmall ).epsilon( 0.001 ) )
-with expansion:
-  0 == Approx( 0.00001 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( 1.234f == Approx( dMedium ) )
-with expansion:
-  1.234f == Approx( 1.234 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( dMedium == Approx( 1.234f ) )
-with expansion:
-  1.234 == Approx( 1.2339999676 )
-
--------------------------------------------------------------------------------
-Use a custom approx
--------------------------------------------------------------------------------
-ApproxTests.cpp:<line number>
-...............................................................................
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( d == approx( 1.23 ) )
-with expansion:
-  1.23 == Approx( 1.23 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( d == approx( 1.22 ) )
-with expansion:
-  1.23 == Approx( 1.22 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( d == approx( 1.24 ) )
-with expansion:
-  1.23 == Approx( 1.24 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( d != approx( 1.25 ) )
-with expansion:
-  1.23 != Approx( 1.25 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( approx( d ) == 1.23 )
-with expansion:
-  Approx( 1.23 ) == 1.23
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( approx( d ) == 1.22 )
-with expansion:
-  Approx( 1.23 ) == 1.22
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( approx( d ) == 1.24 )
-with expansion:
-  Approx( 1.23 ) == 1.24
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( approx( d ) != 1.25 )
-with expansion:
-  Approx( 1.23 ) != 1.25
-
--------------------------------------------------------------------------------
-Approximate PI
--------------------------------------------------------------------------------
-ApproxTests.cpp:<line number>
-...............................................................................
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) )
-with expansion:
-  3.1428571429 == Approx( 3.141 )
-
-ApproxTests.cpp:<line number>:
-PASSED:
-  REQUIRE( divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) )
-with expansion:
-  3.1428571429 != Approx( 3.141 )
-
--------------------------------------------------------------------------------
-A METHOD_AS_TEST_CASE based test run that succeeds
--------------------------------------------------------------------------------
-ClassTests.cpp:<line number>
-...............................................................................
-
-ClassTests.cpp:<line number>:
-PASSED:
-  REQUIRE( s == "hello" )
-with expansion:
-  "hello" == "hello"
-
--------------------------------------------------------------------------------
-A METHOD_AS_TEST_CASE based test run that fails
--------------------------------------------------------------------------------
-ClassTests.cpp:<line number>
-...............................................................................
-
-ClassTests.cpp:<line number>: FAILED:
-  REQUIRE( s == "world" )
-with expansion:
-  "hello" == "world"
-
--------------------------------------------------------------------------------
-A TEST_CASE_METHOD based test run that succeeds
--------------------------------------------------------------------------------
-ClassTests.cpp:<line number>
-...............................................................................
-
-ClassTests.cpp:<line number>:
-PASSED:
-  REQUIRE( m_a == 1 )
-with expansion:
-  1 == 1
-
--------------------------------------------------------------------------------
-A TEST_CASE_METHOD based test run that fails
--------------------------------------------------------------------------------
-ClassTests.cpp:<line number>
-...............................................................................
-
-ClassTests.cpp:<line number>: FAILED:
-  REQUIRE( m_a == 2 )
-with expansion:
-  1 == 2
-
--------------------------------------------------------------------------------
-Equality checks that should succeed
--------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
-...............................................................................
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven == 7 )
-with expansion:
-  7 == 7
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.float_nine_point_one == Approx( 9.1f ) )
-with expansion:
-  9.1f == Approx( 9.1000003815 )
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.double_pi == Approx( 3.1415926535 ) )
-with expansion:
-  3.1415926535 == Approx( 3.1415926535 )
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello == "hello" )
-with expansion:
-  "hello" == "hello"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( "hello" == data.str_hello )
-with expansion:
-  "hello" == "hello"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello.size() == 5 )
-with expansion:
-  5 == 5
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( x == Approx( 1.3 ) )
-with expansion:
-  1.3 == Approx( 1.3 )
-
--------------------------------------------------------------------------------
-Equality checks that should fail
+'Not' checks that should fail
 -------------------------------------------------------------------------------
 ConditionTests.cpp:<line number>
 ...............................................................................
 
 ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven == 6 )
-with expansion:
-  7 == 6
+  CHECK( false != false )
 
 ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven == 8 )
-with expansion:
-  7 == 8
-
--------------------------------------------------------------------------------
-Inequality checks that should succeed
--------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
-...............................................................................
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven != 6 )
-with expansion:
-  7 != 6
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven != 8 )
-with expansion:
-  7 != 8
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.float_nine_point_one != Approx( 9.11f ) )
-with expansion:
-  9.1f != Approx( 9.1099996567 )
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.float_nine_point_one != Approx( 9.0f ) )
-with expansion:
-  9.1f != Approx( 9.0 )
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.float_nine_point_one != Approx( 1 ) )
-with expansion:
-  9.1f != Approx( 1.0 )
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.float_nine_point_one != Approx( 0 ) )
-with expansion:
-  9.1f != Approx( 0.0 )
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.double_pi != Approx( 3.1415 ) )
-with expansion:
-  3.1415926535 != Approx( 3.1415 )
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello != "goodbye" )
-with expansion:
-  "hello" != "goodbye"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello != "hell" )
-with expansion:
-  "hello" != "hell"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello != "hello1" )
-with expansion:
-  "hello" != "hello1"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello.size() != 6 )
-with expansion:
-  5 != 6
-
--------------------------------------------------------------------------------
-Inequality checks that should fail
--------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
-...............................................................................
+  CHECK( true != true )
 
 ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven != 7 )
+  CHECK( !true )
 with expansion:
-  7 != 7
+  false
 
 ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.float_nine_point_one != Approx( 9.1f ) )
-with expansion:
-  9.1f != Approx( 9.1000003815 )
-
--------------------------------------------------------------------------------
-Ordering comparison checks that should succeed
--------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
-...............................................................................
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven < 8 )
-with expansion:
-  7 < 8
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven > 6 )
-with expansion:
-  7 > 6
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven > 0 )
-with expansion:
-  7 > 0
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven > -1 )
-with expansion:
-  7 > -1
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven >= 7 )
-with expansion:
-  7 >= 7
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven >= 6 )
-with expansion:
-  7 >= 6
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven <= 7 )
-with expansion:
-  7 <= 7
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.int_seven <= 8 )
-with expansion:
-  7 <= 8
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.float_nine_point_one > 9 )
-with expansion:
-  9.1f > 9
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.float_nine_point_one < 10 )
-with expansion:
-  9.1f < 10
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.float_nine_point_one < 9.2 )
-with expansion:
-  9.1f < 9.2
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello <= "hello" )
-with expansion:
-  "hello" <= "hello"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello >= "hello" )
-with expansion:
-  "hello" >= "hello"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello < "hellp" )
-with expansion:
-  "hello" < "hellp"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello < "zebra" )
-with expansion:
-  "hello" < "zebra"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello > "hellm" )
-with expansion:
-  "hello" > "hellm"
-
-ConditionTests.cpp:<line number>:
-PASSED:
-  REQUIRE( data.str_hello > "a" )
-with expansion:
-  "hello" > "a"
-
--------------------------------------------------------------------------------
-Ordering comparison checks that should fail
--------------------------------------------------------------------------------
-ConditionTests.cpp:<line number>
-...............................................................................
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven > 7 )
-with expansion:
-  7 > 7
-
-ConditionTests.cpp:<line number>: FAILED:
-  CHECK( data.int_seven < 7 )
-with expansion:
-  7 < 7
+  CHECK_FALSE( true )
 
 ===============================================================================
-test cases: 21 | 16 passed | 3 failed | 2 failed as expected
-assertions: 81 | 73 passed | 4 failed | 4 failed as expected
+test cases: 2 | 1 passed | 1 failed
+assertions: 5 | 1 passed | 4 failed
 
diff --git a/projects/SelfTest/Baselines/junit.sw.approved.txt b/projects/SelfTest/Baselines/junit.sw.approved.txt
index 3fd998f..02ca9f6 100644
--- a/projects/SelfTest/Baselines/junit.sw.approved.txt
+++ b/projects/SelfTest/Baselines/junit.sw.approved.txt
@@ -1,30 +1,119 @@
 <?xml version="1.1" encoding="UTF-8"?>
 <testsuites>
   <testsuite name="CatchSelfTest" errors="13" failures="68" tests="924" hostname="tbd" time="{duration}" timestamp="tbd">
-    <testcase classname="global" name="toString(enum)" time="{duration}"/>
-    <testcase classname="global" name="toString(enum w/operator&lt;&lt;)" time="{duration}"/>
-    <testcase classname="global" name="toString(enum class)" time="{duration}"/>
-    <testcase classname="global" name="toString(enum class w/operator&lt;&lt;)" time="{duration}"/>
-    <testcase classname="global" name="Some simple comparisons between doubles" time="{duration}"/>
-    <testcase classname="global" name="Approximate comparisons with different epsilons" time="{duration}"/>
-    <testcase classname="global" name="Approximate comparisons with floats" time="{duration}"/>
-    <testcase classname="global" name="Approximate comparisons with ints" time="{duration}"/>
-    <testcase classname="global" name="Approximate comparisons with mixed numeric types" time="{duration}"/>
-    <testcase classname="global" name="Use a custom approx" time="{duration}"/>
-    <testcase classname="global" name="Approximate PI" time="{duration}"/>
-    <testcase classname="TestClass" name="A METHOD_AS_TEST_CASE based test run that succeeds" time="{duration}"/>
+    <testcase classname="global" name="# A test name that starts with a #" time="{duration}"/>
+    <testcase classname="global" name="'Not' checks that should fail" time="{duration}">
+      <failure message="false != false" type="CHECK">
+ConditionTests.cpp:<line number>
+      </failure>
+      <failure message="true != true" type="CHECK">
+ConditionTests.cpp:<line number>
+      </failure>
+      <failure message="false" type="CHECK">
+ConditionTests.cpp:<line number>
+      </failure>
+      <failure message="!true" type="CHECK_FALSE">
+ConditionTests.cpp:<line number>
+      </failure>
+      <failure message="false" type="CHECK">
+ConditionTests.cpp:<line number>
+      </failure>
+      <failure message="!true" type="CHECK_FALSE">
+ConditionTests.cpp:<line number>
+      </failure>
+      <failure message="false" type="CHECK">
+ConditionTests.cpp:<line number>
+      </failure>
+      <failure message="!(1 == 1)" type="CHECK_FALSE">
+ConditionTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="'Not' checks that should succeed" time="{duration}"/>
+    <testcase classname="(unimplemented) static bools can be evaluated" name="compare to true" time="{duration}"/>
+    <testcase classname="(unimplemented) static bools can be evaluated" name="compare to false" time="{duration}"/>
+    <testcase classname="(unimplemented) static bools can be evaluated" name="negation" time="{duration}"/>
+    <testcase classname="(unimplemented) static bools can be evaluated" name="double negation" time="{duration}"/>
+    <testcase classname="(unimplemented) static bools can be evaluated" name="direct" time="{duration}"/>
     <testcase classname="TestClass" name="A METHOD_AS_TEST_CASE based test run that fails" time="{duration}">
       <failure message="&quot;hello&quot; == &quot;world&quot;" type="REQUIRE">
 ClassTests.cpp:<line number>
       </failure>
     </testcase>
-    <testcase classname="Fixture" name="A TEST_CASE_METHOD based test run that succeeds" time="{duration}"/>
+    <testcase classname="TestClass" name="A METHOD_AS_TEST_CASE based test run that succeeds" time="{duration}"/>
     <testcase classname="Fixture" name="A TEST_CASE_METHOD based test run that fails" time="{duration}">
       <failure message="1 == 2" type="REQUIRE">
 ClassTests.cpp:<line number>
       </failure>
     </testcase>
-    <testcase classname="global" name="Equality checks that should succeed" time="{duration}"/>
+    <testcase classname="Fixture" name="A TEST_CASE_METHOD based test run that succeeds" time="{duration}"/>
+    <testcase classname="A couple of nested sections followed by a failure" name="root" time="{duration}">
+      <failure type="FAIL">
+to infinity and beyond
+MiscTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="A couple of nested sections followed by a failure" name="Outer/Inner" time="{duration}"/>
+    <testcase classname="global" name="A failing expression with a non streamable type is still captured" time="{duration}">
+      <failure message="0x<hex digits> == 0x<hex digits>" type="CHECK">
+TrickyTests.cpp:<line number>
+      </failure>
+      <failure message="{?} == {?}" type="CHECK">
+TrickyTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="AllOf matcher" time="{duration}"/>
+    <testcase classname="global" name="An expression with side-effects should only be evaluated once" time="{duration}"/>
+    <testcase classname="global" name="An unchecked exception reports the line of the last assertion" time="{duration}">
+      <error message="{Unknown expression after the reported line}">
+unexpected exception
+ExceptionTests.cpp:<line number>
+      </error>
+    </testcase>
+    <testcase classname="global" name="Anonymous test case 1" time="{duration}"/>
+    <testcase classname="global" name="AnyOf matcher" time="{duration}"/>
+    <testcase classname="global" name="Approximate PI" time="{duration}"/>
+    <testcase classname="global" name="Approximate comparisons with different epsilons" time="{duration}"/>
+    <testcase classname="global" name="Approximate comparisons with floats" time="{duration}"/>
+    <testcase classname="global" name="Approximate comparisons with ints" time="{duration}"/>
+    <testcase classname="global" name="Approximate comparisons with mixed numeric types" time="{duration}"/>
+    <testcase classname="Assertions then sections" name="root" time="{duration}"/>
+    <testcase classname="Assertions then sections" name="A section" time="{duration}"/>
+    <testcase classname="Assertions then sections" name="A section/Another section" time="{duration}"/>
+    <testcase classname="Assertions then sections" name="A section/Another other section" time="{duration}"/>
+    <testcase classname="global" name="Comparing function pointers" time="{duration}"/>
+    <testcase classname="global" name="Comparing member function pointers" time="{duration}"/>
+    <testcase classname="global" name="Comparisons between ints where one side is computed" time="{duration}"/>
+    <testcase classname="global" name="Comparisons between unsigned ints and negative signed ints match c++ standard behaviour" time="{duration}"/>
+    <testcase classname="global" name="Comparisons with int literals don't warn when mixing signed/ unsigned" time="{duration}"/>
+    <testcase classname="global" name="Contains string matcher" time="{duration}">
+      <failure message="&quot;this string contains 'abc' as a substring&quot; contains: &quot;not there&quot;" type="CHECK_THAT">
+MiscTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="Custom exceptions can be translated when testing for nothrow" time="{duration}">
+      <error message="throwCustom()" type="REQUIRE_NOTHROW">
+custom exception - not std
+ExceptionTests.cpp:<line number>
+      </error>
+    </testcase>
+    <testcase classname="global" name="Custom exceptions can be translated when testing for throwing as something else" time="{duration}">
+      <error message="throwCustom()" type="REQUIRE_THROWS_AS">
+custom exception - not std
+ExceptionTests.cpp:<line number>
+      </error>
+    </testcase>
+    <testcase classname="global" name="Custom std-exceptions can be custom translated" time="{duration}">
+      <error type="TEST_CASE">
+custom std exception
+ExceptionTests.cpp:<line number>
+      </error>
+    </testcase>
+    <testcase classname="global" name="Demonstrate that a non-const == is not used" time="{duration}"/>
+    <testcase classname="global" name="EndsWith string matcher" time="{duration}">
+      <failure message="&quot;this string contains 'abc' as a substring&quot; ends with: &quot;this&quot;" type="CHECK_THAT">
+MiscTests.cpp:<line number>
+      </failure>
+    </testcase>
     <testcase classname="global" name="Equality checks that should fail" time="{duration}">
       <failure message="7 == 6" type="CHECK">
 ConditionTests.cpp:<line number>
@@ -66,7 +155,62 @@
 ConditionTests.cpp:<line number>
       </failure>
     </testcase>
-    <testcase classname="global" name="Inequality checks that should succeed" time="{duration}"/>
+    <testcase classname="global" name="Equality checks that should succeed" time="{duration}"/>
+    <testcase classname="global" name="Equals" time="{duration}"/>
+    <testcase classname="global" name="Equals string matcher" time="{duration}">
+      <failure message="&quot;this string contains 'abc' as a substring&quot; equals: &quot;something else&quot;" type="CHECK_THAT">
+MiscTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="Equals string matcher, with NULL" time="{duration}"/>
+    <testcase classname="Exception messages can be tested for" name="exact match" time="{duration}"/>
+    <testcase classname="Exception messages can be tested for" name="different case" time="{duration}"/>
+    <testcase classname="Exception messages can be tested for" name="wildcarded" time="{duration}"/>
+    <testcase classname="global" name="Expected exceptions that don't throw or unexpected exceptions fail the test" time="{duration}">
+      <error message="thisThrows()" type="CHECK_THROWS_AS">
+expected exception
+ExceptionTests.cpp:<line number>
+      </error>
+      <failure message="thisDoesntThrow()" type="CHECK_THROWS_AS">
+ExceptionTests.cpp:<line number>
+      </failure>
+      <error message="thisThrows()" type="CHECK_NOTHROW">
+expected exception
+ExceptionTests.cpp:<line number>
+      </error>
+    </testcase>
+    <testcase classname="global" name="FAIL aborts the test" time="{duration}">
+      <failure type="FAIL">
+This is a failure
+MessageTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="FAIL does not require an argument" time="{duration}">
+      <failure type="FAIL">
+MessageTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="Factorials are computed" time="{duration}"/>
+    <testcase classname="global" name="Generator over a range of pairs" time="{duration}"/>
+    <testcase classname="global" name="Generators over two ranges" time="{duration}"/>
+    <testcase classname="global" name="INFO and WARN do not abort tests" time="{duration}"/>
+    <testcase classname="global" name="INFO gets logged on failure" time="{duration}">
+      <failure message="2 == 1" type="REQUIRE">
+this message should be logged
+so should this
+MessageTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="INFO gets logged on failure, even if captured before successful assertions" time="{duration}">
+      <failure message="2 == 1" type="CHECK">
+this message should be logged
+MessageTests.cpp:<line number>
+      </failure>
+      <failure message="2 == 0" type="CHECK">
+and this, but later
+MessageTests.cpp:<line number>
+      </failure>
+    </testcase>
     <testcase classname="global" name="Inequality checks that should fail" time="{duration}">
       <failure message="7 != 7" type="CHECK">
 ConditionTests.cpp:<line number>
@@ -84,7 +228,50 @@
 ConditionTests.cpp:<line number>
       </failure>
     </testcase>
-    <testcase classname="global" name="Ordering comparison checks that should succeed" time="{duration}"/>
+    <testcase classname="global" name="Inequality checks that should succeed" time="{duration}"/>
+    <testcase classname="Long strings can be wrapped" name="plain string/No wrapping" time="{duration}"/>
+    <testcase classname="Long strings can be wrapped" name="plain string/Wrapped once" time="{duration}"/>
+    <testcase classname="Long strings can be wrapped" name="plain string/Wrapped twice" time="{duration}"/>
+    <testcase classname="Long strings can be wrapped" name="plain string/Wrapped three times" time="{duration}"/>
+    <testcase classname="Long strings can be wrapped" name="plain string/Short wrap" time="{duration}"/>
+    <testcase classname="Long strings can be wrapped" name="plain string/As container" time="{duration}"/>
+    <testcase classname="Long strings can be wrapped" name="plain string/Indent first line differently" time="{duration}"/>
+    <testcase classname="Long strings can be wrapped" name="With newlines/No wrapping" time="{duration}"/>
+    <testcase classname="Long strings can be wrapped" name="With newlines/Trailing newline" time="{duration}"/>
+    <testcase classname="Long strings can be wrapped" name="With newlines/Wrapped once" time="{duration}"/>
+    <testcase classname="Long strings can be wrapped" name="With newlines/Wrapped twice" time="{duration}"/>
+    <testcase classname="Long strings can be wrapped" name="With tabs" time="{duration}"/>
+    <testcase classname="global" name="Long text is truncted" time="{duration}"/>
+    <testcase classname="global" name="ManuallyRegistered" time="{duration}"/>
+    <testcase classname="global" name="Matchers can be (AllOf) composed with the &amp;&amp; operator" time="{duration}"/>
+    <testcase classname="global" name="Matchers can be (AnyOf) composed with the || operator" time="{duration}"/>
+    <testcase classname="global" name="Matchers can be composed with both &amp;&amp; and ||" time="{duration}"/>
+    <testcase classname="global" name="Matchers can be composed with both &amp;&amp; and || - failing" time="{duration}">
+      <failure message="&quot;this string contains 'abc' as a substring&quot; ( ( contains: &quot;string&quot; or contains: &quot;different&quot; ) and contains: &quot;random&quot; )" type="CHECK_THAT">
+MiscTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="Matchers can be negated (Not) with the ! operator" time="{duration}"/>
+    <testcase classname="global" name="Matchers can be negated (Not) with the ! operator - failing" time="{duration}">
+      <failure message="&quot;this string contains 'abc' as a substring&quot; not contains: &quot;substring&quot;" type="CHECK_THAT">
+MiscTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="Mismatching exception messages failing the test" time="{duration}">
+      <failure message="expected exception" type="REQUIRE_THROWS_WITH">
+ExceptionTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="Nice descriptive name" time="{duration}"/>
+    <testcase classname="global" name="Non-std exceptions can be translated" time="{duration}">
+      <error type="TEST_CASE">
+custom exception
+ExceptionTests.cpp:<line number>
+      </error>
+    </testcase>
+    <testcase classname="global" name="NotImplemented exception" time="{duration}"/>
+    <testcase classname="global" name="Objects that evaluated in boolean contexts can be checked" time="{duration}"/>
+    <testcase classname="global" name="Operators at different namespace levels not hijacked by Koenig lookup" time="{duration}"/>
     <testcase classname="global" name="Ordering comparison checks that should fail" time="{duration}">
       <failure message="7 > 7" type="CHECK">
 ConditionTests.cpp:<line number>
@@ -144,161 +331,7 @@
 ConditionTests.cpp:<line number>
       </failure>
     </testcase>
-    <testcase classname="global" name="Comparisons with int literals don't warn when mixing signed/ unsigned" time="{duration}"/>
-    <testcase classname="global" name="comparisons between int variables" time="{duration}"/>
-    <testcase classname="global" name="comparisons between const int variables" time="{duration}"/>
-    <testcase classname="global" name="Comparisons between unsigned ints and negative signed ints match c++ standard behaviour" time="{duration}"/>
-    <testcase classname="global" name="Comparisons between ints where one side is computed" time="{duration}"/>
-    <testcase classname="global" name="Pointers can be compared to null" time="{duration}"/>
-    <testcase classname="global" name="'Not' checks that should succeed" time="{duration}"/>
-    <testcase classname="global" name="'Not' checks that should fail" time="{duration}">
-      <failure message="false != false" type="CHECK">
-ConditionTests.cpp:<line number>
-      </failure>
-      <failure message="true != true" type="CHECK">
-ConditionTests.cpp:<line number>
-      </failure>
-      <failure message="false" type="CHECK">
-ConditionTests.cpp:<line number>
-      </failure>
-      <failure message="!true" type="CHECK_FALSE">
-ConditionTests.cpp:<line number>
-      </failure>
-      <failure message="false" type="CHECK">
-ConditionTests.cpp:<line number>
-      </failure>
-      <failure message="!true" type="CHECK_FALSE">
-ConditionTests.cpp:<line number>
-      </failure>
-      <failure message="false" type="CHECK">
-ConditionTests.cpp:<line number>
-      </failure>
-      <failure message="!(1 == 1)" type="CHECK_FALSE">
-ConditionTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="When checked exceptions are thrown they can be expected or unexpected" time="{duration}"/>
-    <testcase classname="global" name="Expected exceptions that don't throw or unexpected exceptions fail the test" time="{duration}">
-      <error message="thisThrows()" type="CHECK_THROWS_AS">
-expected exception
-ExceptionTests.cpp:<line number>
-      </error>
-      <failure message="thisDoesntThrow()" type="CHECK_THROWS_AS">
-ExceptionTests.cpp:<line number>
-      </failure>
-      <error message="thisThrows()" type="CHECK_NOTHROW">
-expected exception
-ExceptionTests.cpp:<line number>
-      </error>
-    </testcase>
-    <testcase classname="global" name="When unchecked exceptions are thrown directly they are always failures" time="{duration}">
-      <error type="TEST_CASE">
-unexpected exception
-ExceptionTests.cpp:<line number>
-      </error>
-    </testcase>
-    <testcase classname="global" name="An unchecked exception reports the line of the last assertion" time="{duration}">
-      <error message="{Unknown expression after the reported line}">
-unexpected exception
-ExceptionTests.cpp:<line number>
-      </error>
-    </testcase>
-    <testcase classname="When unchecked exceptions are thrown from sections they are always failures" name="section name" time="{duration}">
-      <error type="TEST_CASE">
-unexpected exception
-ExceptionTests.cpp:<line number>
-      </error>
-    </testcase>
-    <testcase classname="global" name="When unchecked exceptions are thrown from functions they are always failures" time="{duration}">
-      <error message="thisThrows() == 0" type="CHECK">
-expected exception
-ExceptionTests.cpp:<line number>
-      </error>
-    </testcase>
-    <testcase classname="global" name="When unchecked exceptions are thrown during a REQUIRE the test should abort fail" time="{duration}">
-      <error message="thisThrows() == 0" type="REQUIRE">
-expected exception
-ExceptionTests.cpp:<line number>
-      </error>
-    </testcase>
-    <testcase classname="global" name="When unchecked exceptions are thrown during a CHECK the test should abort and fail" time="{duration}">
-      <error message="thisThrows() == 0" type="CHECK">
-expected exception
-ExceptionTests.cpp:<line number>
-      </error>
-    </testcase>
-    <testcase classname="global" name="Non-std exceptions can be translated" time="{duration}">
-      <error type="TEST_CASE">
-custom exception
-ExceptionTests.cpp:<line number>
-      </error>
-    </testcase>
-    <testcase classname="global" name="Custom std-exceptions can be custom translated" time="{duration}">
-      <error type="TEST_CASE">
-custom std exception
-ExceptionTests.cpp:<line number>
-      </error>
-    </testcase>
-    <testcase classname="global" name="Custom exceptions can be translated when testing for nothrow" time="{duration}">
-      <error message="throwCustom()" type="REQUIRE_NOTHROW">
-custom exception - not std
-ExceptionTests.cpp:<line number>
-      </error>
-    </testcase>
-    <testcase classname="global" name="Custom exceptions can be translated when testing for throwing as something else" time="{duration}">
-      <error message="throwCustom()" type="REQUIRE_THROWS_AS">
-custom exception - not std
-ExceptionTests.cpp:<line number>
-      </error>
-    </testcase>
-    <testcase classname="global" name="Unexpected exceptions can be translated" time="{duration}">
-      <error type="TEST_CASE">
-3.14
-ExceptionTests.cpp:<line number>
-      </error>
-    </testcase>
-    <testcase classname="global" name="NotImplemented exception" time="{duration}"/>
-    <testcase classname="Exception messages can be tested for" name="exact match" time="{duration}"/>
-    <testcase classname="Exception messages can be tested for" name="different case" time="{duration}"/>
-    <testcase classname="Exception messages can be tested for" name="wildcarded" time="{duration}"/>
-    <testcase classname="global" name="Mismatching exception messages failing the test" time="{duration}">
-      <failure message="expected exception" type="REQUIRE_THROWS_WITH">
-ExceptionTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="Generators over two ranges" time="{duration}"/>
-    <testcase classname="global" name="Generator over a range of pairs" time="{duration}"/>
-    <testcase classname="global" name="INFO and WARN do not abort tests" time="{duration}"/>
-    <testcase classname="global" name="SUCCEED counts as a test pass" time="{duration}"/>
-    <testcase classname="global" name="INFO gets logged on failure" time="{duration}">
-      <failure message="2 == 1" type="REQUIRE">
-this message should be logged
-so should this
-MessageTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="INFO gets logged on failure, even if captured before successful assertions" time="{duration}">
-      <failure message="2 == 1" type="CHECK">
-this message should be logged
-MessageTests.cpp:<line number>
-      </failure>
-      <failure message="2 == 0" type="CHECK">
-and this, but later
-MessageTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="FAIL aborts the test" time="{duration}">
-      <failure type="FAIL">
-This is a failure
-MessageTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="FAIL does not require an argument" time="{duration}">
-      <failure type="FAIL">
-MessageTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="SUCCESS does not require an argument" time="{duration}"/>
+    <testcase classname="global" name="Ordering comparison checks that should succeed" time="{duration}"/>
     <testcase classname="Output from all sections is reported" name="one" time="{duration}">
       <failure type="FAIL">
 Message from section one
@@ -311,320 +344,6 @@
 MessageTests.cpp:<line number>
       </failure>
     </testcase>
-    <testcase classname="Standard output from all sections is reported" name="two" time="{duration}">
-      <system-out>
-Message from section one
-Message from section two
-      </system-out>
-    </testcase>
-    <testcase classname="global" name="SCOPED_INFO is reset for each loop" time="{duration}">
-      <failure message="10 &lt; 10" type="REQUIRE">
-current counter 10
-i := 10
-MessageTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="The NO_FAIL macro reports a failure but does not fail the test" time="{duration}"/>
-    <testcase classname="global" name="just failure" time="{duration}">
-      <failure type="FAIL">
-Previous info should not be seen
-MessageTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="sends information to INFO" time="{duration}">
-      <failure message="false" type="REQUIRE">
-hi
-i := 7
-MessageTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="Pointers can be converted to strings" time="{duration}"/>
-    <testcase classname="random SECTION tests" name="s1" time="{duration}"/>
-    <testcase classname="random SECTION tests" name="s2" time="{duration}"/>
-    <testcase classname="nested SECTION tests" name="s1" time="{duration}"/>
-    <testcase classname="nested SECTION tests" name="s1/s2" time="{duration}"/>
-    <testcase classname="more nested SECTION tests" name="s2/s1" time="{duration}">
-      <failure message="1 == 2" type="REQUIRE">
-MiscTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="more nested SECTION tests" name="s1/s3" time="{duration}"/>
-    <testcase classname="more nested SECTION tests" name="s1/s4" time="{duration}"/>
-    <testcase classname="even more nested SECTION tests" name="c/d (leaf)" time="{duration}"/>
-    <testcase classname="even more nested SECTION tests" name="c/e (leaf)" time="{duration}"/>
-    <testcase classname="even more nested SECTION tests" name="f (leaf)" time="{duration}"/>
-    <testcase classname="looped SECTION tests" name="s1" time="{duration}">
-      <failure message="0 > 1" type="CHECK">
-MiscTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="looped tests" time="{duration}">
-      <failure message="1 == 0" type="CHECK">
-Testing if fib[0] (1) is even
-MiscTests.cpp:<line number>
-      </failure>
-      <failure message="1 == 0" type="CHECK">
-Testing if fib[1] (1) is even
-MiscTests.cpp:<line number>
-      </failure>
-      <failure message="1 == 0" type="CHECK">
-Testing if fib[3] (3) is even
-MiscTests.cpp:<line number>
-      </failure>
-      <failure message="1 == 0" type="CHECK">
-Testing if fib[4] (5) is even
-MiscTests.cpp:<line number>
-      </failure>
-      <failure message="1 == 0" type="CHECK">
-Testing if fib[6] (13) is even
-MiscTests.cpp:<line number>
-      </failure>
-      <failure message="1 == 0" type="CHECK">
-Testing if fib[7] (21) is even
-MiscTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="Sends stuff to stdout and stderr" time="{duration}">
-      <system-out>
-A string sent directly to stdout
-      </system-out>
-      <system-err>
-A string sent directly to stderr
-      </system-err>
-    </testcase>
-    <testcase classname="global" name="null strings" time="{duration}"/>
-    <testcase classname="global" name="checkedIf" time="{duration}"/>
-    <testcase classname="global" name="checkedIf, failing" time="{duration}">
-      <failure message="false" type="CHECKED_IF">
-MiscTests.cpp:<line number>
-      </failure>
-      <failure message="false" type="REQUIRE">
-MiscTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="checkedElse" time="{duration}"/>
-    <testcase classname="global" name="checkedElse, failing" time="{duration}">
-      <failure message="false" type="CHECKED_ELSE">
-MiscTests.cpp:<line number>
-      </failure>
-      <failure message="false" type="REQUIRE">
-MiscTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="xmlentitycheck" name="embedded xml" time="{duration}"/>
-    <testcase classname="xmlentitycheck" name="encoded chars" time="{duration}"/>
-    <testcase classname="global" name="send a single char to INFO" time="{duration}">
-      <failure message="false" type="REQUIRE">
-3
-MiscTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="atomic if" time="{duration}"/>
-    <testcase classname="global" name="String matchers" time="{duration}"/>
-    <testcase classname="global" name="Contains string matcher" time="{duration}">
-      <failure message="&quot;this string contains 'abc' as a substring&quot; contains: &quot;not there&quot;" type="CHECK_THAT">
-MiscTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="StartsWith string matcher" time="{duration}">
-      <failure message="&quot;this string contains 'abc' as a substring&quot; starts with: &quot;string&quot;" type="CHECK_THAT">
-MiscTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="EndsWith string matcher" time="{duration}">
-      <failure message="&quot;this string contains 'abc' as a substring&quot; ends with: &quot;this&quot;" type="CHECK_THAT">
-MiscTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="Equals string matcher" time="{duration}">
-      <failure message="&quot;this string contains 'abc' as a substring&quot; equals: &quot;something else&quot;" type="CHECK_THAT">
-MiscTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="Equals string matcher, with NULL" time="{duration}"/>
-    <testcase classname="global" name="AllOf matcher" time="{duration}"/>
-    <testcase classname="global" name="AnyOf matcher" time="{duration}"/>
-    <testcase classname="global" name="Equals" time="{duration}"/>
-    <testcase classname="global" name="Matchers can be (AllOf) composed with the &amp;&amp; operator" time="{duration}"/>
-    <testcase classname="global" name="Matchers can be (AnyOf) composed with the || operator" time="{duration}"/>
-    <testcase classname="global" name="Matchers can be composed with both &amp;&amp; and ||" time="{duration}"/>
-    <testcase classname="global" name="Matchers can be composed with both &amp;&amp; and || - failing" time="{duration}">
-      <failure message="&quot;this string contains 'abc' as a substring&quot; ( ( contains: &quot;string&quot; or contains: &quot;different&quot; ) and contains: &quot;random&quot; )" type="CHECK_THAT">
-MiscTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="Matchers can be negated (Not) with the ! operator" time="{duration}"/>
-    <testcase classname="global" name="Matchers can be negated (Not) with the ! operator - failing" time="{duration}">
-      <failure message="&quot;this string contains 'abc' as a substring&quot; not contains: &quot;substring&quot;" type="CHECK_THAT">
-MiscTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="Factorials are computed" time="{duration}"/>
-    <testcase classname="global" name="Nice descriptive name" time="{duration}"/>
-    <testcase classname="vectors can be sized and resized" name="root" time="{duration}"/>
-    <testcase classname="vectors can be sized and resized" name="resizing bigger changes size and capacity" time="{duration}"/>
-    <testcase classname="vectors can be sized and resized" name="resizing smaller changes size but not capacity" time="{duration}"/>
-    <testcase classname="vectors can be sized and resized" name="resizing smaller changes size but not capacity/We can use the 'swap trick' to reset the capacity" time="{duration}"/>
-    <testcase classname="vectors can be sized and resized" name="reserving bigger changes capacity but not size" time="{duration}"/>
-    <testcase classname="vectors can be sized and resized" name="reserving smaller does not change size or capacity" time="{duration}"/>
-    <testcase classname="A couple of nested sections followed by a failure" name="root" time="{duration}">
-      <failure type="FAIL">
-to infinity and beyond
-MiscTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="A couple of nested sections followed by a failure" name="Outer/Inner" time="{duration}"/>
-    <testcase classname="global" name="not allowed" time="{duration}"/>
-    <testcase classname="global" name="Tabs and newlines show in output" time="{duration}">
-      <failure message="&quot;if ($b == 10) {
-		$a	= 20;
-}&quot;
-==
-&quot;if ($b == 10) {
-	$a = 20;
-}
-&quot;" type="CHECK">
-MiscTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="toString on const wchar_t const pointer returns the string contents" time="{duration}"/>
-    <testcase classname="global" name="toString on const wchar_t pointer returns the string contents" time="{duration}"/>
-    <testcase classname="global" name="toString on wchar_t const pointer returns the string contents" time="{duration}"/>
-    <testcase classname="global" name="toString on wchar_t returns the string contents" time="{duration}"/>
-    <testcase classname="XmlEncode" name="normal string" time="{duration}"/>
-    <testcase classname="XmlEncode" name="empty string" time="{duration}"/>
-    <testcase classname="XmlEncode" name="string with ampersand" time="{duration}"/>
-    <testcase classname="XmlEncode" name="string with less-than" time="{duration}"/>
-    <testcase classname="XmlEncode" name="string with greater-than" time="{duration}"/>
-    <testcase classname="XmlEncode" name="string with quotes" time="{duration}"/>
-    <testcase classname="XmlEncode" name="string with control char (1)" time="{duration}"/>
-    <testcase classname="XmlEncode" name="string with control char (x7F)" time="{duration}"/>
-    <testcase classname="global" name="long long" time="{duration}"/>
-    <testcase classname="global" name="This test 'should' fail but doesn't" time="{duration}"/>
-    <testcase classname="global" name="# A test name that starts with a #" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="default - no arguments" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="test lists/1 test" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="test lists/Specify one test case exclusion using exclude:" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="test lists/Specify one test case exclusion using ~" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="reporter/-r/console" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="reporter/-r/xml" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="reporter/-r xml and junit" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="reporter/--reporter/junit" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="debugger/-b" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="debugger/--break" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="abort/-a aborts after first failure" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="abort/-x 2 aborts after two failures" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="abort/-x must be greater than zero" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="abort/-x must be numeric" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="nothrow/-e" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="nothrow/--nothrow" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="output filename/-o filename" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="output filename/--out" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="combinations/Single character flags can be combined" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="use-colour/without option" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="use-colour/auto" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="use-colour/yes" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="use-colour/no" time="{duration}"/>
-    <testcase classname="Process can be configured on command line" name="use-colour/error" time="{duration}"/>
-    <testcase classname="Long strings can be wrapped" name="plain string/No wrapping" time="{duration}"/>
-    <testcase classname="Long strings can be wrapped" name="plain string/Wrapped once" time="{duration}"/>
-    <testcase classname="Long strings can be wrapped" name="plain string/Wrapped twice" time="{duration}"/>
-    <testcase classname="Long strings can be wrapped" name="plain string/Wrapped three times" time="{duration}"/>
-    <testcase classname="Long strings can be wrapped" name="plain string/Short wrap" time="{duration}"/>
-    <testcase classname="Long strings can be wrapped" name="plain string/As container" time="{duration}"/>
-    <testcase classname="Long strings can be wrapped" name="plain string/Indent first line differently" time="{duration}"/>
-    <testcase classname="Long strings can be wrapped" name="With newlines/No wrapping" time="{duration}"/>
-    <testcase classname="Long strings can be wrapped" name="With newlines/Trailing newline" time="{duration}"/>
-    <testcase classname="Long strings can be wrapped" name="With newlines/Wrapped once" time="{duration}"/>
-    <testcase classname="Long strings can be wrapped" name="With newlines/Wrapped twice" time="{duration}"/>
-    <testcase classname="Long strings can be wrapped" name="With tabs" time="{duration}"/>
-    <testcase classname="replaceInPlace" name="replace single char" time="{duration}"/>
-    <testcase classname="replaceInPlace" name="replace two chars" time="{duration}"/>
-    <testcase classname="replaceInPlace" name="replace first char" time="{duration}"/>
-    <testcase classname="replaceInPlace" name="replace last char" time="{duration}"/>
-    <testcase classname="replaceInPlace" name="replace all chars" time="{duration}"/>
-    <testcase classname="replaceInPlace" name="replace no chars" time="{duration}"/>
-    <testcase classname="replaceInPlace" name="escape '" time="{duration}"/>
-    <testcase classname="global" name="Strings can be rendered with colour" time="{duration}">
-      <system-out>
-hello
-hello
-      </system-out>
-    </testcase>
-    <testcase classname="global" name="Text can be formatted using the Text class" time="{duration}"/>
-    <testcase classname="global" name="Long text is truncted" time="{duration}"/>
-    <testcase classname="global" name="ManuallyRegistered" time="{duration}"/>
-    <testcase classname="global" name="Parsing a std::pair" time="{duration}"/>
-    <testcase classname="global" name="Where there is more to the expression after the RHS" time="{duration}"/>
-    <testcase classname="global" name="Where the LHS is not a simple value" time="{duration}"/>
-    <testcase classname="global" name="A failing expression with a non streamable type is still captured" time="{duration}">
-      <failure message="0x<hex digits> == 0x<hex digits>" type="CHECK">
-TrickyTests.cpp:<line number>
-      </failure>
-      <failure message="{?} == {?}" type="CHECK">
-TrickyTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="string literals of different sizes can be compared" time="{duration}">
-      <failure message="&quot;first&quot; == &quot;second&quot;" type="REQUIRE">
-TrickyTests.cpp:<line number>
-      </failure>
-    </testcase>
-    <testcase classname="global" name="An expression with side-effects should only be evaluated once" time="{duration}"/>
-    <testcase classname="global" name="Operators at different namespace levels not hijacked by Koenig lookup" time="{duration}"/>
-    <testcase classname="global" name="Demonstrate that a non-const == is not used" time="{duration}"/>
-    <testcase classname="global" name="Test enum bit values" time="{duration}"/>
-    <testcase classname="global" name="boolean member" time="{duration}"/>
-    <testcase classname="(unimplemented) static bools can be evaluated" name="compare to true" time="{duration}"/>
-    <testcase classname="(unimplemented) static bools can be evaluated" name="compare to false" time="{duration}"/>
-    <testcase classname="(unimplemented) static bools can be evaluated" name="negation" time="{duration}"/>
-    <testcase classname="(unimplemented) static bools can be evaluated" name="double negation" time="{duration}"/>
-    <testcase classname="(unimplemented) static bools can be evaluated" name="direct" time="{duration}"/>
-    <testcase classname="global" name="Objects that evaluated in boolean contexts can be checked" time="{duration}"/>
-    <testcase classname="Assertions then sections" name="root" time="{duration}"/>
-    <testcase classname="Assertions then sections" name="A section" time="{duration}"/>
-    <testcase classname="Assertions then sections" name="A section/Another section" time="{duration}"/>
-    <testcase classname="Assertions then sections" name="A section/Another other section" time="{duration}"/>
-    <testcase classname="global" name="non streamable - with conv. op" time="{duration}"/>
-    <testcase classname="global" name="Comparing function pointers" time="{duration}"/>
-    <testcase classname="global" name="Comparing member function pointers" time="{duration}"/>
-    <testcase classname="global" name="pointer to class" time="{duration}"/>
-    <testcase classname="global" name="null_ptr" time="{duration}"/>
-    <testcase classname="global" name="X/level/0/a" time="{duration}"/>
-    <testcase classname="global" name="X/level/0/b" time="{duration}"/>
-    <testcase classname="global" name="X/level/1/a" time="{duration}"/>
-    <testcase classname="global" name="X/level/1/b" time="{duration}"/>
-    <testcase classname="global" name="toString( has_toString )" time="{duration}"/>
-    <testcase classname="global" name="toString( has_maker )" time="{duration}"/>
-    <testcase classname="global" name="toString( has_maker_and_toString )" time="{duration}"/>
-    <testcase classname="global" name="toString( vectors&lt;has_toString )" time="{duration}"/>
-    <testcase classname="global" name="toString( vectors&lt;has_maker )" time="{duration}"/>
-    <testcase classname="global" name="toString( vectors&lt;has_maker_and_toString )" time="{duration}"/>
-    <testcase classname="Tracker" name="root" time="{duration}"/>
-    <testcase classname="Tracker" name="successfully close one section" time="{duration}"/>
-    <testcase classname="Tracker" name="fail one section" time="{duration}"/>
-    <testcase classname="Tracker" name="fail one section/re-enter after failed section" time="{duration}"/>
-    <testcase classname="Tracker" name="fail one section/re-enter after failed section and find next section" time="{duration}"/>
-    <testcase classname="Tracker" name="successfully close one section, then find another" time="{duration}"/>
-    <testcase classname="Tracker" name="successfully close one section, then find another/Re-enter - skips S1 and enters S2" time="{duration}"/>
-    <testcase classname="Tracker" name="successfully close one section, then find another/Re-enter - skips S1 and enters S2/Successfully close S2" time="{duration}"/>
-    <testcase classname="Tracker" name="successfully close one section, then find another/Re-enter - skips S1 and enters S2/fail S2" time="{duration}"/>
-    <testcase classname="Tracker" name="open a nested section" time="{duration}"/>
-    <testcase classname="Tracker" name="start a generator" time="{duration}"/>
-    <testcase classname="Tracker" name="start a generator/close outer section" time="{duration}"/>
-    <testcase classname="Tracker" name="start a generator/close outer section/Re-enter for second generation" time="{duration}"/>
-    <testcase classname="Tracker" name="start a generator/Start a new inner section" time="{duration}"/>
-    <testcase classname="Tracker" name="start a generator/Start a new inner section/Re-enter for second generation" time="{duration}"/>
-    <testcase classname="Tracker" name="start a generator/Fail an inner section" time="{duration}"/>
-    <testcase classname="Tracker" name="start a generator/Fail an inner section/Re-enter for second generation" time="{duration}"/>
-    <testcase classname="global" name="std::pair&lt;int,std::string> -> toString" time="{duration}"/>
-    <testcase classname="global" name="std::pair&lt;int,const std::string> -> toString" time="{duration}"/>
-    <testcase classname="global" name="std::vector&lt;std::pair&lt;std::string,int> > -> toString" time="{duration}"/>
-    <testcase classname="global" name="pair&lt;pair&lt;int,const char *,pair&lt;std::string,int> > -> toString" time="{duration}"/>
-    <testcase classname="global" name="vector&lt;int> -> toString" time="{duration}"/>
-    <testcase classname="global" name="vector&lt;string> -> toString" time="{duration}"/>
-    <testcase classname="global" name="vector&lt;int,allocator> -> toString" time="{duration}"/>
-    <testcase classname="global" name="vec&lt;vec&lt;string,alloc>> -> toString" time="{duration}"/>
     <testcase classname="Parse test names and tags" name="Empty test spec should have no filters" time="{duration}"/>
     <testcase classname="Parse test names and tags" name="Test spec from empty string should have no filters" time="{duration}"/>
     <testcase classname="Parse test names and tags" name="Test spec from just a comma should have no filters" time="{duration}"/>
@@ -656,30 +375,311 @@
     <testcase classname="Parse test names and tags" name="empty tag" time="{duration}"/>
     <testcase classname="Parse test names and tags" name="empty quoted name" time="{duration}"/>
     <testcase classname="Parse test names and tags" name="quoted string followed by tag exclusion" time="{duration}"/>
-    <testcase classname="global" name="tuple&lt;>" time="{duration}"/>
-    <testcase classname="global" name="tuple&lt;int>" time="{duration}"/>
-    <testcase classname="global" name="tuple&lt;float,int>" time="{duration}"/>
-    <testcase classname="global" name="tuple&lt;string,string>" time="{duration}"/>
-    <testcase classname="global" name="tuple&lt;tuple&lt;int>,tuple&lt;>,float>" time="{duration}"/>
-    <testcase classname="global" name="tuple&lt;nullptr,int,const char *>" time="{duration}"/>
-    <testcase classname="Tag alias can be registered against tag patterns" name="The same tag alias can only be registered once" time="{duration}"/>
-    <testcase classname="Tag alias can be registered against tag patterns" name="Tag aliases must be of the form [@name]" time="{duration}"/>
-    <testcase classname="global" name="Anonymous test case 1" time="{duration}"/>
-    <testcase classname="global" name="Test case with one argument" time="{duration}"/>
-    <testcase classname="Variadic macros" name="Section with one argument" time="{duration}"/>
+    <testcase classname="global" name="Parsing a std::pair" time="{duration}"/>
+    <testcase classname="global" name="Pointers can be compared to null" time="{duration}"/>
+    <testcase classname="global" name="Pointers can be converted to strings" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="default - no arguments" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="test lists/1 test" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="test lists/Specify one test case exclusion using exclude:" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="test lists/Specify one test case exclusion using ~" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="reporter/-r/console" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="reporter/-r/xml" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="reporter/-r xml and junit" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="reporter/--reporter/junit" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="debugger/-b" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="debugger/--break" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="abort/-a aborts after first failure" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="abort/-x 2 aborts after two failures" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="abort/-x must be greater than zero" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="abort/-x must be numeric" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="nothrow/-e" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="nothrow/--nothrow" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="output filename/-o filename" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="output filename/--out" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="combinations/Single character flags can be combined" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="use-colour/without option" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="use-colour/auto" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="use-colour/yes" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="use-colour/no" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="use-colour/error" time="{duration}"/>
+    <testcase classname="global" name="SCOPED_INFO is reset for each loop" time="{duration}">
+      <failure message="10 &lt; 10" type="REQUIRE">
+current counter 10
+i := 10
+MessageTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="SUCCEED counts as a test pass" time="{duration}"/>
+    <testcase classname="global" name="SUCCESS does not require an argument" time="{duration}"/>
+    <testcase classname="Fixture" name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods/Given: No operations precede me" time="{duration}"/>
+    <testcase classname="Fixture" name="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" time="{duration}"/>
     <testcase classname="Scenario: Do that thing with the thing" name="Given: This stuff exists/When: I do this/Then: it should do this" time="{duration}"/>
     <testcase classname="Scenario: Do that thing with the thing" name="Given: This stuff exists/When: I do this/Then: it should do this/And: do that" time="{duration}"/>
+    <testcase classname="Scenario: This is a really long scenario name to see how the list command deals with wrapping" name="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" time="{duration}"/>
     <testcase classname="Scenario: Vector resizing affects size and capacity" name="Given: an empty vector" time="{duration}"/>
     <testcase classname="Scenario: Vector resizing affects size and capacity" name="Given: an empty vector/When: it is made larger/Then: the size and capacity go up" time="{duration}"/>
     <testcase classname="Scenario: Vector resizing affects size and capacity" name="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" time="{duration}"/>
     <testcase classname="Scenario: Vector resizing affects size and capacity" name="Given: an empty vector/When: we reserve more space/Then: The capacity is increased but the size remains the same" time="{duration}"/>
-    <testcase classname="Scenario: This is a really long scenario name to see how the list command deals with wrapping" name="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" time="{duration}"/>
-    <testcase classname="Fixture" name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods/Given: No operations precede me" time="{duration}"/>
-    <testcase classname="Fixture" name="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" time="{duration}"/>
-    <system-out>
+    <testcase classname="global" name="Sends stuff to stdout and stderr" time="{duration}">
+      <system-out>
+A string sent directly to stdout
+      </system-out>
+      <system-err>
+A string sent directly to stderr
+      </system-err>
+    </testcase>
+    <testcase classname="global" name="Some simple comparisons between doubles" time="{duration}"/>
+    <testcase classname="Standard output from all sections is reported" name="two" time="{duration}">
+      <system-out>
 Message from section one
 Message from section two
+      </system-out>
+    </testcase>
+    <testcase classname="global" name="StartsWith string matcher" time="{duration}">
+      <failure message="&quot;this string contains 'abc' as a substring&quot; starts with: &quot;string&quot;" type="CHECK_THAT">
+MiscTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="String matchers" time="{duration}"/>
+    <testcase classname="global" name="Strings can be rendered with colour" time="{duration}">
+      <system-out>
+hello
+hello
+      </system-out>
+    </testcase>
+    <testcase classname="global" name="Tabs and newlines show in output" time="{duration}">
+      <failure message="&quot;if ($b == 10) {
+		$a	= 20;
+}&quot;
+==
+&quot;if ($b == 10) {
+	$a = 20;
+}
+&quot;" type="CHECK">
+MiscTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="Tag alias can be registered against tag patterns" name="The same tag alias can only be registered once" time="{duration}"/>
+    <testcase classname="Tag alias can be registered against tag patterns" name="Tag aliases must be of the form [@name]" time="{duration}"/>
+    <testcase classname="global" name="Test case with one argument" time="{duration}"/>
+    <testcase classname="global" name="Test enum bit values" time="{duration}"/>
+    <testcase classname="global" name="Text can be formatted using the Text class" time="{duration}"/>
+    <testcase classname="global" name="The NO_FAIL macro reports a failure but does not fail the test" time="{duration}"/>
+    <testcase classname="global" name="This test 'should' fail but doesn't" time="{duration}"/>
+    <testcase classname="Tracker" name="root" time="{duration}"/>
+    <testcase classname="Tracker" name="successfully close one section" time="{duration}"/>
+    <testcase classname="Tracker" name="fail one section" time="{duration}"/>
+    <testcase classname="Tracker" name="fail one section/re-enter after failed section" time="{duration}"/>
+    <testcase classname="Tracker" name="fail one section/re-enter after failed section and find next section" time="{duration}"/>
+    <testcase classname="Tracker" name="successfully close one section, then find another" time="{duration}"/>
+    <testcase classname="Tracker" name="successfully close one section, then find another/Re-enter - skips S1 and enters S2" time="{duration}"/>
+    <testcase classname="Tracker" name="successfully close one section, then find another/Re-enter - skips S1 and enters S2/Successfully close S2" time="{duration}"/>
+    <testcase classname="Tracker" name="successfully close one section, then find another/Re-enter - skips S1 and enters S2/fail S2" time="{duration}"/>
+    <testcase classname="Tracker" name="open a nested section" time="{duration}"/>
+    <testcase classname="Tracker" name="start a generator" time="{duration}"/>
+    <testcase classname="Tracker" name="start a generator/close outer section" time="{duration}"/>
+    <testcase classname="Tracker" name="start a generator/close outer section/Re-enter for second generation" time="{duration}"/>
+    <testcase classname="Tracker" name="start a generator/Start a new inner section" time="{duration}"/>
+    <testcase classname="Tracker" name="start a generator/Start a new inner section/Re-enter for second generation" time="{duration}"/>
+    <testcase classname="Tracker" name="start a generator/Fail an inner section" time="{duration}"/>
+    <testcase classname="Tracker" name="start a generator/Fail an inner section/Re-enter for second generation" time="{duration}"/>
+    <testcase classname="global" name="Unexpected exceptions can be translated" time="{duration}">
+      <error type="TEST_CASE">
+3.14
+ExceptionTests.cpp:<line number>
+      </error>
+    </testcase>
+    <testcase classname="global" name="Use a custom approx" time="{duration}"/>
+    <testcase classname="Variadic macros" name="Section with one argument" time="{duration}"/>
+    <testcase classname="global" name="When checked exceptions are thrown they can be expected or unexpected" time="{duration}"/>
+    <testcase classname="global" name="When unchecked exceptions are thrown directly they are always failures" time="{duration}">
+      <error type="TEST_CASE">
+unexpected exception
+ExceptionTests.cpp:<line number>
+      </error>
+    </testcase>
+    <testcase classname="global" name="When unchecked exceptions are thrown during a CHECK the test should abort and fail" time="{duration}">
+      <error message="thisThrows() == 0" type="CHECK">
+expected exception
+ExceptionTests.cpp:<line number>
+      </error>
+    </testcase>
+    <testcase classname="global" name="When unchecked exceptions are thrown during a REQUIRE the test should abort fail" time="{duration}">
+      <error message="thisThrows() == 0" type="REQUIRE">
+expected exception
+ExceptionTests.cpp:<line number>
+      </error>
+    </testcase>
+    <testcase classname="global" name="When unchecked exceptions are thrown from functions they are always failures" time="{duration}">
+      <error message="thisThrows() == 0" type="CHECK">
+expected exception
+ExceptionTests.cpp:<line number>
+      </error>
+    </testcase>
+    <testcase classname="When unchecked exceptions are thrown from sections they are always failures" name="section name" time="{duration}">
+      <error type="TEST_CASE">
+unexpected exception
+ExceptionTests.cpp:<line number>
+      </error>
+    </testcase>
+    <testcase classname="global" name="Where the LHS is not a simple value" time="{duration}"/>
+    <testcase classname="global" name="Where there is more to the expression after the RHS" time="{duration}"/>
+    <testcase classname="global" name="X/level/0/a" time="{duration}"/>
+    <testcase classname="global" name="X/level/0/b" time="{duration}"/>
+    <testcase classname="global" name="X/level/1/a" time="{duration}"/>
+    <testcase classname="global" name="X/level/1/b" time="{duration}"/>
+    <testcase classname="XmlEncode" name="normal string" time="{duration}"/>
+    <testcase classname="XmlEncode" name="empty string" time="{duration}"/>
+    <testcase classname="XmlEncode" name="string with ampersand" time="{duration}"/>
+    <testcase classname="XmlEncode" name="string with less-than" time="{duration}"/>
+    <testcase classname="XmlEncode" name="string with greater-than" time="{duration}"/>
+    <testcase classname="XmlEncode" name="string with quotes" time="{duration}"/>
+    <testcase classname="XmlEncode" name="string with control char (1)" time="{duration}"/>
+    <testcase classname="XmlEncode" name="string with control char (x7F)" time="{duration}"/>
+    <testcase classname="global" name="atomic if" time="{duration}"/>
+    <testcase classname="global" name="boolean member" time="{duration}"/>
+    <testcase classname="global" name="checkedElse" time="{duration}"/>
+    <testcase classname="global" name="checkedElse, failing" time="{duration}">
+      <failure message="false" type="CHECKED_ELSE">
+MiscTests.cpp:<line number>
+      </failure>
+      <failure message="false" type="REQUIRE">
+MiscTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="checkedIf" time="{duration}"/>
+    <testcase classname="global" name="checkedIf, failing" time="{duration}">
+      <failure message="false" type="CHECKED_IF">
+MiscTests.cpp:<line number>
+      </failure>
+      <failure message="false" type="REQUIRE">
+MiscTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="comparisons between const int variables" time="{duration}"/>
+    <testcase classname="global" name="comparisons between int variables" time="{duration}"/>
+    <testcase classname="even more nested SECTION tests" name="c/d (leaf)" time="{duration}"/>
+    <testcase classname="even more nested SECTION tests" name="c/e (leaf)" time="{duration}"/>
+    <testcase classname="even more nested SECTION tests" name="f (leaf)" time="{duration}"/>
+    <testcase classname="global" name="just failure" time="{duration}">
+      <failure type="FAIL">
+Previous info should not be seen
+MessageTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="long long" time="{duration}"/>
+    <testcase classname="looped SECTION tests" name="s1" time="{duration}">
+      <failure message="0 > 1" type="CHECK">
+MiscTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="looped tests" time="{duration}">
+      <failure message="1 == 0" type="CHECK">
+Testing if fib[0] (1) is even
+MiscTests.cpp:<line number>
+      </failure>
+      <failure message="1 == 0" type="CHECK">
+Testing if fib[1] (1) is even
+MiscTests.cpp:<line number>
+      </failure>
+      <failure message="1 == 0" type="CHECK">
+Testing if fib[3] (3) is even
+MiscTests.cpp:<line number>
+      </failure>
+      <failure message="1 == 0" type="CHECK">
+Testing if fib[4] (5) is even
+MiscTests.cpp:<line number>
+      </failure>
+      <failure message="1 == 0" type="CHECK">
+Testing if fib[6] (13) is even
+MiscTests.cpp:<line number>
+      </failure>
+      <failure message="1 == 0" type="CHECK">
+Testing if fib[7] (21) is even
+MiscTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="more nested SECTION tests" name="s2/s1" time="{duration}">
+      <failure message="1 == 2" type="REQUIRE">
+MiscTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="more nested SECTION tests" name="s1/s3" time="{duration}"/>
+    <testcase classname="more nested SECTION tests" name="s1/s4" time="{duration}"/>
+    <testcase classname="nested SECTION tests" name="s1" time="{duration}"/>
+    <testcase classname="nested SECTION tests" name="s1/s2" time="{duration}"/>
+    <testcase classname="global" name="non streamable - with conv. op" time="{duration}"/>
+    <testcase classname="global" name="not allowed" time="{duration}"/>
+    <testcase classname="global" name="null strings" time="{duration}"/>
+    <testcase classname="global" name="null_ptr" time="{duration}"/>
+    <testcase classname="global" name="pair&lt;pair&lt;int,const char *,pair&lt;std::string,int> > -> toString" time="{duration}"/>
+    <testcase classname="global" name="pointer to class" time="{duration}"/>
+    <testcase classname="random SECTION tests" name="s1" time="{duration}"/>
+    <testcase classname="random SECTION tests" name="s2" time="{duration}"/>
+    <testcase classname="replaceInPlace" name="replace single char" time="{duration}"/>
+    <testcase classname="replaceInPlace" name="replace two chars" time="{duration}"/>
+    <testcase classname="replaceInPlace" name="replace first char" time="{duration}"/>
+    <testcase classname="replaceInPlace" name="replace last char" time="{duration}"/>
+    <testcase classname="replaceInPlace" name="replace all chars" time="{duration}"/>
+    <testcase classname="replaceInPlace" name="replace no chars" time="{duration}"/>
+    <testcase classname="replaceInPlace" name="escape '" time="{duration}"/>
+    <testcase classname="global" name="send a single char to INFO" time="{duration}">
+      <failure message="false" type="REQUIRE">
+3
+MiscTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="sends information to INFO" time="{duration}">
+      <failure message="false" type="REQUIRE">
+hi
+i := 7
+MessageTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="std::pair&lt;int,const std::string> -> toString" time="{duration}"/>
+    <testcase classname="global" name="std::pair&lt;int,std::string> -> toString" time="{duration}"/>
+    <testcase classname="global" name="std::vector&lt;std::pair&lt;std::string,int> > -> toString" time="{duration}"/>
+    <testcase classname="global" name="string literals of different sizes can be compared" time="{duration}">
+      <failure message="&quot;first&quot; == &quot;second&quot;" type="REQUIRE">
+TrickyTests.cpp:<line number>
+      </failure>
+    </testcase>
+    <testcase classname="global" name="toString on const wchar_t const pointer returns the string contents" time="{duration}"/>
+    <testcase classname="global" name="toString on const wchar_t pointer returns the string contents" time="{duration}"/>
+    <testcase classname="global" name="toString on wchar_t const pointer returns the string contents" time="{duration}"/>
+    <testcase classname="global" name="toString on wchar_t returns the string contents" time="{duration}"/>
+    <testcase classname="global" name="toString( has_maker )" time="{duration}"/>
+    <testcase classname="global" name="toString( has_maker_and_toString )" time="{duration}"/>
+    <testcase classname="global" name="toString( has_toString )" time="{duration}"/>
+    <testcase classname="global" name="toString( vectors&lt;has_maker )" time="{duration}"/>
+    <testcase classname="global" name="toString( vectors&lt;has_maker_and_toString )" time="{duration}"/>
+    <testcase classname="global" name="toString( vectors&lt;has_toString )" time="{duration}"/>
+    <testcase classname="global" name="toString(enum class w/operator&lt;&lt;)" time="{duration}"/>
+    <testcase classname="global" name="toString(enum class)" time="{duration}"/>
+    <testcase classname="global" name="toString(enum w/operator&lt;&lt;)" time="{duration}"/>
+    <testcase classname="global" name="toString(enum)" time="{duration}"/>
+    <testcase classname="global" name="tuple&lt;>" time="{duration}"/>
+    <testcase classname="global" name="tuple&lt;float,int>" time="{duration}"/>
+    <testcase classname="global" name="tuple&lt;int>" time="{duration}"/>
+    <testcase classname="global" name="tuple&lt;nullptr,int,const char *>" time="{duration}"/>
+    <testcase classname="global" name="tuple&lt;string,string>" time="{duration}"/>
+    <testcase classname="global" name="tuple&lt;tuple&lt;int>,tuple&lt;>,float>" time="{duration}"/>
+    <testcase classname="global" name="vec&lt;vec&lt;string,alloc>> -> toString" time="{duration}"/>
+    <testcase classname="global" name="vector&lt;int,allocator> -> toString" time="{duration}"/>
+    <testcase classname="global" name="vector&lt;int> -> toString" time="{duration}"/>
+    <testcase classname="global" name="vector&lt;string> -> toString" time="{duration}"/>
+    <testcase classname="vectors can be sized and resized" name="root" time="{duration}"/>
+    <testcase classname="vectors can be sized and resized" name="resizing bigger changes size and capacity" time="{duration}"/>
+    <testcase classname="vectors can be sized and resized" name="resizing smaller changes size but not capacity" time="{duration}"/>
+    <testcase classname="vectors can be sized and resized" name="resizing smaller changes size but not capacity/We can use the 'swap trick' to reset the capacity" time="{duration}"/>
+    <testcase classname="vectors can be sized and resized" name="reserving bigger changes capacity but not size" time="{duration}"/>
+    <testcase classname="vectors can be sized and resized" name="reserving smaller does not change size or capacity" time="{duration}"/>
+    <testcase classname="xmlentitycheck" name="embedded xml" time="{duration}"/>
+    <testcase classname="xmlentitycheck" name="encoded chars" time="{duration}"/>
+    <system-out>
 A string sent directly to stdout
+Message from section one
+Message from section two
 hello
 hello
     </system-out>
diff --git a/projects/SelfTest/Baselines/xml.sw.approved.txt b/projects/SelfTest/Baselines/xml.sw.approved.txt
index ed730bb..3dd64de 100644
--- a/projects/SelfTest/Baselines/xml.sw.approved.txt
+++ b/projects/SelfTest/Baselines/xml.sw.approved.txt
@@ -1,139 +1,392 @@
 <?xml version="1.1" encoding="UTF-8"?>
 <Catch name="CatchSelfTest">
   <Group name="CatchSelfTest">
-    <TestCase name="toString(enum)">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+    <TestCase name="# A test name that starts with a #">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="'Not' checks that should fail">
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          Catch::toString(e0) == "0"
+          false != false
         </Original>
         <Expanded>
-          "0" == "0"
+          false != false
         </Expanded>
       </Expression>
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          Catch::toString(e1) == "1"
+          true != true
         </Original>
         <Expanded>
-          "1" == "1"
+          true != true
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          !true
+        </Original>
+        <Expanded>
+          false
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          !true
+        </Original>
+        <Expanded>
+          !true
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          !trueValue
+        </Original>
+        <Expanded>
+          false
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          !trueValue
+        </Original>
+        <Expanded>
+          !true
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          !(1 == 1)
+        </Original>
+        <Expanded>
+          false
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          !1 == 1
+        </Original>
+        <Expanded>
+          !(1 == 1)
+        </Expanded>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="'Not' checks that should succeed">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          false == false
+        </Original>
+        <Expanded>
+          false == false
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          true == true
+        </Original>
+        <Expanded>
+          true == true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          !false
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          !false
+        </Original>
+        <Expanded>
+          !false
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          !falseValue
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          !falseValue
+        </Original>
+        <Expanded>
+          !false
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          !(1 == 2)
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          !1 == 2
+        </Original>
+        <Expanded>
+          !(1 == 2)
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="toString(enum w/operator&lt;&lt;)">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+    <TestCase name="(unimplemented) static bools can be evaluated">
+      <Section name="compare to true">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+          <Original>
+            is_true&lt;true>::value == true
+          </Original>
+          <Expanded>
+            true == true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+          <Original>
+            true == is_true&lt;true>::value
+          </Original>
+          <Expanded>
+            true == true
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="compare to false">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+          <Original>
+            is_true&lt;false>::value == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+          <Original>
+            false == is_true&lt;false>::value
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="negation">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+          <Original>
+            !is_true&lt;false>::value
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="double negation">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+          <Original>
+            !!is_true&lt;true>::value
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="direct">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+          <Original>
+            is_true&lt;true>::value
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/TrickyTests.cpp" >
+          <Original>
+            !is_true&lt;false>::value
+          </Original>
+          <Expanded>
+            !false
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="A METHOD_AS_TEST_CASE based test run that fails">
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" >
         <Original>
-          Catch::toString(e0) == "E2{0}"
+          s == "world"
         </Original>
         <Expanded>
-          "E2{0}" == "E2{0}"
+          "hello" == "world"
         </Expanded>
       </Expression>
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="A METHOD_AS_TEST_CASE based test run that succeeds">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" >
         <Original>
-          Catch::toString(e1) == "E2{1}"
+          s == "hello"
         </Original>
         <Expanded>
-          "E2{1}" == "E2{1}"
+          "hello" == "hello"
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="toString(enum class)">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+    <TestCase name="A TEST_CASE_METHOD based test run that fails">
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" >
         <Original>
-          Catch::toString(e0) == "0"
+          m_a == 2
         </Original>
         <Expanded>
-          "0" == "0"
+          1 == 2
         </Expanded>
       </Expression>
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="A TEST_CASE_METHOD based test run that succeeds">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" >
         <Original>
-          Catch::toString(e1) == "1"
+          m_a == 1
         </Original>
         <Expanded>
-          "1" == "1"
+          1 == 1
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="toString(enum class w/operator&lt;&lt;)">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+    <TestCase name="A couple of nested sections followed by a failure">
+      <Section name="Outer">
+        <Section name="Inner">
+          <OverallResults successes="1" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <Failure>
+        to infinity and beyond
+      </Failure>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="A failing expression with a non streamable type is still captured">
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
-          Catch::toString(e0) == "E2/V0"
+          &amp;o1 == &amp;o2
         </Original>
         <Expanded>
-          "E2/V0" == "E2/V0"
+          0x<hex digits> == 0x<hex digits>
         </Expanded>
       </Expression>
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
-          Catch::toString(e1) == "E2/V1"
+          o1 == o2
         </Original>
         <Expanded>
-          "E2/V1" == "E2/V1"
+          {?} == {?}
         </Expanded>
       </Expression>
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="AllOf matcher">
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
-          Catch::toString(e3) == "Unknown enum value 10"
+          testStringForMatching(), AllOf( Catch::Contains( "string" ), Catch::Contains( "abc" ) )
         </Original>
         <Expanded>
-          "Unknown enum value 10"
-==
-"Unknown enum value 10"
+          "this string contains 'abc' as a substring" ( contains: "string" and contains: "abc" )
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="Some simple comparisons between doubles">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+    <TestCase name="An empty test with no assertions">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="An expression with side-effects should only be evaluated once">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
-          d == Approx( 1.23 )
+          i++ == 7
         </Original>
         <Expanded>
-          1.23 == Approx( 1.23 )
+          7 == 7
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+        <Original>
+          i++ == 8
+        </Original>
+        <Expanded>
+          8 == 8
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="An unchecked exception reports the line of the last assertion">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ExceptionTests.cpp" >
+        <Original>
+          1 == 1
+        </Original>
+        <Expanded>
+          1 == 1
+        </Expanded>
+      </Expression>
+      <Expression success="false" filename="projects/SelfTest/ExceptionTests.cpp" >
+        <Original>
+          {Unknown expression after the reported line}
+        </Original>
+        <Expanded>
+          {Unknown expression after the reported line}
+        </Expanded>
+        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
+          unexpected exception
+        </Exception>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="Anonymous test case 1">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="AnyOf matcher">
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testStringForMatching(), AnyOf( Catch::Contains( "string" ), Catch::Contains( "not there" ) )
+        </Original>
+        <Expanded>
+          "this string contains 'abc' as a substring" ( contains: "string" or contains: "not there" )
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testStringForMatching(), AnyOf( Catch::Contains( "not there" ), Catch::Contains( "string" ) )
+        </Original>
+        <Expanded>
+          "this string contains 'abc' as a substring" ( contains: "not there" or contains: "string" )
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Approximate PI">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+        <Original>
+          divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 )
+        </Original>
+        <Expanded>
+          3.1428571429 == Approx( 3.141 )
         </Expanded>
       </Expression>
       <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
-          d != Approx( 1.22 )
+          divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 )
         </Original>
         <Expanded>
-          1.23 != Approx( 1.22 )
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
-        <Original>
-          d != Approx( 1.24 )
-        </Original>
-        <Expanded>
-          1.23 != Approx( 1.24 )
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
-        <Original>
-          Approx( d ) == 1.23
-        </Original>
-        <Expanded>
-          Approx( 1.23 ) == 1.23
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
-        <Original>
-          Approx( d ) != 1.22
-        </Original>
-        <Expanded>
-          Approx( 1.23 ) != 1.22
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
-        <Original>
-          Approx( d ) != 1.24
-        </Original>
-        <Expanded>
-          Approx( 1.23 ) != 1.24
+          3.1428571429 != Approx( 3.141 )
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
@@ -238,730 +491,163 @@
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="Use a custom approx">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+    <TestCase name="Assertions then sections">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
-          d == approx( 1.23 )
+          Catch::alwaysTrue()
         </Original>
         <Expanded>
-          1.23 == Approx( 1.23 )
+          true
         </Expanded>
       </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+      <Section name="A section">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+          <Original>
+            Catch::alwaysTrue()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Section name="Another section">
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+            <Original>
+              Catch::alwaysTrue()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <OverallResults successes="1" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
-          d == approx( 1.22 )
+          Catch::alwaysTrue()
         </Original>
         <Expanded>
-          1.23 == Approx( 1.22 )
+          true
         </Expanded>
       </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+      <Section name="A section">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+          <Original>
+            Catch::alwaysTrue()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Section name="Another other section">
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+            <Original>
+              Catch::alwaysTrue()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <OverallResults successes="1" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Comparing function pointers">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
-          d == approx( 1.24 )
+          a
         </Original>
         <Expanded>
-          1.23 == Approx( 1.24 )
+          true
         </Expanded>
       </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
-          d != approx( 1.25 )
+          a == &amp;foo
         </Original>
         <Expanded>
-          1.23 != Approx( 1.25 )
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
-        <Original>
-          approx( d ) == 1.23
-        </Original>
-        <Expanded>
-          Approx( 1.23 ) == 1.23
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
-        <Original>
-          approx( d ) == 1.22
-        </Original>
-        <Expanded>
-          Approx( 1.23 ) == 1.22
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
-        <Original>
-          approx( d ) == 1.24
-        </Original>
-        <Expanded>
-          Approx( 1.23 ) == 1.24
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
-        <Original>
-          approx( d ) != 1.25
-        </Original>
-        <Expanded>
-          Approx( 1.23 ) != 1.25
+          0x<hex digits> == 0x<hex digits>
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="Approximate PI">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+    <TestCase name="Comparing member function pointers">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
-          divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 )
+          m == &amp;S::f
         </Original>
         <Expanded>
-          3.1428571429 == Approx( 3.141 )
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
-        <Original>
-          divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 )
-        </Original>
-        <Expanded>
-          3.1428571429 != Approx( 3.141 )
+          0x<hex digits>
+==
+0x<hex digits>
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="A METHOD_AS_TEST_CASE based test run that succeeds">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" >
+    <TestCase name="Comparisons between ints where one side is computed">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          s == "hello"
+          54 == 6*9
         </Original>
         <Expanded>
-          "hello" == "hello"
+          54 == 54
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="A METHOD_AS_TEST_CASE based test run that fails">
-      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" >
+    <TestCase name="Comparisons between unsigned ints and negative signed ints match c++ standard behaviour">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          s == "world"
+          ( -1 > 2u )
         </Original>
         <Expanded>
-          "hello" == "world"
+          true
         </Expanded>
       </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="A TEST_CASE_METHOD based test run that succeeds">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          m_a == 1
+          -1 > 2u
         </Original>
         <Expanded>
-          1 == 1
+          -1 > 2
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          ( 2u &lt; -1 )
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          2u &lt; -1
+        </Original>
+        <Expanded>
+          2 &lt; -1
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          ( minInt > 2u )
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          minInt > 2u
+        </Original>
+        <Expanded>
+          -2147483648 > 2
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="A TEST_CASE_METHOD based test run that fails">
-      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" >
-        <Original>
-          m_a == 2
-        </Original>
-        <Expanded>
-          1 == 2
-        </Expanded>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="Equality checks that should succeed">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven == 7
-        </Original>
-        <Expanded>
-          7 == 7
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.float_nine_point_one == Approx( 9.1f )
-        </Original>
-        <Expanded>
-          9.1f == Approx( 9.1000003815 )
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.double_pi == Approx( 3.1415926535 )
-        </Original>
-        <Expanded>
-          3.1415926535 == Approx( 3.1415926535 )
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello == "hello"
-        </Original>
-        <Expanded>
-          "hello" == "hello"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          "hello" == data.str_hello
-        </Original>
-        <Expanded>
-          "hello" == "hello"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello.size() == 5
-        </Original>
-        <Expanded>
-          5 == 5
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          x == Approx( 1.3 )
-        </Original>
-        <Expanded>
-          1.3 == Approx( 1.3 )
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Equality checks that should fail">
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven == 6
-        </Original>
-        <Expanded>
-          7 == 6
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven == 8
-        </Original>
-        <Expanded>
-          7 == 8
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven == 0
-        </Original>
-        <Expanded>
-          7 == 0
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.float_nine_point_one == Approx( 9.11f )
-        </Original>
-        <Expanded>
-          9.1f == Approx( 9.1099996567 )
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.float_nine_point_one == Approx( 9.0f )
-        </Original>
-        <Expanded>
-          9.1f == Approx( 9.0 )
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.float_nine_point_one == Approx( 1 )
-        </Original>
-        <Expanded>
-          9.1f == Approx( 1.0 )
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.float_nine_point_one == Approx( 0 )
-        </Original>
-        <Expanded>
-          9.1f == Approx( 0.0 )
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.double_pi == Approx( 3.1415 )
-        </Original>
-        <Expanded>
-          3.1415926535 == Approx( 3.1415 )
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello == "goodbye"
-        </Original>
-        <Expanded>
-          "hello" == "goodbye"
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello == "hell"
-        </Original>
-        <Expanded>
-          "hello" == "hell"
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello == "hello1"
-        </Original>
-        <Expanded>
-          "hello" == "hello1"
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello.size() == 6
-        </Original>
-        <Expanded>
-          5 == 6
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          x == Approx( 1.301 )
-        </Original>
-        <Expanded>
-          1.3 == Approx( 1.301 )
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Inequality checks that should succeed">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven != 6
-        </Original>
-        <Expanded>
-          7 != 6
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven != 8
-        </Original>
-        <Expanded>
-          7 != 8
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.float_nine_point_one != Approx( 9.11f )
-        </Original>
-        <Expanded>
-          9.1f != Approx( 9.1099996567 )
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.float_nine_point_one != Approx( 9.0f )
-        </Original>
-        <Expanded>
-          9.1f != Approx( 9.0 )
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.float_nine_point_one != Approx( 1 )
-        </Original>
-        <Expanded>
-          9.1f != Approx( 1.0 )
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.float_nine_point_one != Approx( 0 )
-        </Original>
-        <Expanded>
-          9.1f != Approx( 0.0 )
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.double_pi != Approx( 3.1415 )
-        </Original>
-        <Expanded>
-          3.1415926535 != Approx( 3.1415 )
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello != "goodbye"
-        </Original>
-        <Expanded>
-          "hello" != "goodbye"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello != "hell"
-        </Original>
-        <Expanded>
-          "hello" != "hell"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello != "hello1"
-        </Original>
-        <Expanded>
-          "hello" != "hello1"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello.size() != 6
-        </Original>
-        <Expanded>
-          5 != 6
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Inequality checks that should fail">
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven != 7
-        </Original>
-        <Expanded>
-          7 != 7
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.float_nine_point_one != Approx( 9.1f )
-        </Original>
-        <Expanded>
-          9.1f != Approx( 9.1000003815 )
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.double_pi != Approx( 3.1415926535 )
-        </Original>
-        <Expanded>
-          3.1415926535 != Approx( 3.1415926535 )
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello != "hello"
-        </Original>
-        <Expanded>
-          "hello" != "hello"
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello.size() != 5
-        </Original>
-        <Expanded>
-          5 != 5
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Ordering comparison checks that should succeed">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven &lt; 8
-        </Original>
-        <Expanded>
-          7 &lt; 8
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven > 6
-        </Original>
-        <Expanded>
-          7 > 6
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven > 0
-        </Original>
-        <Expanded>
-          7 > 0
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven > -1
-        </Original>
-        <Expanded>
-          7 > -1
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven >= 7
-        </Original>
-        <Expanded>
-          7 >= 7
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven >= 6
-        </Original>
-        <Expanded>
-          7 >= 6
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven &lt;= 7
-        </Original>
-        <Expanded>
-          7 &lt;= 7
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven &lt;= 8
-        </Original>
-        <Expanded>
-          7 &lt;= 8
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.float_nine_point_one > 9
-        </Original>
-        <Expanded>
-          9.1f > 9
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.float_nine_point_one &lt; 10
-        </Original>
-        <Expanded>
-          9.1f &lt; 10
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.float_nine_point_one &lt; 9.2
-        </Original>
-        <Expanded>
-          9.1f &lt; 9.2
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello &lt;= "hello"
-        </Original>
-        <Expanded>
-          "hello" &lt;= "hello"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello >= "hello"
-        </Original>
-        <Expanded>
-          "hello" >= "hello"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello &lt; "hellp"
-        </Original>
-        <Expanded>
-          "hello" &lt; "hellp"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello &lt; "zebra"
-        </Original>
-        <Expanded>
-          "hello" &lt; "zebra"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello > "hellm"
-        </Original>
-        <Expanded>
-          "hello" > "hellm"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello > "a"
-        </Original>
-        <Expanded>
-          "hello" > "a"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Ordering comparison checks that should fail">
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven > 7
-        </Original>
-        <Expanded>
-          7 > 7
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven &lt; 7
-        </Original>
-        <Expanded>
-          7 &lt; 7
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven > 8
-        </Original>
-        <Expanded>
-          7 > 8
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven &lt; 6
-        </Original>
-        <Expanded>
-          7 &lt; 6
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven &lt; 0
-        </Original>
-        <Expanded>
-          7 &lt; 0
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven &lt; -1
-        </Original>
-        <Expanded>
-          7 &lt; -1
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven >= 8
-        </Original>
-        <Expanded>
-          7 >= 8
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.int_seven &lt;= 6
-        </Original>
-        <Expanded>
-          7 &lt;= 6
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.float_nine_point_one &lt; 9
-        </Original>
-        <Expanded>
-          9.1f &lt; 9
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.float_nine_point_one > 10
-        </Original>
-        <Expanded>
-          9.1f > 10
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.float_nine_point_one > 9.2
-        </Original>
-        <Expanded>
-          9.1f > 9.2
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello > "hello"
-        </Original>
-        <Expanded>
-          "hello" > "hello"
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello &lt; "hello"
-        </Original>
-        <Expanded>
-          "hello" &lt; "hello"
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello > "hellp"
-        </Original>
-        <Expanded>
-          "hello" > "hellp"
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello > "z"
-        </Original>
-        <Expanded>
-          "hello" > "z"
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello &lt; "hellm"
-        </Original>
-        <Expanded>
-          "hello" &lt; "hellm"
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello &lt; "a"
-        </Original>
-        <Expanded>
-          "hello" &lt; "a"
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello >= "z"
-        </Original>
-        <Expanded>
-          "hello" >= "z"
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          data.str_hello &lt;= "a"
-        </Original>
-        <Expanded>
-          "hello" &lt;= "a"
-        </Expanded>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
     <TestCase name="Comparisons with int literals don't warn when mixing signed/ unsigned">
       <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
@@ -1071,491 +757,15 @@
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="comparisons between int variables">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+    <TestCase name="Contains string matcher">
+      <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
-          long_var == unsigned_char_var
+          testStringForMatching(), Contains( "not there" )
         </Original>
         <Expanded>
-          1 == 1
+          "this string contains 'abc' as a substring" contains: "not there"
         </Expanded>
       </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          long_var == unsigned_short_var
-        </Original>
-        <Expanded>
-          1 == 1
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          long_var == unsigned_int_var
-        </Original>
-        <Expanded>
-          1 == 1
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          long_var == unsigned_long_var
-        </Original>
-        <Expanded>
-          1 == 1
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="comparisons between const int variables">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          unsigned_char_var == 1
-        </Original>
-        <Expanded>
-          1 == 1
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          unsigned_short_var == 1
-        </Original>
-        <Expanded>
-          1 == 1
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          unsigned_int_var == 1
-        </Original>
-        <Expanded>
-          1 == 1
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          unsigned_long_var == 1
-        </Original>
-        <Expanded>
-          1 == 1
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Comparisons between unsigned ints and negative signed ints match c++ standard behaviour">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          ( -1 > 2u )
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          -1 > 2u
-        </Original>
-        <Expanded>
-          -1 > 2
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          ( 2u &lt; -1 )
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          2u &lt; -1
-        </Original>
-        <Expanded>
-          2 &lt; -1
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          ( minInt > 2u )
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          minInt > 2u
-        </Original>
-        <Expanded>
-          -2147483648 > 2
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Comparisons between ints where one side is computed">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          54 == 6*9
-        </Original>
-        <Expanded>
-          54 == 54
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Pointers can be compared to null">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          p == nullptr
-        </Original>
-        <Expanded>
-          NULL == nullptr
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          p == pNULL
-        </Original>
-        <Expanded>
-          NULL == NULL
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          p != nullptr
-        </Original>
-        <Expanded>
-          0x<hex digits> != nullptr
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          cp != nullptr
-        </Original>
-        <Expanded>
-          0x<hex digits> != nullptr
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          cpc != nullptr
-        </Original>
-        <Expanded>
-          0x<hex digits> != nullptr
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          returnsNull() == nullptr
-        </Original>
-        <Expanded>
-          {null string} == nullptr
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          returnsConstNull() == nullptr
-        </Original>
-        <Expanded>
-          {null string} == nullptr
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          nullptr != p
-        </Original>
-        <Expanded>
-          nullptr != 0x<hex digits>
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="'Not' checks that should succeed">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          false == false
-        </Original>
-        <Expanded>
-          false == false
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          true == true
-        </Original>
-        <Expanded>
-          true == true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          !false
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          !false
-        </Original>
-        <Expanded>
-          !false
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          !falseValue
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          !falseValue
-        </Original>
-        <Expanded>
-          !false
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          !(1 == 2)
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          !1 == 2
-        </Original>
-        <Expanded>
-          !(1 == 2)
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="'Not' checks that should fail">
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          false != false
-        </Original>
-        <Expanded>
-          false != false
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          true != true
-        </Original>
-        <Expanded>
-          true != true
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          !true
-        </Original>
-        <Expanded>
-          false
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          !true
-        </Original>
-        <Expanded>
-          !true
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          !trueValue
-        </Original>
-        <Expanded>
-          false
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          !trueValue
-        </Original>
-        <Expanded>
-          !true
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          !(1 == 1)
-        </Original>
-        <Expanded>
-          false
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
-        <Original>
-          !1 == 1
-        </Original>
-        <Expanded>
-          !(1 == 1)
-        </Expanded>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="When checked exceptions are thrown they can be expected or unexpected">
-      <Expression success="true" type="REQUIRE_THROWS_AS" filename="projects/SelfTest/ExceptionTests.cpp" >
-        <Original>
-          thisThrows()
-        </Original>
-        <Expanded>
-          thisThrows()
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE_NOTHROW" filename="projects/SelfTest/ExceptionTests.cpp" >
-        <Original>
-          thisDoesntThrow()
-        </Original>
-        <Expanded>
-          thisDoesntThrow()
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE_THROWS" filename="projects/SelfTest/ExceptionTests.cpp" >
-        <Original>
-          thisThrows()
-        </Original>
-        <Expanded>
-          thisThrows()
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Expected exceptions that don't throw or unexpected exceptions fail the test">
-      <Expression success="false" type="CHECK_THROWS_AS" filename="projects/SelfTest/ExceptionTests.cpp" >
-        <Original>
-          thisThrows()
-        </Original>
-        <Expanded>
-          thisThrows()
-        </Expanded>
-        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
-          expected exception
-        </Exception>
-      </Expression>
-      <Expression success="false" type="CHECK_THROWS_AS" filename="projects/SelfTest/ExceptionTests.cpp" >
-        <Original>
-          thisDoesntThrow()
-        </Original>
-        <Expanded>
-          thisDoesntThrow()
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="CHECK_NOTHROW" filename="projects/SelfTest/ExceptionTests.cpp" >
-        <Original>
-          thisThrows()
-        </Original>
-        <Expanded>
-          thisThrows()
-        </Expanded>
-        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
-          expected exception
-        </Exception>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="When unchecked exceptions are thrown directly they are always failures">
-      <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
-        unexpected exception
-      </Exception>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="An unchecked exception reports the line of the last assertion">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/ExceptionTests.cpp" >
-        <Original>
-          1 == 1
-        </Original>
-        <Expanded>
-          1 == 1
-        </Expanded>
-      </Expression>
-      <Expression success="false" filename="projects/SelfTest/ExceptionTests.cpp" >
-        <Original>
-          {Unknown expression after the reported line}
-        </Original>
-        <Expanded>
-          {Unknown expression after the reported line}
-        </Expanded>
-        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
-          unexpected exception
-        </Exception>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="When unchecked exceptions are thrown from sections they are always failures">
-      <Section name="section name">
-        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
-          unexpected exception
-        </Exception>
-        <OverallResults successes="0" failures="1" expectedFailures="0"/>
-      </Section>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="When unchecked exceptions are thrown from functions they are always failures">
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ExceptionTests.cpp" >
-        <Original>
-          thisThrows() == 0
-        </Original>
-        <Expanded>
-          thisThrows() == 0
-        </Expanded>
-        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
-          expected exception
-        </Exception>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="When unchecked exceptions are thrown during a REQUIRE the test should abort fail">
-      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/ExceptionTests.cpp" >
-        <Original>
-          thisThrows() == 0
-        </Original>
-        <Expanded>
-          thisThrows() == 0
-        </Expanded>
-        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
-          expected exception
-        </Exception>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="When unchecked exceptions are thrown during a CHECK the test should abort and fail">
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/ExceptionTests.cpp" >
-        <Original>
-          thisThrows() == 0
-        </Original>
-        <Expanded>
-          thisThrows() == 0
-        </Expanded>
-        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
-          expected exception
-        </Exception>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="When unchecked exceptions are thrown, but caught, they do not affect the test">
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Non-std exceptions can be translated">
-      <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
-        custom exception
-      </Exception>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="Custom std-exceptions can be custom translated">
-      <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
-        custom std exception
-      </Exception>
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="Custom exceptions can be translated when testing for nothrow">
@@ -1586,19 +796,229 @@
       </Expression>
       <OverallResult success="false"/>
     </TestCase>
-    <TestCase name="Unexpected exceptions can be translated">
+    <TestCase name="Custom std-exceptions can be custom translated">
       <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
-        3.14
+        custom std exception
       </Exception>
       <OverallResult success="false"/>
     </TestCase>
-    <TestCase name="NotImplemented exception">
-      <Expression success="true" type="REQUIRE_THROWS" filename="projects/SelfTest/ExceptionTests.cpp" >
+    <TestCase name="Demonstrate that a non-const == is not used">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
-          thisFunctionNotImplemented( 7 )
+          t == 1u
         </Original>
         <Expanded>
-          thisFunctionNotImplemented( 7 )
+          {?} == 1
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="EndsWith string matcher">
+      <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testStringForMatching(), EndsWith( "this" )
+        </Original>
+        <Expanded>
+          "this string contains 'abc' as a substring" ends with: "this"
+        </Expanded>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="Equality checks that should fail">
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven == 6
+        </Original>
+        <Expanded>
+          7 == 6
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven == 8
+        </Original>
+        <Expanded>
+          7 == 8
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven == 0
+        </Original>
+        <Expanded>
+          7 == 0
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.float_nine_point_one == Approx( 9.11f )
+        </Original>
+        <Expanded>
+          9.1f == Approx( 9.1099996567 )
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.float_nine_point_one == Approx( 9.0f )
+        </Original>
+        <Expanded>
+          9.1f == Approx( 9.0 )
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.float_nine_point_one == Approx( 1 )
+        </Original>
+        <Expanded>
+          9.1f == Approx( 1.0 )
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.float_nine_point_one == Approx( 0 )
+        </Original>
+        <Expanded>
+          9.1f == Approx( 0.0 )
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.double_pi == Approx( 3.1415 )
+        </Original>
+        <Expanded>
+          3.1415926535 == Approx( 3.1415 )
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello == "goodbye"
+        </Original>
+        <Expanded>
+          "hello" == "goodbye"
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello == "hell"
+        </Original>
+        <Expanded>
+          "hello" == "hell"
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello == "hello1"
+        </Original>
+        <Expanded>
+          "hello" == "hello1"
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello.size() == 6
+        </Original>
+        <Expanded>
+          5 == 6
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          x == Approx( 1.301 )
+        </Original>
+        <Expanded>
+          1.3 == Approx( 1.301 )
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Equality checks that should succeed">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven == 7
+        </Original>
+        <Expanded>
+          7 == 7
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.float_nine_point_one == Approx( 9.1f )
+        </Original>
+        <Expanded>
+          9.1f == Approx( 9.1000003815 )
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.double_pi == Approx( 3.1415926535 )
+        </Original>
+        <Expanded>
+          3.1415926535 == Approx( 3.1415926535 )
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello == "hello"
+        </Original>
+        <Expanded>
+          "hello" == "hello"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          "hello" == data.str_hello
+        </Original>
+        <Expanded>
+          "hello" == "hello"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello.size() == 5
+        </Original>
+        <Expanded>
+          5 == 5
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          x == Approx( 1.3 )
+        </Original>
+        <Expanded>
+          1.3 == Approx( 1.3 )
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Equals">
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testStringForMatching(), Equals( "this string contains 'abc' as a substring" )
+        </Original>
+        <Expanded>
+          "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Equals string matcher">
+      <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testStringForMatching(), Equals( "something else" )
+        </Original>
+        <Expanded>
+          "this string contains 'abc' as a substring" equals: "something else"
+        </Expanded>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="Equals string matcher, with NULL">
+      <Expression success="true" type="REQUIRE_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          "", Equals(nullptr)
+        </Original>
+        <Expanded>
+          "" equals: ""
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
@@ -1663,25 +1083,111 @@
       </Section>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="Mismatching exception messages failing the test">
-      <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" >
+    <TestCase name="Expected exceptions that don't throw or unexpected exceptions fail the test">
+      <Expression success="false" type="CHECK_THROWS_AS" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
-          thisThrows(), "expected exception"
+          thisThrows()
         </Original>
         <Expanded>
-          thisThrows(), "expected exception"
+          thisThrows()
+        </Expanded>
+        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
+          expected exception
+        </Exception>
+      </Expression>
+      <Expression success="false" type="CHECK_THROWS_AS" filename="projects/SelfTest/ExceptionTests.cpp" >
+        <Original>
+          thisDoesntThrow()
+        </Original>
+        <Expanded>
+          thisDoesntThrow()
         </Expanded>
       </Expression>
-      <Expression success="false" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" >
+      <Expression success="false" type="CHECK_NOTHROW" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
-          thisThrows(), "should fail"
+          thisThrows()
         </Original>
         <Expanded>
-          expected exception
+          thisThrows()
         </Expanded>
+        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
+          expected exception
+        </Exception>
       </Expression>
       <OverallResult success="false"/>
     </TestCase>
+    <TestCase name="FAIL aborts the test">
+      <Failure>
+        This is a failure
+      </Failure>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="FAIL does not require an argument">
+      <Failure/>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="Factorials are computed">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          Factorial(0) == 1
+        </Original>
+        <Expanded>
+          1 == 1
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          Factorial(1) == 1
+        </Original>
+        <Expanded>
+          1 == 1
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          Factorial(2) == 2
+        </Original>
+        <Expanded>
+          2 == 2
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          Factorial(3) == 6
+        </Original>
+        <Expanded>
+          6 == 6
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          Factorial(10) == 3628800
+        </Original>
+        <Expanded>
+          3628800 (0x<hex digits>) == 3628800 (0x<hex digits>)
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Generator over a range of pairs">
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+        <Original>
+          i->first == i->second-1
+        </Original>
+        <Expanded>
+          0 == 0
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+        <Original>
+          i->first == i->second-1
+        </Original>
+        <Expanded>
+          2 == 2
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
     <TestCase name="Generators over two ranges">
       <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
@@ -2837,25 +2343,6 @@
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="Generator over a range of pairs">
-      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
-        <Original>
-          i->first == i->second-1
-        </Original>
-        <Expanded>
-          0 == 0
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
-        <Original>
-          i->first == i->second-1
-        </Original>
-        <Expanded>
-          2 == 2
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
     <TestCase name="INFO and WARN do not abort tests">
       <Info>
         this is a message
@@ -2865,9 +2352,6 @@
       </Warning>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="SUCCEED counts as a test pass">
-      <OverallResult success="true"/>
-    </TestCase>
     <TestCase name="INFO gets logged on failure">
       <Info>
         this message should be logged
@@ -2926,1758 +2410,140 @@
       </Expression>
       <OverallResult success="false"/>
     </TestCase>
-    <TestCase name="FAIL aborts the test">
-      <Failure>
-        This is a failure
-      </Failure>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="FAIL does not require an argument">
-      <Failure/>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="SUCCESS does not require an argument">
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Output from all sections is reported">
-      <Section name="one">
-        <Failure>
-          Message from section one
-        </Failure>
-        <OverallResults successes="0" failures="1" expectedFailures="0"/>
-      </Section>
-      <Section name="two">
-        <Failure>
-          Message from section two
-        </Failure>
-        <OverallResults successes="0" failures="1" expectedFailures="0"/>
-      </Section>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="Standard output from all sections is reported">
-      <Section name="one">
-        <OverallResults successes="0" failures="1" expectedFailures="0"/>
-      </Section>
-      <Section name="two">
-        <OverallResults successes="0" failures="1" expectedFailures="0"/>
-      </Section>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="SCOPED_INFO is reset for each loop">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+    <TestCase name="Inequality checks that should fail">
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          i &lt; 10
+          data.int_seven != 7
         </Original>
         <Expanded>
-          0 &lt; 10
+          7 != 7
         </Expanded>
       </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          i &lt; 10
+          data.float_nine_point_one != Approx( 9.1f )
         </Original>
         <Expanded>
-          1 &lt; 10
+          9.1f != Approx( 9.1000003815 )
         </Expanded>
       </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          i &lt; 10
+          data.double_pi != Approx( 3.1415926535 )
         </Original>
         <Expanded>
-          2 &lt; 10
+          3.1415926535 != Approx( 3.1415926535 )
         </Expanded>
       </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          i &lt; 10
+          data.str_hello != "hello"
         </Original>
         <Expanded>
-          3 &lt; 10
+          "hello" != "hello"
         </Expanded>
       </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          i &lt; 10
+          data.str_hello.size() != 5
         </Original>
         <Expanded>
-          4 &lt; 10
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
-        <Original>
-          i &lt; 10
-        </Original>
-        <Expanded>
-          5 &lt; 10
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
-        <Original>
-          i &lt; 10
-        </Original>
-        <Expanded>
-          6 &lt; 10
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
-        <Original>
-          i &lt; 10
-        </Original>
-        <Expanded>
-          7 &lt; 10
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
-        <Original>
-          i &lt; 10
-        </Original>
-        <Expanded>
-          8 &lt; 10
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
-        <Original>
-          i &lt; 10
-        </Original>
-        <Expanded>
-          9 &lt; 10
-        </Expanded>
-      </Expression>
-      <Info>
-        current counter 10
-      </Info>
-      <Info>
-        i := 10
-      </Info>
-      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
-        <Original>
-          i &lt; 10
-        </Original>
-        <Expanded>
-          10 &lt; 10
-        </Expanded>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="The NO_FAIL macro reports a failure but does not fail the test">
-      <Expression success="false" type="CHECK_NOFAIL" filename="projects/SelfTest/MessageTests.cpp" >
-        <Original>
-          1 == 2
-        </Original>
-        <Expanded>
-          1 == 2
+          5 != 5
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="just info">
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="just failure">
-      <Failure>
-        Previous info should not be seen
-      </Failure>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="sends information to INFO">
-      <Info>
-        hi
-      </Info>
-      <Info>
-        i := 7
-      </Info>
-      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+    <TestCase name="Inequality checks that should succeed">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          false
+          data.int_seven != 6
         </Original>
         <Expanded>
-          false
+          7 != 6
         </Expanded>
       </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="Pointers can be converted to strings">
-      <Warning>
-        actual address of p: 0x<hex digits>
-      </Warning>
-      <Warning>
-        toString(p): 0x<hex digits>
-      </Warning>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="random SECTION tests">
-      <Section name="s1" description="doesn't equal">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            a != b
-          </Original>
-          <Expanded>
-            1 != 2
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            b != a
-          </Original>
-          <Expanded>
-            2 != 1
-          </Expanded>
-        </Expression>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="s2" description="not equal">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            a != b
-          </Original>
-          <Expanded>
-            1 != 2
-          </Expanded>
-        </Expression>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="nested SECTION tests">
-      <Section name="s1" description="doesn't equal">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            a != b
-          </Original>
-          <Expanded>
-            1 != 2
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            b != a
-          </Original>
-          <Expanded>
-            2 != 1
-          </Expanded>
-        </Expression>
-        <Section name="s2" description="not equal">
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-            <Original>
-              a != b
-            </Original>
-            <Expanded>
-              1 != 2
-            </Expanded>
-          </Expression>
-          <OverallResults successes="1" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="3" failures="0" expectedFailures="0"/>
-      </Section>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="more nested SECTION tests">
-      <Section name="s1" description="doesn't equal">
-        <Section name="s2" description="equal">
-          <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-            <Original>
-              a == b
-            </Original>
-            <Expanded>
-              1 == 2
-            </Expanded>
-          </Expression>
-          <OverallResults successes="0" failures="1" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="0" failures="1" expectedFailures="0"/>
-      </Section>
-      <Section name="s1" description="doesn't equal">
-        <Section name="s3" description="not equal">
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-            <Original>
-              a != b
-            </Original>
-            <Expanded>
-              1 != 2
-            </Expanded>
-          </Expression>
-          <OverallResults successes="1" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="s1" description="doesn't equal">
-        <Section name="s4" description="less than">
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-            <Original>
-              a &lt; b
-            </Original>
-            <Expanded>
-              1 &lt; 2
-            </Expanded>
-          </Expression>
-          <OverallResults successes="1" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="even more nested SECTION tests">
-      <Section name="c">
-        <Section name="d (leaf)">
-          <OverallResults successes="1" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="c">
-        <Section name="e (leaf)">
-          <OverallResults successes="1" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="f (leaf)">
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="looped SECTION tests">
-      <Section name="s1" description="b is currently: 0">
-        <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            b > a
-          </Original>
-          <Expanded>
-            0 > 1
-          </Expanded>
-        </Expression>
-        <OverallResults successes="0" failures="1" expectedFailures="0"/>
-      </Section>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="looped tests">
-      <Info>
-        Testing if fib[0] (1) is even
-      </Info>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          ( fib[i] % 2 ) == 0
+          data.int_seven != 8
         </Original>
         <Expanded>
-          1 == 0
+          7 != 8
         </Expanded>
       </Expression>
-      <Info>
-        Testing if fib[1] (1) is even
-      </Info>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          ( fib[i] % 2 ) == 0
+          data.float_nine_point_one != Approx( 9.11f )
         </Original>
         <Expanded>
-          1 == 0
+          9.1f != Approx( 9.1099996567 )
         </Expanded>
       </Expression>
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          ( fib[i] % 2 ) == 0
+          data.float_nine_point_one != Approx( 9.0f )
         </Original>
         <Expanded>
-          0 == 0
+          9.1f != Approx( 9.0 )
         </Expanded>
       </Expression>
-      <Info>
-        Testing if fib[3] (3) is even
-      </Info>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          ( fib[i] % 2 ) == 0
+          data.float_nine_point_one != Approx( 1 )
         </Original>
         <Expanded>
-          1 == 0
+          9.1f != Approx( 1.0 )
         </Expanded>
       </Expression>
-      <Info>
-        Testing if fib[4] (5) is even
-      </Info>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          ( fib[i] % 2 ) == 0
+          data.float_nine_point_one != Approx( 0 )
         </Original>
         <Expanded>
-          1 == 0
+          9.1f != Approx( 0.0 )
         </Expanded>
       </Expression>
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          ( fib[i] % 2 ) == 0
+          data.double_pi != Approx( 3.1415 )
         </Original>
         <Expanded>
-          0 == 0
+          3.1415926535 != Approx( 3.1415 )
         </Expanded>
       </Expression>
-      <Info>
-        Testing if fib[6] (13) is even
-      </Info>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          ( fib[i] % 2 ) == 0
+          data.str_hello != "goodbye"
         </Original>
         <Expanded>
-          1 == 0
+          "hello" != "goodbye"
         </Expanded>
       </Expression>
-      <Info>
-        Testing if fib[7] (21) is even
-      </Info>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          ( fib[i] % 2 ) == 0
+          data.str_hello != "hell"
         </Original>
         <Expanded>
-          1 == 0
+          "hello" != "hell"
         </Expanded>
       </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="Sends stuff to stdout and stderr">
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="null strings">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          makeString( false ) != static_cast&lt;char*>(nullptr)
+          data.str_hello != "hello1"
         </Original>
         <Expanded>
-          "valid string" != {null string}
+          "hello" != "hello1"
         </Expanded>
       </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          makeString( true ) == static_cast&lt;char*>(nullptr)
+          data.str_hello.size() != 6
         </Original>
         <Expanded>
-          {null string} == {null string}
+          5 != 6
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="checkedIf">
-      <Expression success="true" type="CHECKED_IF" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          flag
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testCheckedIf( true )
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="checkedIf, failing">
-      <Expression success="false" type="CHECKED_IF" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          flag
-        </Original>
-        <Expanded>
-          false
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testCheckedIf( false )
-        </Original>
-        <Expanded>
-          false
-        </Expanded>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="checkedElse">
-      <Expression success="true" type="CHECKED_ELSE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          flag
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testCheckedElse( true )
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="checkedElse, failing">
-      <Expression success="false" type="CHECKED_ELSE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          flag
-        </Original>
-        <Expanded>
-          false
-        </Expanded>
-      </Expression>
-      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testCheckedElse( false )
-        </Original>
-        <Expanded>
-          false
-        </Expanded>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="xmlentitycheck">
-      <Section name="embedded xml" description="&lt;test>it should be possible to embed xml characters, such as &lt;, &quot; or &amp;, or even whole &lt;xml>documents&lt;/xml> within an attribute&lt;/test>">
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="encoded chars" description="these should all be encoded: &amp;&amp;&amp;&quot;&quot;&quot;&lt;&lt;&lt;&amp;&quot;&lt;&lt;&amp;&quot;">
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="send a single char to INFO">
-      <Info>
-        3
-      </Info>
-      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          false
-        </Original>
-        <Expanded>
-          false
-        </Expanded>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="atomic if">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          x == 0
-        </Original>
-        <Expanded>
-          0 == 0
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="String matchers">
-      <Expression success="true" type="REQUIRE_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), Contains( "string" )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" contains: "string"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), Contains( "abc" )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" contains: "abc"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), StartsWith( "this" )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" starts with: "this"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), EndsWith( "substring" )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" ends with: "substring"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Contains string matcher">
-      <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), Contains( "not there" )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" contains: "not there"
-        </Expanded>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="StartsWith string matcher">
-      <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), StartsWith( "string" )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" starts with: "string"
-        </Expanded>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="EndsWith string matcher">
-      <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), EndsWith( "this" )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" ends with: "this"
-        </Expanded>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="Equals string matcher">
-      <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), Equals( "something else" )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" equals: "something else"
-        </Expanded>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="Equals string matcher, with NULL">
-      <Expression success="true" type="REQUIRE_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          "", Equals(nullptr)
-        </Original>
-        <Expanded>
-          "" equals: ""
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="AllOf matcher">
-      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), AllOf( Catch::Contains( "string" ), Catch::Contains( "abc" ) )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" ( contains: "string" and contains: "abc" )
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="AnyOf matcher">
-      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), AnyOf( Catch::Contains( "string" ), Catch::Contains( "not there" ) )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" ( contains: "string" or contains: "not there" )
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), AnyOf( Catch::Contains( "not there" ), Catch::Contains( "string" ) )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" ( contains: "not there" or contains: "string" )
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Equals">
-      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), Equals( "this string contains 'abc' as a substring" )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Matchers can be (AllOf) composed with the &amp;&amp; operator">
-      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), Contains( "string" ) &amp;&amp; Contains( "abc" ) &amp;&amp; Contains( "substring" ) &amp;&amp; Contains( "contains" )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" ( contains: "string" and contains: "abc" and contains: "substring" and contains: "contains" )
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Matchers can be (AnyOf) composed with the || operator">
-      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), Contains( "string" ) || Contains( "different" ) || Contains( "random" )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" ( contains: "string" or contains: "different" or contains: "random" )
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching2(), Contains( "string" ) || Contains( "different" ) || Contains( "random" )
-        </Original>
-        <Expanded>
-          "some completely different text that contains one common word" ( contains: "string" or contains: "different" or contains: "random" )
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Matchers can be composed with both &amp;&amp; and ||">
-      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) &amp;&amp; Contains( "substring" )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "substring" )
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Matchers can be composed with both &amp;&amp; and || - failing">
-      <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) &amp;&amp; Contains( "random" )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "random" )
-        </Expanded>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="Matchers can be negated (Not) with the ! operator">
-      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), !Contains( "different" )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" not contains: "different"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Matchers can be negated (Not) with the ! operator - failing">
-      <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          testStringForMatching(), !Contains( "substring" )
-        </Original>
-        <Expanded>
-          "this string contains 'abc' as a substring" not contains: "substring"
-        </Expanded>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="Factorials are computed">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          Factorial(0) == 1
-        </Original>
-        <Expanded>
-          1 == 1
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          Factorial(1) == 1
-        </Original>
-        <Expanded>
-          1 == 1
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          Factorial(2) == 2
-        </Original>
-        <Expanded>
-          2 == 2
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          Factorial(3) == 6
-        </Original>
-        <Expanded>
-          6 == 6
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          Factorial(10) == 3628800
-        </Original>
-        <Expanded>
-          3628800 (0x<hex digits>) == 3628800 (0x<hex digits>)
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="An empty test with no assertions">
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Nice descriptive name">
-      <Warning>
-        This one ran
-      </Warning>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="first tag">
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="second tag">
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="vectors can be sized and resized">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          v.size() == 5
-        </Original>
-        <Expanded>
-          5 == 5
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          v.capacity() >= 5
-        </Original>
-        <Expanded>
-          5 >= 5
-        </Expanded>
-      </Expression>
-      <Section name="resizing bigger changes size and capacity">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            v.size() == 10
-          </Original>
-          <Expanded>
-            10 == 10
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            v.capacity() >= 10
-          </Original>
-          <Expanded>
-            10 >= 10
-          </Expanded>
-        </Expression>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          v.size() == 5
-        </Original>
-        <Expanded>
-          5 == 5
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          v.capacity() >= 5
-        </Original>
-        <Expanded>
-          5 >= 5
-        </Expanded>
-      </Expression>
-      <Section name="resizing smaller changes size but not capacity">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            v.size() == 0
-          </Original>
-          <Expanded>
-            0 == 0
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            v.capacity() >= 5
-          </Original>
-          <Expanded>
-            5 >= 5
-          </Expanded>
-        </Expression>
-        <Section name="We can use the 'swap trick' to reset the capacity">
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-            <Original>
-              v.capacity() == 0
-            </Original>
-            <Expanded>
-              0 == 0
-            </Expanded>
-          </Expression>
-          <OverallResults successes="1" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="3" failures="0" expectedFailures="0"/>
-      </Section>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          v.size() == 5
-        </Original>
-        <Expanded>
-          5 == 5
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          v.capacity() >= 5
-        </Original>
-        <Expanded>
-          5 >= 5
-        </Expanded>
-      </Expression>
-      <Section name="reserving bigger changes capacity but not size">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            v.size() == 5
-          </Original>
-          <Expanded>
-            5 == 5
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            v.capacity() >= 10
-          </Original>
-          <Expanded>
-            10 >= 10
-          </Expanded>
-        </Expression>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          v.size() == 5
-        </Original>
-        <Expanded>
-          5 == 5
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          v.capacity() >= 5
-        </Original>
-        <Expanded>
-          5 >= 5
-        </Expanded>
-      </Expression>
-      <Section name="reserving smaller does not change size or capacity">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            v.size() == 5
-          </Original>
-          <Expanded>
-            5 == 5
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            v.capacity() >= 5
-          </Original>
-          <Expanded>
-            5 >= 5
-          </Expanded>
-        </Expression>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="A couple of nested sections followed by a failure">
-      <Section name="Outer">
-        <Section name="Inner">
-          <OverallResults successes="1" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <Failure>
-        to infinity and beyond
-      </Failure>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="not allowed">
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Tabs and newlines show in output">
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          s1 == s2
-        </Original>
-        <Expanded>
-          "if ($b == 10) {
-		$a	= 20;
-}"
-==
-"if ($b == 10) {
-	$a = 20;
-}
-"
-        </Expanded>
-      </Expression>
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="toString on const wchar_t const pointer returns the string contents">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          result == "\"wide load\""
-        </Original>
-        <Expanded>
-          ""wide load"" == ""wide load""
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="toString on const wchar_t pointer returns the string contents">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          result == "\"wide load\""
-        </Original>
-        <Expanded>
-          ""wide load"" == ""wide load""
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="toString on wchar_t const pointer returns the string contents">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          result == "\"wide load\""
-        </Original>
-        <Expanded>
-          ""wide load"" == ""wide load""
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="toString on wchar_t returns the string contents">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          result == "\"wide load\""
-        </Original>
-        <Expanded>
-          ""wide load"" == ""wide load""
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="XmlEncode">
-      <Section name="normal string">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            encode( "normal string" ) == "normal string"
-          </Original>
-          <Expanded>
-            "normal string" == "normal string"
-          </Expanded>
-        </Expression>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="empty string">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            encode( "" ) == ""
-          </Original>
-          <Expanded>
-            "" == ""
-          </Expanded>
-        </Expression>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="string with ampersand">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            encode( "smith &amp; jones" ) == "smith &amp;amp; jones"
-          </Original>
-          <Expanded>
-            "smith &amp;amp; jones" == "smith &amp;amp; jones"
-          </Expanded>
-        </Expression>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="string with less-than">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            encode( "smith &lt; jones" ) == "smith &amp;lt; jones"
-          </Original>
-          <Expanded>
-            "smith &amp;lt; jones" == "smith &amp;lt; jones"
-          </Expanded>
-        </Expression>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="string with greater-than">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            encode( "smith > jones" ) == "smith > jones"
-          </Original>
-          <Expanded>
-            "smith > jones" == "smith > jones"
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            encode( "smith ]]&gt; jones" ) == "smith ]]&amp;gt; jones"
-          </Original>
-          <Expanded>
-            "smith ]]&amp;gt; jones"
-==
-"smith ]]&amp;gt; jones"
-          </Expanded>
-        </Expression>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="string with quotes">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            encode( stringWithQuotes ) == stringWithQuotes
-          </Original>
-          <Expanded>
-            "don't "quote" me on that"
-==
-"don't "quote" me on that"
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            encode( stringWithQuotes, Catch::XmlEncode::ForAttributes ) == "don't &amp;quot;quote&amp;quot; me on that"
-          </Original>
-          <Expanded>
-            "don't &amp;quot;quote&amp;quot; me on that"
-==
-"don't &amp;quot;quote&amp;quot; me on that"
-          </Expanded>
-        </Expression>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="string with control char (1)">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            encode( "[\x01]" ) == "[&amp;#x01;]"
-          </Original>
-          <Expanded>
-            "[&amp;#x01;]" == "[&amp;#x01;]"
-          </Expanded>
-        </Expression>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="string with control char (x7F)">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-          <Original>
-            encode( "[\x7F]" ) == "[&amp;#x7F;]"
-          </Original>
-          <Expanded>
-            "[&amp;#x7F;]" == "[&amp;#x7F;]"
-          </Expanded>
-        </Expression>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="long long">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
-        <Original>
-          l == std::numeric_limits&lt;long long>::max()
-        </Original>
-        <Expanded>
-          9223372036854775807 (0x<hex digits>)
-==
-9223372036854775807 (0x<hex digits>)
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="This test 'should' fail but doesn't">
-      <OverallResult success="false"/>
-    </TestCase>
-    <TestCase name="# A test name that starts with a #">
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Process can be configured on command line">
-      <Section name="default - no arguments">
-        <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            parseIntoConfig( argv, config )
-          </Original>
-          <Expanded>
-            parseIntoConfig( argv, config )
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            config.shouldDebugBreak == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            config.abortAfter == -1
-          </Original>
-          <Expanded>
-            -1 == -1
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            config.noThrow == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            config.reporterNames.empty()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <OverallResults successes="5" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="test lists">
-        <Section name="1 test" description="Specify one test case using">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              cfg.testSpec().matches( fakeTestCase( "notIncluded" ) ) == false
-            </Original>
-            <Expanded>
-              false == false
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              cfg.testSpec().matches( fakeTestCase( "test1" ) )
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <OverallResults successes="3" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="3" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="test lists">
-        <Section name="Specify one test case exclusion using exclude:">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false
-            </Original>
-            <Expanded>
-              false == false
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) )
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <OverallResults successes="3" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="3" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="test lists">
-        <Section name="Specify one test case exclusion using ~">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false
-            </Original>
-            <Expanded>
-              false == false
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) )
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <OverallResults successes="3" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="3" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="reporter">
-        <Section name="-r/console">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.reporterNames[0] == "console"
-            </Original>
-            <Expanded>
-              "console" == "console"
-            </Expanded>
-          </Expression>
-          <OverallResults successes="2" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="reporter">
-        <Section name="-r/xml">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.reporterNames[0] == "xml"
-            </Original>
-            <Expanded>
-              "xml" == "xml"
-            </Expanded>
-          </Expression>
-          <OverallResults successes="2" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="reporter">
-        <Section name="-r xml and junit">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.reporterNames.size() == 2
-            </Original>
-            <Expanded>
-              2 == 2
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.reporterNames[0] == "xml"
-            </Original>
-            <Expanded>
-              "xml" == "xml"
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.reporterNames[1] == "junit"
-            </Original>
-            <Expanded>
-              "junit" == "junit"
-            </Expanded>
-          </Expression>
-          <OverallResults successes="4" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="4" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="reporter">
-        <Section name="--reporter/junit">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.reporterNames[0] == "junit"
-            </Original>
-            <Expanded>
-              "junit" == "junit"
-            </Expanded>
-          </Expression>
-          <OverallResults successes="2" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="debugger">
-        <Section name="-b">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.shouldDebugBreak == true
-            </Original>
-            <Expanded>
-              true == true
-            </Expanded>
-          </Expression>
-          <OverallResults successes="2" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="debugger">
-        <Section name="--break">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.shouldDebugBreak
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <OverallResults successes="2" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="abort">
-        <Section name="-a aborts after first failure">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.abortAfter == 1
-            </Original>
-            <Expanded>
-              1 == 1
-            </Expanded>
-          </Expression>
-          <OverallResults successes="2" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="abort">
-        <Section name="-x 2 aborts after two failures">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.abortAfter == 2
-            </Original>
-            <Expanded>
-              2 == 2
-            </Expanded>
-          </Expression>
-          <OverallResults successes="2" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="abort">
-        <Section name="-x must be greater than zero">
-          <Expression success="true" type="REQUIRE_THAT" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfigAndReturnError( argv, config ), Contains( "greater than zero" )
-            </Original>
-            <Expanded>
-              "Value after -x or --abortAfter must be greater than zero
-- while parsing: (-x, --abortx &lt;no. failures>)" contains: "greater than zero"
-            </Expanded>
-          </Expression>
-          <OverallResults successes="1" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="abort">
-        <Section name="-x must be numeric">
-          <Expression success="true" type="REQUIRE_THAT" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfigAndReturnError( argv, config ), Contains( "-x" )
-            </Original>
-            <Expanded>
-              "Unable to convert oops to destination type
-- while parsing: (-x, --abortx &lt;no. failures>)" contains: "-x"
-            </Expanded>
-          </Expression>
-          <OverallResults successes="1" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="nothrow">
-        <Section name="-e">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.noThrow == true
-            </Original>
-            <Expanded>
-              true == true
-            </Expanded>
-          </Expression>
-          <OverallResults successes="2" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="nothrow">
-        <Section name="--nothrow">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.noThrow == true
-            </Original>
-            <Expanded>
-              true == true
-            </Expanded>
-          </Expression>
-          <OverallResults successes="2" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="output filename">
-        <Section name="-o filename">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.outputFilename == "filename.ext"
-            </Original>
-            <Expanded>
-              "filename.ext" == "filename.ext"
-            </Expanded>
-          </Expression>
-          <OverallResults successes="2" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="output filename">
-        <Section name="--out">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.outputFilename == "filename.ext"
-            </Original>
-            <Expanded>
-              "filename.ext" == "filename.ext"
-            </Expanded>
-          </Expression>
-          <OverallResults successes="2" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="combinations">
-        <Section name="Single character flags can be combined">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.abortAfter == 1
-            </Original>
-            <Expanded>
-              1 == 1
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.shouldDebugBreak
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.noThrow == true
-            </Original>
-            <Expanded>
-              true == true
-            </Expanded>
-          </Expression>
-          <OverallResults successes="4" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="4" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="use-colour">
-        <Section name="without option">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.useColour == UseColour::Auto
-            </Original>
-            <Expanded>
-              0 == 0
-            </Expanded>
-          </Expression>
-          <OverallResults successes="2" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="use-colour">
-        <Section name="auto">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.useColour == UseColour::Auto
-            </Original>
-            <Expanded>
-              0 == 0
-            </Expanded>
-          </Expression>
-          <OverallResults successes="2" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="use-colour">
-        <Section name="yes">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.useColour == UseColour::Yes
-            </Original>
-            <Expanded>
-              1 == 1
-            </Expanded>
-          </Expression>
-          <OverallResults successes="2" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="use-colour">
-        <Section name="no">
-          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config )
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              config.useColour == UseColour::No
-            </Original>
-            <Expanded>
-              2 == 2
-            </Expanded>
-          </Expression>
-          <OverallResults successes="2" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="use-colour">
-        <Section name="error">
-          <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/TestMain.cpp" >
-            <Original>
-              parseIntoConfig( argv, config ), Contains( "colour mode must be one of" )
-            </Original>
-            <Expanded>
-              parseIntoConfig( argv, config ), Contains( "colour mode must be one of" )
-            </Expanded>
-          </Expression>
-          <OverallResults successes="1" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <OverallResult success="true"/>
-    </TestCase>
     <TestCase name="Long strings can be wrapped">
       <Section name="plain string">
         <Section name="No wrapping">
@@ -5176,168 +3042,6 @@
       </Section>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="replaceInPlace">
-      <Section name="replace single char">
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            replaceInPlace( letters, "b", "z" )
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            letters == "azcdefcg"
-          </Original>
-          <Expanded>
-            "azcdefcg" == "azcdefcg"
-          </Expanded>
-        </Expression>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="replace two chars">
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            replaceInPlace( letters, "c", "z" )
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            letters == "abzdefzg"
-          </Original>
-          <Expanded>
-            "abzdefzg" == "abzdefzg"
-          </Expanded>
-        </Expression>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="replace first char">
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            replaceInPlace( letters, "a", "z" )
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            letters == "zbcdefcg"
-          </Original>
-          <Expanded>
-            "zbcdefcg" == "zbcdefcg"
-          </Expanded>
-        </Expression>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="replace last char">
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            replaceInPlace( letters, "g", "z" )
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            letters == "abcdefcz"
-          </Original>
-          <Expanded>
-            "abcdefcz" == "abcdefcz"
-          </Expanded>
-        </Expression>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="replace all chars">
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            replaceInPlace( letters, letters, "replaced" )
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            letters == "replaced"
-          </Original>
-          <Expanded>
-            "replaced" == "replaced"
-          </Expanded>
-        </Expression>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="replace no chars">
-        <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            !replaceInPlace( letters, "x", "z" )
-          </Original>
-          <Expanded>
-            !false
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            letters == letters
-          </Original>
-          <Expanded>
-            "abcdefcg" == "abcdefcg"
-          </Expanded>
-        </Expression>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="escape '">
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            replaceInPlace( s, "'", "|'" )
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-          <Original>
-            s == "didn|'t"
-          </Original>
-          <Expanded>
-            "didn|'t" == "didn|'t"
-          </Expanded>
-        </Expression>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Strings can be rendered with colour">
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Text can be formatted using the Text class">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-        <Original>
-          Text( "hi there" ).toString() == "hi there"
-        </Original>
-        <Expanded>
-          "hi there" == "hi there"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
-        <Original>
-          Text( "hi there", narrow ).toString() == "hi\nthere"
-        </Original>
-        <Expanded>
-          "hi
-there"
-==
-"hi
-there"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
     <TestCase name="Long text is truncted">
       <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TestMain.cpp" >
         <Original>
@@ -6352,204 +4056,122 @@
     <TestCase name="ManuallyRegistered">
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="Parsing a std::pair">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+    <TestCase name="Matchers can be (AllOf) composed with the &amp;&amp; operator">
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
-          (std::pair&lt;int, int>( 1, 2 )) == aNicePair
+          testStringForMatching(), Contains( "string" ) &amp;&amp; Contains( "abc" ) &amp;&amp; Contains( "substring" ) &amp;&amp; Contains( "contains" )
         </Original>
         <Expanded>
-          std::pair( 1, 2 ) == std::pair( 1, 2 )
+          "this string contains 'abc' as a substring" ( contains: "string" and contains: "abc" and contains: "substring" and contains: "contains" )
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="Where there is more to the expression after the RHS">
-      <Warning>
-        Uncomment the code in this test to check that it gives a sensible compiler error
-      </Warning>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Where the LHS is not a simple value">
-      <Warning>
-        Uncomment the code in this test to check that it gives a sensible compiler error
-      </Warning>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="A failing expression with a non streamable type is still captured">
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" >
+    <TestCase name="Matchers can be (AnyOf) composed with the || operator">
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
-          &amp;o1 == &amp;o2
+          testStringForMatching(), Contains( "string" ) || Contains( "different" ) || Contains( "random" )
         </Original>
         <Expanded>
-          0x<hex digits> == 0x<hex digits>
+          "this string contains 'abc' as a substring" ( contains: "string" or contains: "different" or contains: "random" )
         </Expanded>
       </Expression>
-      <Expression success="false" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
-          o1 == o2
+          testStringForMatching2(), Contains( "string" ) || Contains( "different" ) || Contains( "random" )
         </Original>
         <Expanded>
-          {?} == {?}
+          "some completely different text that contains one common word" ( contains: "string" or contains: "different" or contains: "random" )
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Matchers can be composed with both &amp;&amp; and ||">
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) &amp;&amp; Contains( "substring" )
+        </Original>
+        <Expanded>
+          "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "substring" )
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Matchers can be composed with both &amp;&amp; and || - failing">
+      <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) &amp;&amp; Contains( "random" )
+        </Original>
+        <Expanded>
+          "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "random" )
         </Expanded>
       </Expression>
       <OverallResult success="false"/>
     </TestCase>
-    <TestCase name="string literals of different sizes can be compared">
-      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+    <TestCase name="Matchers can be negated (Not) with the ! operator">
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
-          std::string( "first" ) == "second"
+          testStringForMatching(), !Contains( "different" )
         </Original>
         <Expanded>
-          "first" == "second"
+          "this string contains 'abc' as a substring" not contains: "different"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Matchers can be negated (Not) with the ! operator - failing">
+      <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testStringForMatching(), !Contains( "substring" )
+        </Original>
+        <Expanded>
+          "this string contains 'abc' as a substring" not contains: "substring"
         </Expanded>
       </Expression>
       <OverallResult success="false"/>
     </TestCase>
-    <TestCase name="An expression with side-effects should only be evaluated once">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+    <TestCase name="Mismatching exception messages failing the test">
+      <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
-          i++ == 7
+          thisThrows(), "expected exception"
         </Original>
         <Expanded>
-          7 == 7
+          thisThrows(), "expected exception"
         </Expanded>
       </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="false" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
-          i++ == 8
+          thisThrows(), "should fail"
         </Original>
         <Expanded>
-          8 == 8
+          expected exception
         </Expanded>
       </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="Nice descriptive name">
+      <Warning>
+        This one ran
+      </Warning>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="Operators at different namespace levels not hijacked by Koenig lookup">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+    <TestCase name="Non-std exceptions can be translated">
+      <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
+        custom exception
+      </Exception>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="NotImplemented exception">
+      <Expression success="true" type="REQUIRE_THROWS" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
-          0x<hex digits> == o
+          thisFunctionNotImplemented( 7 )
         </Original>
         <Expanded>
-          3221225472 (0x<hex digits>) == {?}
+          thisFunctionNotImplemented( 7 )
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="Demonstrate that a non-const == is not used">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-        <Original>
-          t == 1u
-        </Original>
-        <Expanded>
-          {?} == 1
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Test enum bit values">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-        <Original>
-          0x<hex digits> == bit30and31
-        </Original>
-        <Expanded>
-          3221225472 (0x<hex digits>) == 3221225472
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="boolean member">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-        <Original>
-          obj.prop != nullptr
-        </Original>
-        <Expanded>
-          0x<hex digits> != nullptr
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="(unimplemented) static bools can be evaluated">
-      <Section name="compare to true">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-          <Original>
-            is_true&lt;true>::value == true
-          </Original>
-          <Expanded>
-            true == true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-          <Original>
-            true == is_true&lt;true>::value
-          </Original>
-          <Expanded>
-            true == true
-          </Expanded>
-        </Expression>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="compare to false">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-          <Original>
-            is_true&lt;false>::value == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-          <Original>
-            false == is_true&lt;false>::value
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="negation">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-          <Original>
-            !is_true&lt;false>::value
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="double negation">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-          <Original>
-            !!is_true&lt;true>::value
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
-      </Section>
-      <Section name="direct">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-          <Original>
-            is_true&lt;true>::value
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/TrickyTests.cpp" >
-          <Original>
-            !is_true&lt;false>::value
-          </Original>
-          <Expanded>
-            !false
-          </Expanded>
-        </Expression>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
-      </Section>
-      <OverallResult success="true"/>
-    </TestCase>
     <TestCase name="Objects that evaluated in boolean contexts can be checked">
       <Expression success="true" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
@@ -6577,1479 +4199,325 @@
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="Assertions then sections">
+    <TestCase name="Operators at different namespace levels not hijacked by Koenig lookup">
       <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
-          Catch::alwaysTrue()
+          0x<hex digits> == o
         </Original>
         <Expanded>
-          true
+          3221225472 (0x<hex digits>) == {?}
         </Expanded>
       </Expression>
-      <Section name="A section">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-          <Original>
-            Catch::alwaysTrue()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Section name="Another section">
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-            <Original>
-              Catch::alwaysTrue()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <OverallResults successes="1" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Ordering comparison checks that should fail">
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven > 7
+        </Original>
+        <Expanded>
+          7 > 7
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven &lt; 7
+        </Original>
+        <Expanded>
+          7 &lt; 7
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven > 8
+        </Original>
+        <Expanded>
+          7 > 8
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven &lt; 6
+        </Original>
+        <Expanded>
+          7 &lt; 6
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven &lt; 0
+        </Original>
+        <Expanded>
+          7 &lt; 0
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven &lt; -1
+        </Original>
+        <Expanded>
+          7 &lt; -1
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven >= 8
+        </Original>
+        <Expanded>
+          7 >= 8
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven &lt;= 6
+        </Original>
+        <Expanded>
+          7 &lt;= 6
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.float_nine_point_one &lt; 9
+        </Original>
+        <Expanded>
+          9.1f &lt; 9
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.float_nine_point_one > 10
+        </Original>
+        <Expanded>
+          9.1f > 10
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.float_nine_point_one > 9.2
+        </Original>
+        <Expanded>
+          9.1f > 9.2
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello > "hello"
+        </Original>
+        <Expanded>
+          "hello" > "hello"
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello &lt; "hello"
+        </Original>
+        <Expanded>
+          "hello" &lt; "hello"
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello > "hellp"
+        </Original>
+        <Expanded>
+          "hello" > "hellp"
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello > "z"
+        </Original>
+        <Expanded>
+          "hello" > "z"
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello &lt; "hellm"
+        </Original>
+        <Expanded>
+          "hello" &lt; "hellm"
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello &lt; "a"
+        </Original>
+        <Expanded>
+          "hello" &lt; "a"
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello >= "z"
+        </Original>
+        <Expanded>
+          "hello" >= "z"
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello &lt;= "a"
+        </Original>
+        <Expanded>
+          "hello" &lt;= "a"
+        </Expanded>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="Ordering comparison checks that should succeed">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven &lt; 8
+        </Original>
+        <Expanded>
+          7 &lt; 8
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven > 6
+        </Original>
+        <Expanded>
+          7 > 6
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven > 0
+        </Original>
+        <Expanded>
+          7 > 0
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven > -1
+        </Original>
+        <Expanded>
+          7 > -1
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven >= 7
+        </Original>
+        <Expanded>
+          7 >= 7
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven >= 6
+        </Original>
+        <Expanded>
+          7 >= 6
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven &lt;= 7
+        </Original>
+        <Expanded>
+          7 &lt;= 7
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.int_seven &lt;= 8
+        </Original>
+        <Expanded>
+          7 &lt;= 8
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.float_nine_point_one > 9
+        </Original>
+        <Expanded>
+          9.1f > 9
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.float_nine_point_one &lt; 10
+        </Original>
+        <Expanded>
+          9.1f &lt; 10
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.float_nine_point_one &lt; 9.2
+        </Original>
+        <Expanded>
+          9.1f &lt; 9.2
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello &lt;= "hello"
+        </Original>
+        <Expanded>
+          "hello" &lt;= "hello"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello >= "hello"
+        </Original>
+        <Expanded>
+          "hello" >= "hello"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello &lt; "hellp"
+        </Original>
+        <Expanded>
+          "hello" &lt; "hellp"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello &lt; "zebra"
+        </Original>
+        <Expanded>
+          "hello" &lt; "zebra"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello > "hellm"
+        </Original>
+        <Expanded>
+          "hello" > "hellm"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          data.str_hello > "a"
+        </Original>
+        <Expanded>
+          "hello" > "a"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Output from all sections is reported">
+      <Section name="one">
+        <Failure>
+          Message from section one
+        </Failure>
+        <OverallResults successes="0" failures="1" expectedFailures="0"/>
       </Section>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-        <Original>
-          Catch::alwaysTrue()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Section name="A section">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-          <Original>
-            Catch::alwaysTrue()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Section name="Another other section">
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-            <Original>
-              Catch::alwaysTrue()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <OverallResults successes="1" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      <Section name="two">
+        <Failure>
+          Message from section two
+        </Failure>
+        <OverallResults successes="0" failures="1" expectedFailures="0"/>
       </Section>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="non streamable - with conv. op">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-        <Original>
-          s == "7"
-        </Original>
-        <Expanded>
-          "7" == "7"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Comparing function pointers">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-        <Original>
-          a
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-        <Original>
-          a == &amp;foo
-        </Original>
-        <Expanded>
-          0x<hex digits> == 0x<hex digits>
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Comparing member function pointers">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" >
-        <Original>
-          m == &amp;S::f
-        </Original>
-        <Expanded>
-          0x<hex digits>
-==
-0x<hex digits>
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="pointer to class">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-        <Original>
-          p == 0
-        </Original>
-        <Expanded>
-          NULL == 0
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="null_ptr">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
-        <Original>
-          ptr.get() == nullptr
-        </Original>
-        <Expanded>
-          NULL == nullptr
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="X/level/0/a">
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="X/level/0/b">
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="X/level/1/a">
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="X/level/1/b">
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="toString( has_toString )">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
-        <Original>
-          Catch::toString( item ) == "toString( has_toString )"
-        </Original>
-        <Expanded>
-          "toString( has_toString )"
-==
-"toString( has_toString )"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="toString( has_maker )">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
-        <Original>
-          Catch::toString( item ) == "StringMaker&lt;has_maker>"
-        </Original>
-        <Expanded>
-          "StringMaker&lt;has_maker>"
-==
-"StringMaker&lt;has_maker>"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="toString( has_maker_and_toString )">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
-        <Original>
-          Catch::toString( item ) == "toString( has_maker_and_toString )"
-        </Original>
-        <Expanded>
-          "toString( has_maker_and_toString )"
-==
-"toString( has_maker_and_toString )"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="toString( vectors&lt;has_toString )">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
-        <Original>
-          Catch::toString( v ) == "{ {?} }"
-        </Original>
-        <Expanded>
-          "{ {?} }" == "{ {?} }"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="toString( vectors&lt;has_maker )">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
-        <Original>
-          Catch::toString( v ) == "{ StringMaker&lt;has_maker> }"
-        </Original>
-        <Expanded>
-          "{ StringMaker&lt;has_maker> }"
-==
-"{ StringMaker&lt;has_maker> }"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="toString( vectors&lt;has_maker_and_toString )">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
-        <Original>
-          Catch::toString( v ) == "{ StringMaker&lt;has_maker_and_toString> }"
-        </Original>
-        <Expanded>
-          "{ StringMaker&lt;has_maker_and_toString> }"
-==
-"{ StringMaker&lt;has_maker_and_toString> }"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Tracker">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          testCase.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          s1.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Section name="successfully close one section">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            s1.isSuccessfullyCompleted()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            testCase.isComplete() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            ctx.completedCycle()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            testCase.isSuccessfullyCompleted()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <OverallResults successes="4" failures="0" expectedFailures="0"/>
-      </Section>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          testCase.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          s1.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Section name="fail one section">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            s1.isComplete()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            s1.isSuccessfullyCompleted() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            testCase.isComplete() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            ctx.completedCycle()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            testCase.isSuccessfullyCompleted() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Section name="re-enter after failed section">
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              testCase2.isOpen()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              s1b.isOpen() == false
-            </Original>
-            <Expanded>
-              false == false
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              ctx.completedCycle()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              testCase.isComplete()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              testCase.isSuccessfullyCompleted()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <OverallResults successes="5" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="10" failures="0" expectedFailures="0"/>
-      </Section>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          testCase.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          s1.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Section name="fail one section">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            s1.isComplete()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            s1.isSuccessfullyCompleted() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            testCase.isComplete() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            ctx.completedCycle()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            testCase.isSuccessfullyCompleted() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Section name="re-enter after failed section and find next section">
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              testCase2.isOpen()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              s1b.isOpen() == false
-            </Original>
-            <Expanded>
-              false == false
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              s2.isOpen()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              ctx.completedCycle()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              testCase.isComplete()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              testCase.isSuccessfullyCompleted()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <OverallResults successes="6" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="11" failures="0" expectedFailures="0"/>
-      </Section>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          testCase.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          s1.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Section name="successfully close one section, then find another">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            s2.isOpen() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            testCase.isComplete() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Section name="Re-enter - skips S1 and enters S2">
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              testCase2.isOpen()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              s1b.isOpen() == false
-            </Original>
-            <Expanded>
-              false == false
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              s2b.isOpen()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              ctx.completedCycle() == false
-            </Original>
-            <Expanded>
-              false == false
-            </Expanded>
-          </Expression>
-          <Section name="Successfully close S2">
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                ctx.completedCycle()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s2b.isSuccessfullyCompleted()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                testCase2.isComplete() == false
-              </Original>
-              <Expanded>
-                false == false
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                testCase2.isSuccessfullyCompleted()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <OverallResults successes="4" failures="0" expectedFailures="0"/>
-          </Section>
-          <OverallResults successes="8" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="10" failures="0" expectedFailures="0"/>
-      </Section>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          testCase.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          s1.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Section name="successfully close one section, then find another">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            s2.isOpen() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            testCase.isComplete() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Section name="Re-enter - skips S1 and enters S2">
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              testCase2.isOpen()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              s1b.isOpen() == false
-            </Original>
-            <Expanded>
-              false == false
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              s2b.isOpen()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              ctx.completedCycle() == false
-            </Original>
-            <Expanded>
-              false == false
-            </Expanded>
-          </Expression>
-          <Section name="fail S2">
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                ctx.completedCycle()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s2b.isComplete()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s2b.isSuccessfullyCompleted() == false
-              </Original>
-              <Expanded>
-                false == false
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                testCase2.isSuccessfullyCompleted() == false
-              </Original>
-              <Expanded>
-                false == false
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                testCase3.isOpen()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s1c.isOpen() == false
-              </Original>
-              <Expanded>
-                false == false
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s2c.isOpen() == false
-              </Original>
-              <Expanded>
-                false == false
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                testCase3.isSuccessfullyCompleted()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <OverallResults successes="8" failures="0" expectedFailures="0"/>
-          </Section>
-          <OverallResults successes="12" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="14" failures="0" expectedFailures="0"/>
-      </Section>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          testCase.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          s1.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Section name="open a nested section">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            s2.isOpen()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            s2.isComplete()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            s1.isComplete() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            s1.isComplete()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            testCase.isComplete() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            testCase.isComplete()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <OverallResults successes="6" failures="0" expectedFailures="0"/>
-      </Section>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          testCase.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          s1.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Section name="start a generator">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            g1.isOpen()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            g1.index() == 0
-          </Original>
-          <Expanded>
-            0 == 0
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            g1.isComplete() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            s1.isComplete() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Section name="close outer section">
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              s1.isComplete() == false
-            </Original>
-            <Expanded>
-              false == false
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              testCase.isSuccessfullyCompleted() == false
-            </Original>
-            <Expanded>
-              false == false
-            </Expanded>
-          </Expression>
-          <Section name="Re-enter for second generation">
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                testCase2.isOpen()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s1b.isOpen()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                g1b.isOpen()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                g1b.index() == 1
-              </Original>
-              <Expanded>
-                1 == 1
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s1.isComplete() == false
-              </Original>
-              <Expanded>
-                false == false
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s1b.isComplete()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                g1b.isComplete()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                testCase2.isComplete()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <OverallResults successes="8" failures="0" expectedFailures="0"/>
-          </Section>
-          <OverallResults successes="10" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="14" failures="0" expectedFailures="0"/>
-      </Section>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          testCase.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          s1.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Section name="start a generator">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            g1.isOpen()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            g1.index() == 0
-          </Original>
-          <Expanded>
-            0 == 0
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            g1.isComplete() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            s1.isComplete() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Section name="Start a new inner section">
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              s2.isOpen()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              s2.isComplete()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              s1.isComplete() == false
-            </Original>
-            <Expanded>
-              false == false
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              testCase.isComplete() == false
-            </Original>
-            <Expanded>
-              false == false
-            </Expanded>
-          </Expression>
-          <Section name="Re-enter for second generation">
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                testCase2.isOpen()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s1b.isOpen()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                g1b.isOpen()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                g1b.index() == 1
-              </Original>
-              <Expanded>
-                1 == 1
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s2b.isOpen()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s2b.isComplete()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                g1b.isComplete()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s1b.isComplete()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                testCase2.isComplete()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <OverallResults successes="9" failures="0" expectedFailures="0"/>
-          </Section>
-          <OverallResults successes="13" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="17" failures="0" expectedFailures="0"/>
-      </Section>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          testCase.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-        <Original>
-          s1.isOpen()
-        </Original>
-        <Expanded>
-          true
-        </Expanded>
-      </Expression>
-      <Section name="start a generator">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            g1.isOpen()
-          </Original>
-          <Expanded>
-            true
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            g1.index() == 0
-          </Original>
-          <Expanded>
-            0 == 0
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            g1.isComplete() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-          <Original>
-            s1.isComplete() == false
-          </Original>
-          <Expanded>
-            false == false
-          </Expanded>
-        </Expression>
-        <Section name="Fail an inner section">
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              s2.isOpen()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              s2.isComplete()
-            </Original>
-            <Expanded>
-              true
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              s2.isSuccessfullyCompleted() == false
-            </Original>
-            <Expanded>
-              false == false
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              s1.isComplete() == false
-            </Original>
-            <Expanded>
-              false == false
-            </Expanded>
-          </Expression>
-          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-            <Original>
-              testCase.isComplete() == false
-            </Original>
-            <Expanded>
-              false == false
-            </Expanded>
-          </Expression>
-          <Section name="Re-enter for second generation">
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                testCase2.isOpen()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s1b.isOpen()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                g1b.isOpen()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                g1b.index() == 0
-              </Original>
-              <Expanded>
-                0 == 0
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s2b.isOpen() == false
-              </Original>
-              <Expanded>
-                false == false
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                g1b.isComplete() == false
-              </Original>
-              <Expanded>
-                false == false
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s1b.isComplete() == false
-              </Original>
-              <Expanded>
-                false == false
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                testCase2.isComplete() == false
-              </Original>
-              <Expanded>
-                false == false
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                testCase3.isOpen()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s1c.isOpen()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                g1c.isOpen()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                g1c.index() == 1
-              </Original>
-              <Expanded>
-                1 == 1
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s2c.isOpen()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s2c.isComplete()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                g1c.isComplete()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                s1c.isComplete()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
-              <Original>
-                testCase3.isComplete()
-              </Original>
-              <Expanded>
-                true
-              </Expanded>
-            </Expression>
-            <OverallResults successes="17" failures="0" expectedFailures="0"/>
-          </Section>
-          <OverallResults successes="22" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="26" failures="0" expectedFailures="0"/>
-      </Section>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="std::pair&lt;int,std::string> -> toString">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" >
-        <Original>
-          Catch::toString( value ) == "{ 34, \"xyzzy\" }"
-        </Original>
-        <Expanded>
-          "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="std::pair&lt;int,const std::string> -> toString">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" >
-        <Original>
-          Catch::toString(value) == "{ 34, \"xyzzy\" }"
-        </Original>
-        <Expanded>
-          "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="std::vector&lt;std::pair&lt;std::string,int> > -> toString">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" >
-        <Original>
-          Catch::toString( pr ) == "{ { \"green\", 55 } }"
-        </Original>
-        <Expanded>
-          "{ { "green", 55 } }"
-==
-"{ { "green", 55 } }"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="pair&lt;pair&lt;int,const char *,pair&lt;std::string,int> > -> toString">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" >
-        <Original>
-          Catch::toString( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }"
-        </Original>
-        <Expanded>
-          "{ { 42, "Arthur" }, { "Ford", 24 } }"
-==
-"{ { 42, "Arthur" }, { "Ford", 24 } }"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="vector&lt;int> -> toString">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
-        <Original>
-          Catch::toString(vv) == "{  }"
-        </Original>
-        <Expanded>
-          "{  }" == "{  }"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
-        <Original>
-          Catch::toString(vv) == "{ 42 }"
-        </Original>
-        <Expanded>
-          "{ 42 }" == "{ 42 }"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
-        <Original>
-          Catch::toString(vv) == "{ 42, 250 }"
-        </Original>
-        <Expanded>
-          "{ 42, 250 }" == "{ 42, 250 }"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="vector&lt;string> -> toString">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
-        <Original>
-          Catch::toString(vv) == "{  }"
-        </Original>
-        <Expanded>
-          "{  }" == "{  }"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
-        <Original>
-          Catch::toString(vv) == "{ \"hello\" }"
-        </Original>
-        <Expanded>
-          "{ "hello" }" == "{ "hello" }"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
-        <Original>
-          Catch::toString(vv) == "{ \"hello\", \"world\" }"
-        </Original>
-        <Expanded>
-          "{ "hello", "world" }"
-==
-"{ "hello", "world" }"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="vector&lt;int,allocator> -> toString">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
-        <Original>
-          Catch::toString(vv) == "{  }"
-        </Original>
-        <Expanded>
-          "{  }" == "{  }"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
-        <Original>
-          Catch::toString(vv) == "{ 42 }"
-        </Original>
-        <Expanded>
-          "{ 42 }" == "{ 42 }"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
-        <Original>
-          Catch::toString(vv) == "{ 42, 250 }"
-        </Original>
-        <Expanded>
-          "{ 42, 250 }" == "{ 42, 250 }"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="vec&lt;vec&lt;string,alloc>> -> toString">
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
-        <Original>
-          Catch::toString(v) == "{  }"
-        </Original>
-        <Expanded>
-          "{  }" == "{  }"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
-        <Original>
-          Catch::toString(v) == "{ { \"hello\" }, { \"world\" } }"
-        </Original>
-        <Expanded>
-          "{ { "hello" }, { "world" } }"
-==
-"{ { "hello" }, { "world" } }"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
+      <OverallResult success="false"/>
     </TestCase>
     <TestCase name="Parse test names and tags">
       <Section name="Empty test spec should have no filters">
@@ -9227,185 +5695,808 @@
       </Section>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="tuple&lt;>">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+    <TestCase name="Parsing a std::pair">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
-          "{ }" == Catch::toString(type{})
+          (std::pair&lt;int, int>( 1, 2 )) == aNicePair
         </Original>
         <Expanded>
-          "{ }" == "{ }"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
-        <Original>
-          "{ }" == Catch::toString(value)
-        </Original>
-        <Expanded>
-          "{ }" == "{ }"
+          std::pair( 1, 2 ) == std::pair( 1, 2 )
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="tuple&lt;int>">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+    <TestCase name="Pointers can be compared to null">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
-          "{ 0 }" == Catch::toString(type{0})
+          p == nullptr
         </Original>
         <Expanded>
-          "{ 0 }" == "{ 0 }"
+          NULL == nullptr
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          p == pNULL
+        </Original>
+        <Expanded>
+          NULL == NULL
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          p != nullptr
+        </Original>
+        <Expanded>
+          0x<hex digits> != nullptr
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          cp != nullptr
+        </Original>
+        <Expanded>
+          0x<hex digits> != nullptr
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          cpc != nullptr
+        </Original>
+        <Expanded>
+          0x<hex digits> != nullptr
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          returnsNull() == nullptr
+        </Original>
+        <Expanded>
+          {null string} == nullptr
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          returnsConstNull() == nullptr
+        </Original>
+        <Expanded>
+          {null string} == nullptr
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          nullptr != p
+        </Original>
+        <Expanded>
+          nullptr != 0x<hex digits>
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="tuple&lt;float,int>">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
-        <Original>
-          "1.2f" == Catch::toString(float(1.2))
-        </Original>
-        <Expanded>
-          "1.2f" == "1.2f"
-        </Expanded>
-      </Expression>
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
-        <Original>
-          "{ 1.2f, 0 }" == Catch::toString(type{1.2,0})
-        </Original>
-        <Expanded>
-          "{ 1.2f, 0 }" == "{ 1.2f, 0 }"
-        </Expanded>
-      </Expression>
+    <TestCase name="Pointers can be converted to strings">
+      <Warning>
+        actual address of p: 0x<hex digits>
+      </Warning>
+      <Warning>
+        toString(p): 0x<hex digits>
+      </Warning>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="tuple&lt;string,string>">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
-        <Original>
-          "{ \"hello\", \"world\" }" == Catch::toString(type{"hello","world"})
-        </Original>
-        <Expanded>
-          "{ "hello", "world" }"
-==
-"{ "hello", "world" }"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="tuple&lt;tuple&lt;int>,tuple&lt;>,float>">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
-        <Original>
-          "{ { 42 }, { }, 1.2f }" == Catch::toString(value)
-        </Original>
-        <Expanded>
-          "{ { 42 }, { }, 1.2f }"
-==
-"{ { 42 }, { }, 1.2f }"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="tuple&lt;nullptr,int,const char *>">
-      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
-        <Original>
-          "{ nullptr, 42, \"Catch me\" }" == Catch::toString(value)
-        </Original>
-        <Expanded>
-          "{ nullptr, 42, "Catch me" }"
-==
-"{ nullptr, 42, "Catch me" }"
-        </Expanded>
-      </Expression>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Tag alias can be registered against tag patterns">
-      <Section name="The same tag alias can only be registered once">
-        <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TagAliasTests.cpp" >
+    <TestCase name="Process can be configured on command line">
+      <Section name="default - no arguments">
+        <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
           <Original>
-            what, Contains( "[@zzz]" )
+            parseIntoConfig( argv, config )
           </Original>
           <Expanded>
-            "error: tag alias, "[@zzz]" already registered.
-	First seen at file:2
-	Redefined at file:10" contains: "[@zzz]"
+            parseIntoConfig( argv, config )
           </Expanded>
         </Expression>
-        <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TagAliasTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
           <Original>
-            what, Contains( "file" )
+            config.shouldDebugBreak == false
           </Original>
           <Expanded>
-            "error: tag alias, "[@zzz]" already registered.
-	First seen at file:2
-	Redefined at file:10" contains: "file"
+            false == false
           </Expanded>
         </Expression>
-        <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TagAliasTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
           <Original>
-            what, Contains( "2" )
+            config.abortAfter == -1
           </Original>
           <Expanded>
-            "error: tag alias, "[@zzz]" already registered.
-	First seen at file:2
-	Redefined at file:10" contains: "2"
+            -1 == -1
           </Expanded>
         </Expression>
-        <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TagAliasTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
           <Original>
-            what, Contains( "10" )
+            config.noThrow == false
           </Original>
           <Expanded>
-            "error: tag alias, "[@zzz]" already registered.
-	First seen at file:2
-	Redefined at file:10" contains: "10"
+            false == false
           </Expanded>
         </Expression>
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            config.reporterNames.empty()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <OverallResults successes="5" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="test lists">
+        <Section name="1 test" description="Specify one test case using">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              cfg.testSpec().matches( fakeTestCase( "notIncluded" ) ) == false
+            </Original>
+            <Expanded>
+              false == false
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              cfg.testSpec().matches( fakeTestCase( "test1" ) )
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <OverallResults successes="3" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="3" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="test lists">
+        <Section name="Specify one test case exclusion using exclude:">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false
+            </Original>
+            <Expanded>
+              false == false
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) )
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <OverallResults successes="3" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="3" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="test lists">
+        <Section name="Specify one test case exclusion using ~">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false
+            </Original>
+            <Expanded>
+              false == false
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) )
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <OverallResults successes="3" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="3" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="reporter">
+        <Section name="-r/console">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.reporterNames[0] == "console"
+            </Original>
+            <Expanded>
+              "console" == "console"
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="reporter">
+        <Section name="-r/xml">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.reporterNames[0] == "xml"
+            </Original>
+            <Expanded>
+              "xml" == "xml"
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="reporter">
+        <Section name="-r xml and junit">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.reporterNames.size() == 2
+            </Original>
+            <Expanded>
+              2 == 2
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.reporterNames[0] == "xml"
+            </Original>
+            <Expanded>
+              "xml" == "xml"
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.reporterNames[1] == "junit"
+            </Original>
+            <Expanded>
+              "junit" == "junit"
+            </Expanded>
+          </Expression>
+          <OverallResults successes="4" failures="0" expectedFailures="0"/>
+        </Section>
         <OverallResults successes="4" failures="0" expectedFailures="0"/>
       </Section>
-      <Section name="Tag aliases must be of the form [@name]">
-        <Expression success="true" type="CHECK_THROWS" filename="projects/SelfTest/TagAliasTests.cpp" >
-          <Original>
-            registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) )
-          </Original>
-          <Expanded>
-            registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) )
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="CHECK_THROWS" filename="projects/SelfTest/TagAliasTests.cpp" >
-          <Original>
-            registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) )
-          </Original>
-          <Expanded>
-            registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) )
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="CHECK_THROWS" filename="projects/SelfTest/TagAliasTests.cpp" >
-          <Original>
-            registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) )
-          </Original>
-          <Expanded>
-            registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) )
-          </Expanded>
-        </Expression>
-        <Expression success="true" type="CHECK_THROWS" filename="projects/SelfTest/TagAliasTests.cpp" >
-          <Original>
-            registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) )
-          </Original>
-          <Expanded>
-            registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) )
-          </Expanded>
-        </Expression>
-        <OverallResults successes="4" failures="0" expectedFailures="0"/>
+      <Section name="reporter">
+        <Section name="--reporter/junit">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.reporterNames[0] == "junit"
+            </Original>
+            <Expanded>
+              "junit" == "junit"
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
       </Section>
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Anonymous test case 1">
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Test case with one argument">
-      <OverallResult success="true"/>
-    </TestCase>
-    <TestCase name="Variadic macros">
-      <Section name="Section with one argument">
+      <Section name="debugger">
+        <Section name="-b">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.shouldDebugBreak == true
+            </Original>
+            <Expanded>
+              true == true
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="debugger">
+        <Section name="--break">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.shouldDebugBreak
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="abort">
+        <Section name="-a aborts after first failure">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.abortAfter == 1
+            </Original>
+            <Expanded>
+              1 == 1
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="abort">
+        <Section name="-x 2 aborts after two failures">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.abortAfter == 2
+            </Original>
+            <Expanded>
+              2 == 2
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="abort">
+        <Section name="-x must be greater than zero">
+          <Expression success="true" type="REQUIRE_THAT" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfigAndReturnError( argv, config ), Contains( "greater than zero" )
+            </Original>
+            <Expanded>
+              "Value after -x or --abortAfter must be greater than zero
+- while parsing: (-x, --abortx &lt;no. failures>)" contains: "greater than zero"
+            </Expanded>
+          </Expression>
+          <OverallResults successes="1" failures="0" expectedFailures="0"/>
+        </Section>
         <OverallResults successes="1" failures="0" expectedFailures="0"/>
       </Section>
+      <Section name="abort">
+        <Section name="-x must be numeric">
+          <Expression success="true" type="REQUIRE_THAT" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfigAndReturnError( argv, config ), Contains( "-x" )
+            </Original>
+            <Expanded>
+              "Unable to convert oops to destination type
+- while parsing: (-x, --abortx &lt;no. failures>)" contains: "-x"
+            </Expanded>
+          </Expression>
+          <OverallResults successes="1" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="nothrow">
+        <Section name="-e">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.noThrow == true
+            </Original>
+            <Expanded>
+              true == true
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="nothrow">
+        <Section name="--nothrow">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.noThrow == true
+            </Original>
+            <Expanded>
+              true == true
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="output filename">
+        <Section name="-o filename">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.outputFilename == "filename.ext"
+            </Original>
+            <Expanded>
+              "filename.ext" == "filename.ext"
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="output filename">
+        <Section name="--out">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.outputFilename == "filename.ext"
+            </Original>
+            <Expanded>
+              "filename.ext" == "filename.ext"
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="combinations">
+        <Section name="Single character flags can be combined">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.abortAfter == 1
+            </Original>
+            <Expanded>
+              1 == 1
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.shouldDebugBreak
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.noThrow == true
+            </Original>
+            <Expanded>
+              true == true
+            </Expanded>
+          </Expression>
+          <OverallResults successes="4" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="4" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="use-colour">
+        <Section name="without option">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.useColour == UseColour::Auto
+            </Original>
+            <Expanded>
+              0 == 0
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="use-colour">
+        <Section name="auto">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.useColour == UseColour::Auto
+            </Original>
+            <Expanded>
+              0 == 0
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="use-colour">
+        <Section name="yes">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.useColour == UseColour::Yes
+            </Original>
+            <Expanded>
+              1 == 1
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="use-colour">
+        <Section name="no">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.useColour == UseColour::No
+            </Original>
+            <Expanded>
+              2 == 2
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="use-colour">
+        <Section name="error">
+          <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config ), Contains( "colour mode must be one of" )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config ), Contains( "colour mode must be one of" )
+            </Expanded>
+          </Expression>
+          <OverallResults successes="1" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="SCOPED_INFO is reset for each loop">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+        <Original>
+          i &lt; 10
+        </Original>
+        <Expanded>
+          0 &lt; 10
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+        <Original>
+          i &lt; 10
+        </Original>
+        <Expanded>
+          1 &lt; 10
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+        <Original>
+          i &lt; 10
+        </Original>
+        <Expanded>
+          2 &lt; 10
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+        <Original>
+          i &lt; 10
+        </Original>
+        <Expanded>
+          3 &lt; 10
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+        <Original>
+          i &lt; 10
+        </Original>
+        <Expanded>
+          4 &lt; 10
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+        <Original>
+          i &lt; 10
+        </Original>
+        <Expanded>
+          5 &lt; 10
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+        <Original>
+          i &lt; 10
+        </Original>
+        <Expanded>
+          6 &lt; 10
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+        <Original>
+          i &lt; 10
+        </Original>
+        <Expanded>
+          7 &lt; 10
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+        <Original>
+          i &lt; 10
+        </Original>
+        <Expanded>
+          8 &lt; 10
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+        <Original>
+          i &lt; 10
+        </Original>
+        <Expanded>
+          9 &lt; 10
+        </Expanded>
+      </Expression>
+      <Info>
+        current counter 10
+      </Info>
+      <Info>
+        i := 10
+      </Info>
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+        <Original>
+          i &lt; 10
+        </Original>
+        <Expanded>
+          10 &lt; 10
+        </Expanded>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="SUCCEED counts as a test pass">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="SUCCESS does not require an argument">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods">
+      <Section name="Given: No operations precede me">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
+          <Original>
+            before == 0
+          </Original>
+          <Expanded>
+            0 == 0
+          </Expanded>
+        </Expression>
+        <Section name="When: We get the count">
+          <Section name="Then: Subsequently values are higher">
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
+              <Original>
+                after > before
+              </Original>
+              <Expanded>
+                1 > 0
+              </Expanded>
+            </Expression>
+            <OverallResults successes="1" failures="0" expectedFailures="0"/>
+          </Section>
+          <OverallResults successes="1" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Scenario: Do that thing with the thing">
@@ -9439,6 +6530,18 @@
       </Section>
       <OverallResult success="true"/>
     </TestCase>
+    <TestCase name="Scenario: This is a really long scenario name to see how the list command deals with wrapping">
+      <Section name="Given: A section name that is so long that it cannot fit in a single console width">
+        <Section name="When: The test headers are printed as part of the normal running of the scenario">
+          <Section name="Then: The, deliberately very long and overly verbose (you see what I did there?) section names must wrap, along with an indent">
+            <OverallResults successes="1" failures="0" expectedFailures="0"/>
+          </Section>
+          <OverallResults successes="1" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <OverallResult success="true"/>
+    </TestCase>
     <TestCase name="Scenario: Vector resizing affects size and capacity">
       <Section name="Given: an empty vector">
         <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
@@ -9530,44 +6633,2941 @@
       </Section>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="Scenario: This is a really long scenario name to see how the list command deals with wrapping">
-      <Section name="Given: A section name that is so long that it cannot fit in a single console width">
-        <Section name="When: The test headers are printed as part of the normal running of the scenario">
-          <Section name="Then: The, deliberately very long and overly verbose (you see what I did there?) section names must wrap, along with an indent">
-            <OverallResults successes="1" failures="0" expectedFailures="0"/>
-          </Section>
-          <OverallResults successes="1" failures="0" expectedFailures="0"/>
-        </Section>
-        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+    <TestCase name="Sends stuff to stdout and stderr">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Some simple comparisons between doubles">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+        <Original>
+          d == Approx( 1.23 )
+        </Original>
+        <Expanded>
+          1.23 == Approx( 1.23 )
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+        <Original>
+          d != Approx( 1.22 )
+        </Original>
+        <Expanded>
+          1.23 != Approx( 1.22 )
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+        <Original>
+          d != Approx( 1.24 )
+        </Original>
+        <Expanded>
+          1.23 != Approx( 1.24 )
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+        <Original>
+          Approx( d ) == 1.23
+        </Original>
+        <Expanded>
+          Approx( 1.23 ) == 1.23
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+        <Original>
+          Approx( d ) != 1.22
+        </Original>
+        <Expanded>
+          Approx( 1.23 ) != 1.22
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+        <Original>
+          Approx( d ) != 1.24
+        </Original>
+        <Expanded>
+          Approx( 1.23 ) != 1.24
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Standard output from all sections is reported">
+      <Section name="one">
+        <OverallResults successes="0" failures="1" expectedFailures="0"/>
+      </Section>
+      <Section name="two">
+        <OverallResults successes="0" failures="1" expectedFailures="0"/>
+      </Section>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="StartsWith string matcher">
+      <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testStringForMatching(), StartsWith( "string" )
+        </Original>
+        <Expanded>
+          "this string contains 'abc' as a substring" starts with: "string"
+        </Expanded>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="String matchers">
+      <Expression success="true" type="REQUIRE_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testStringForMatching(), Contains( "string" )
+        </Original>
+        <Expanded>
+          "this string contains 'abc' as a substring" contains: "string"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testStringForMatching(), Contains( "abc" )
+        </Original>
+        <Expanded>
+          "this string contains 'abc' as a substring" contains: "abc"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testStringForMatching(), StartsWith( "this" )
+        </Original>
+        <Expanded>
+          "this string contains 'abc' as a substring" starts with: "this"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testStringForMatching(), EndsWith( "substring" )
+        </Original>
+        <Expanded>
+          "this string contains 'abc' as a substring" ends with: "substring"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Strings can be rendered with colour">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Tabs and newlines show in output">
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          s1 == s2
+        </Original>
+        <Expanded>
+          "if ($b == 10) {
+		$a	= 20;
+}"
+==
+"if ($b == 10) {
+	$a = 20;
+}
+"
+        </Expanded>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="Tag alias can be registered against tag patterns">
+      <Section name="The same tag alias can only be registered once">
+        <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TagAliasTests.cpp" >
+          <Original>
+            what, Contains( "[@zzz]" )
+          </Original>
+          <Expanded>
+            "error: tag alias, "[@zzz]" already registered.
+	First seen at file:2
+	Redefined at file:10" contains: "[@zzz]"
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TagAliasTests.cpp" >
+          <Original>
+            what, Contains( "file" )
+          </Original>
+          <Expanded>
+            "error: tag alias, "[@zzz]" already registered.
+	First seen at file:2
+	Redefined at file:10" contains: "file"
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TagAliasTests.cpp" >
+          <Original>
+            what, Contains( "2" )
+          </Original>
+          <Expanded>
+            "error: tag alias, "[@zzz]" already registered.
+	First seen at file:2
+	Redefined at file:10" contains: "2"
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TagAliasTests.cpp" >
+          <Original>
+            what, Contains( "10" )
+          </Original>
+          <Expanded>
+            "error: tag alias, "[@zzz]" already registered.
+	First seen at file:2
+	Redefined at file:10" contains: "10"
+          </Expanded>
+        </Expression>
+        <OverallResults successes="4" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="Tag aliases must be of the form [@name]">
+        <Expression success="true" type="CHECK_THROWS" filename="projects/SelfTest/TagAliasTests.cpp" >
+          <Original>
+            registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) )
+          </Original>
+          <Expanded>
+            registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) )
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK_THROWS" filename="projects/SelfTest/TagAliasTests.cpp" >
+          <Original>
+            registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) )
+          </Original>
+          <Expanded>
+            registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) )
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK_THROWS" filename="projects/SelfTest/TagAliasTests.cpp" >
+          <Original>
+            registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) )
+          </Original>
+          <Expanded>
+            registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) )
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK_THROWS" filename="projects/SelfTest/TagAliasTests.cpp" >
+          <Original>
+            registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) )
+          </Original>
+          <Expanded>
+            registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) )
+          </Expanded>
+        </Expression>
+        <OverallResults successes="4" failures="0" expectedFailures="0"/>
       </Section>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods">
-      <Section name="Given: No operations precede me">
-        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
+    <TestCase name="Test case with one argument">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Test enum bit values">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+        <Original>
+          0x<hex digits> == bit30and31
+        </Original>
+        <Expanded>
+          3221225472 (0x<hex digits>) == 3221225472
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Text can be formatted using the Text class">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+        <Original>
+          Text( "hi there" ).toString() == "hi there"
+        </Original>
+        <Expanded>
+          "hi there" == "hi there"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+        <Original>
+          Text( "hi there", narrow ).toString() == "hi\nthere"
+        </Original>
+        <Expanded>
+          "hi
+there"
+==
+"hi
+there"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="The NO_FAIL macro reports a failure but does not fail the test">
+      <Expression success="false" type="CHECK_NOFAIL" filename="projects/SelfTest/MessageTests.cpp" >
+        <Original>
+          1 == 2
+        </Original>
+        <Expanded>
+          1 == 2
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="This test 'should' fail but doesn't">
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="Tracker">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          testCase.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          s1.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Section name="successfully close one section">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
           <Original>
-            before == 0
+            s1.isSuccessfullyCompleted()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            testCase.isComplete() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            ctx.completedCycle()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            testCase.isSuccessfullyCompleted()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <OverallResults successes="4" failures="0" expectedFailures="0"/>
+      </Section>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          testCase.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          s1.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Section name="fail one section">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            s1.isComplete()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            s1.isSuccessfullyCompleted() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            testCase.isComplete() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            ctx.completedCycle()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            testCase.isSuccessfullyCompleted() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Section name="re-enter after failed section">
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              testCase2.isOpen()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              s1b.isOpen() == false
+            </Original>
+            <Expanded>
+              false == false
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              ctx.completedCycle()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              testCase.isComplete()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              testCase.isSuccessfullyCompleted()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <OverallResults successes="5" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="10" failures="0" expectedFailures="0"/>
+      </Section>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          testCase.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          s1.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Section name="fail one section">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            s1.isComplete()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            s1.isSuccessfullyCompleted() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            testCase.isComplete() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            ctx.completedCycle()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            testCase.isSuccessfullyCompleted() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Section name="re-enter after failed section and find next section">
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              testCase2.isOpen()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              s1b.isOpen() == false
+            </Original>
+            <Expanded>
+              false == false
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              s2.isOpen()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              ctx.completedCycle()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              testCase.isComplete()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              testCase.isSuccessfullyCompleted()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <OverallResults successes="6" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="11" failures="0" expectedFailures="0"/>
+      </Section>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          testCase.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          s1.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Section name="successfully close one section, then find another">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            s2.isOpen() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            testCase.isComplete() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Section name="Re-enter - skips S1 and enters S2">
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              testCase2.isOpen()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              s1b.isOpen() == false
+            </Original>
+            <Expanded>
+              false == false
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              s2b.isOpen()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              ctx.completedCycle() == false
+            </Original>
+            <Expanded>
+              false == false
+            </Expanded>
+          </Expression>
+          <Section name="Successfully close S2">
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                ctx.completedCycle()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s2b.isSuccessfullyCompleted()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                testCase2.isComplete() == false
+              </Original>
+              <Expanded>
+                false == false
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                testCase2.isSuccessfullyCompleted()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <OverallResults successes="4" failures="0" expectedFailures="0"/>
+          </Section>
+          <OverallResults successes="8" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="10" failures="0" expectedFailures="0"/>
+      </Section>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          testCase.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          s1.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Section name="successfully close one section, then find another">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            s2.isOpen() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            testCase.isComplete() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Section name="Re-enter - skips S1 and enters S2">
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              testCase2.isOpen()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              s1b.isOpen() == false
+            </Original>
+            <Expanded>
+              false == false
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              s2b.isOpen()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              ctx.completedCycle() == false
+            </Original>
+            <Expanded>
+              false == false
+            </Expanded>
+          </Expression>
+          <Section name="fail S2">
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                ctx.completedCycle()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s2b.isComplete()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s2b.isSuccessfullyCompleted() == false
+              </Original>
+              <Expanded>
+                false == false
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                testCase2.isSuccessfullyCompleted() == false
+              </Original>
+              <Expanded>
+                false == false
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                testCase3.isOpen()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s1c.isOpen() == false
+              </Original>
+              <Expanded>
+                false == false
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s2c.isOpen() == false
+              </Original>
+              <Expanded>
+                false == false
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                testCase3.isSuccessfullyCompleted()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <OverallResults successes="8" failures="0" expectedFailures="0"/>
+          </Section>
+          <OverallResults successes="12" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="14" failures="0" expectedFailures="0"/>
+      </Section>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          testCase.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          s1.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Section name="open a nested section">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            s2.isOpen()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            s2.isComplete()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            s1.isComplete() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            s1.isComplete()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            testCase.isComplete() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            testCase.isComplete()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <OverallResults successes="6" failures="0" expectedFailures="0"/>
+      </Section>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          testCase.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          s1.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Section name="start a generator">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            g1.isOpen()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            g1.index() == 0
           </Original>
           <Expanded>
             0 == 0
           </Expanded>
         </Expression>
-        <Section name="When: We get the count">
-          <Section name="Then: Subsequently values are higher">
-            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            g1.isComplete() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            s1.isComplete() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Section name="close outer section">
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              s1.isComplete() == false
+            </Original>
+            <Expanded>
+              false == false
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              testCase.isSuccessfullyCompleted() == false
+            </Original>
+            <Expanded>
+              false == false
+            </Expanded>
+          </Expression>
+          <Section name="Re-enter for second generation">
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
               <Original>
-                after > before
+                testCase2.isOpen()
               </Original>
               <Expanded>
-                1 > 0
+                true
               </Expanded>
             </Expression>
-            <OverallResults successes="1" failures="0" expectedFailures="0"/>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s1b.isOpen()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                g1b.isOpen()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                g1b.index() == 1
+              </Original>
+              <Expanded>
+                1 == 1
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s1.isComplete() == false
+              </Original>
+              <Expanded>
+                false == false
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s1b.isComplete()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                g1b.isComplete()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                testCase2.isComplete()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <OverallResults successes="8" failures="0" expectedFailures="0"/>
           </Section>
+          <OverallResults successes="10" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="14" failures="0" expectedFailures="0"/>
+      </Section>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          testCase.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          s1.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Section name="start a generator">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            g1.isOpen()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            g1.index() == 0
+          </Original>
+          <Expanded>
+            0 == 0
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            g1.isComplete() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            s1.isComplete() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Section name="Start a new inner section">
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              s2.isOpen()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              s2.isComplete()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              s1.isComplete() == false
+            </Original>
+            <Expanded>
+              false == false
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              testCase.isComplete() == false
+            </Original>
+            <Expanded>
+              false == false
+            </Expanded>
+          </Expression>
+          <Section name="Re-enter for second generation">
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                testCase2.isOpen()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s1b.isOpen()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                g1b.isOpen()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                g1b.index() == 1
+              </Original>
+              <Expanded>
+                1 == 1
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s2b.isOpen()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s2b.isComplete()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                g1b.isComplete()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s1b.isComplete()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                testCase2.isComplete()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <OverallResults successes="9" failures="0" expectedFailures="0"/>
+          </Section>
+          <OverallResults successes="13" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="17" failures="0" expectedFailures="0"/>
+      </Section>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          testCase.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+        <Original>
+          s1.isOpen()
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Section name="start a generator">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            g1.isOpen()
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            g1.index() == 0
+          </Original>
+          <Expanded>
+            0 == 0
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            g1.isComplete() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+          <Original>
+            s1.isComplete() == false
+          </Original>
+          <Expanded>
+            false == false
+          </Expanded>
+        </Expression>
+        <Section name="Fail an inner section">
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              s2.isOpen()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              s2.isComplete()
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              s2.isSuccessfullyCompleted() == false
+            </Original>
+            <Expanded>
+              false == false
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              s1.isComplete() == false
+            </Original>
+            <Expanded>
+              false == false
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+            <Original>
+              testCase.isComplete() == false
+            </Original>
+            <Expanded>
+              false == false
+            </Expanded>
+          </Expression>
+          <Section name="Re-enter for second generation">
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                testCase2.isOpen()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s1b.isOpen()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                g1b.isOpen()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                g1b.index() == 0
+              </Original>
+              <Expanded>
+                0 == 0
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s2b.isOpen() == false
+              </Original>
+              <Expanded>
+                false == false
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                g1b.isComplete() == false
+              </Original>
+              <Expanded>
+                false == false
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s1b.isComplete() == false
+              </Original>
+              <Expanded>
+                false == false
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                testCase2.isComplete() == false
+              </Original>
+              <Expanded>
+                false == false
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                testCase3.isOpen()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s1c.isOpen()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                g1c.isOpen()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                g1c.index() == 1
+              </Original>
+              <Expanded>
+                1 == 1
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s2c.isOpen()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s2c.isComplete()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                g1c.isComplete()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                s1c.isComplete()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+              <Original>
+                testCase3.isComplete()
+              </Original>
+              <Expanded>
+                true
+              </Expanded>
+            </Expression>
+            <OverallResults successes="17" failures="0" expectedFailures="0"/>
+          </Section>
+          <OverallResults successes="22" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="26" failures="0" expectedFailures="0"/>
+      </Section>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Unexpected exceptions can be translated">
+      <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
+        3.14
+      </Exception>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="Use a custom approx">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+        <Original>
+          d == approx( 1.23 )
+        </Original>
+        <Expanded>
+          1.23 == Approx( 1.23 )
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+        <Original>
+          d == approx( 1.22 )
+        </Original>
+        <Expanded>
+          1.23 == Approx( 1.22 )
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+        <Original>
+          d == approx( 1.24 )
+        </Original>
+        <Expanded>
+          1.23 == Approx( 1.24 )
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+        <Original>
+          d != approx( 1.25 )
+        </Original>
+        <Expanded>
+          1.23 != Approx( 1.25 )
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+        <Original>
+          approx( d ) == 1.23
+        </Original>
+        <Expanded>
+          Approx( 1.23 ) == 1.23
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+        <Original>
+          approx( d ) == 1.22
+        </Original>
+        <Expanded>
+          Approx( 1.23 ) == 1.22
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+        <Original>
+          approx( d ) == 1.24
+        </Original>
+        <Expanded>
+          Approx( 1.23 ) == 1.24
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+        <Original>
+          approx( d ) != 1.25
+        </Original>
+        <Expanded>
+          Approx( 1.23 ) != 1.25
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Variadic macros">
+      <Section name="Section with one argument">
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="When checked exceptions are thrown they can be expected or unexpected">
+      <Expression success="true" type="REQUIRE_THROWS_AS" filename="projects/SelfTest/ExceptionTests.cpp" >
+        <Original>
+          thisThrows()
+        </Original>
+        <Expanded>
+          thisThrows()
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE_NOTHROW" filename="projects/SelfTest/ExceptionTests.cpp" >
+        <Original>
+          thisDoesntThrow()
+        </Original>
+        <Expanded>
+          thisDoesntThrow()
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE_THROWS" filename="projects/SelfTest/ExceptionTests.cpp" >
+        <Original>
+          thisThrows()
+        </Original>
+        <Expanded>
+          thisThrows()
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="When unchecked exceptions are thrown directly they are always failures">
+      <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
+        unexpected exception
+      </Exception>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="When unchecked exceptions are thrown during a CHECK the test should abort and fail">
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ExceptionTests.cpp" >
+        <Original>
+          thisThrows() == 0
+        </Original>
+        <Expanded>
+          thisThrows() == 0
+        </Expanded>
+        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
+          expected exception
+        </Exception>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="When unchecked exceptions are thrown during a REQUIRE the test should abort fail">
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/ExceptionTests.cpp" >
+        <Original>
+          thisThrows() == 0
+        </Original>
+        <Expanded>
+          thisThrows() == 0
+        </Expanded>
+        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
+          expected exception
+        </Exception>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="When unchecked exceptions are thrown from functions they are always failures">
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ExceptionTests.cpp" >
+        <Original>
+          thisThrows() == 0
+        </Original>
+        <Expanded>
+          thisThrows() == 0
+        </Expanded>
+        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
+          expected exception
+        </Exception>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="When unchecked exceptions are thrown from sections they are always failures">
+      <Section name="section name">
+        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
+          unexpected exception
+        </Exception>
+        <OverallResults successes="0" failures="1" expectedFailures="0"/>
+      </Section>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="When unchecked exceptions are thrown, but caught, they do not affect the test">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Where the LHS is not a simple value">
+      <Warning>
+        Uncomment the code in this test to check that it gives a sensible compiler error
+      </Warning>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="Where there is more to the expression after the RHS">
+      <Warning>
+        Uncomment the code in this test to check that it gives a sensible compiler error
+      </Warning>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="X/level/0/a">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="X/level/0/b">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="X/level/1/a">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="X/level/1/b">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="XmlEncode">
+      <Section name="normal string">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            encode( "normal string" ) == "normal string"
+          </Original>
+          <Expanded>
+            "normal string" == "normal string"
+          </Expanded>
+        </Expression>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="empty string">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            encode( "" ) == ""
+          </Original>
+          <Expanded>
+            "" == ""
+          </Expanded>
+        </Expression>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="string with ampersand">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            encode( "smith &amp; jones" ) == "smith &amp;amp; jones"
+          </Original>
+          <Expanded>
+            "smith &amp;amp; jones" == "smith &amp;amp; jones"
+          </Expanded>
+        </Expression>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="string with less-than">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            encode( "smith &lt; jones" ) == "smith &amp;lt; jones"
+          </Original>
+          <Expanded>
+            "smith &amp;lt; jones" == "smith &amp;lt; jones"
+          </Expanded>
+        </Expression>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="string with greater-than">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            encode( "smith > jones" ) == "smith > jones"
+          </Original>
+          <Expanded>
+            "smith > jones" == "smith > jones"
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            encode( "smith ]]&gt; jones" ) == "smith ]]&amp;gt; jones"
+          </Original>
+          <Expanded>
+            "smith ]]&amp;gt; jones"
+==
+"smith ]]&amp;gt; jones"
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="string with quotes">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            encode( stringWithQuotes ) == stringWithQuotes
+          </Original>
+          <Expanded>
+            "don't "quote" me on that"
+==
+"don't "quote" me on that"
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            encode( stringWithQuotes, Catch::XmlEncode::ForAttributes ) == "don't &amp;quot;quote&amp;quot; me on that"
+          </Original>
+          <Expanded>
+            "don't &amp;quot;quote&amp;quot; me on that"
+==
+"don't &amp;quot;quote&amp;quot; me on that"
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="string with control char (1)">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            encode( "[\x01]" ) == "[&amp;#x01;]"
+          </Original>
+          <Expanded>
+            "[&amp;#x01;]" == "[&amp;#x01;]"
+          </Expanded>
+        </Expression>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="string with control char (x7F)">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            encode( "[\x7F]" ) == "[&amp;#x7F;]"
+          </Original>
+          <Expanded>
+            "[&amp;#x7F;]" == "[&amp;#x7F;]"
+          </Expanded>
+        </Expression>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="atomic if">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          x == 0
+        </Original>
+        <Expanded>
+          0 == 0
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="boolean member">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+        <Original>
+          obj.prop != nullptr
+        </Original>
+        <Expanded>
+          0x<hex digits> != nullptr
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="checkedElse">
+      <Expression success="true" type="CHECKED_ELSE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          flag
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testCheckedElse( true )
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="checkedElse, failing">
+      <Expression success="false" type="CHECKED_ELSE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          flag
+        </Original>
+        <Expanded>
+          false
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testCheckedElse( false )
+        </Original>
+        <Expanded>
+          false
+        </Expanded>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="checkedIf">
+      <Expression success="true" type="CHECKED_IF" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          flag
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testCheckedIf( true )
+        </Original>
+        <Expanded>
+          true
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="checkedIf, failing">
+      <Expression success="false" type="CHECKED_IF" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          flag
+        </Original>
+        <Expanded>
+          false
+        </Expanded>
+      </Expression>
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          testCheckedIf( false )
+        </Original>
+        <Expanded>
+          false
+        </Expanded>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="comparisons between const int variables">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          unsigned_char_var == 1
+        </Original>
+        <Expanded>
+          1 == 1
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          unsigned_short_var == 1
+        </Original>
+        <Expanded>
+          1 == 1
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          unsigned_int_var == 1
+        </Original>
+        <Expanded>
+          1 == 1
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          unsigned_long_var == 1
+        </Original>
+        <Expanded>
+          1 == 1
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="comparisons between int variables">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          long_var == unsigned_char_var
+        </Original>
+        <Expanded>
+          1 == 1
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          long_var == unsigned_short_var
+        </Original>
+        <Expanded>
+          1 == 1
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          long_var == unsigned_int_var
+        </Original>
+        <Expanded>
+          1 == 1
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+        <Original>
+          long_var == unsigned_long_var
+        </Original>
+        <Expanded>
+          1 == 1
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="even more nested SECTION tests">
+      <Section name="c">
+        <Section name="d (leaf)">
           <OverallResults successes="1" failures="0" expectedFailures="0"/>
         </Section>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="c">
+        <Section name="e (leaf)">
+          <OverallResults successes="1" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="f (leaf)">
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="first tag">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="just failure">
+      <Failure>
+        Previous info should not be seen
+      </Failure>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="just info">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="long long">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          l == std::numeric_limits&lt;long long>::max()
+        </Original>
+        <Expanded>
+          9223372036854775807 (0x<hex digits>)
+==
+9223372036854775807 (0x<hex digits>)
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="looped SECTION tests">
+      <Section name="s1" description="b is currently: 0">
+        <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            b > a
+          </Original>
+          <Expanded>
+            0 > 1
+          </Expanded>
+        </Expression>
+        <OverallResults successes="0" failures="1" expectedFailures="0"/>
+      </Section>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="looped tests">
+      <Info>
+        Testing if fib[0] (1) is even
+      </Info>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          ( fib[i] % 2 ) == 0
+        </Original>
+        <Expanded>
+          1 == 0
+        </Expanded>
+      </Expression>
+      <Info>
+        Testing if fib[1] (1) is even
+      </Info>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          ( fib[i] % 2 ) == 0
+        </Original>
+        <Expanded>
+          1 == 0
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          ( fib[i] % 2 ) == 0
+        </Original>
+        <Expanded>
+          0 == 0
+        </Expanded>
+      </Expression>
+      <Info>
+        Testing if fib[3] (3) is even
+      </Info>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          ( fib[i] % 2 ) == 0
+        </Original>
+        <Expanded>
+          1 == 0
+        </Expanded>
+      </Expression>
+      <Info>
+        Testing if fib[4] (5) is even
+      </Info>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          ( fib[i] % 2 ) == 0
+        </Original>
+        <Expanded>
+          1 == 0
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          ( fib[i] % 2 ) == 0
+        </Original>
+        <Expanded>
+          0 == 0
+        </Expanded>
+      </Expression>
+      <Info>
+        Testing if fib[6] (13) is even
+      </Info>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          ( fib[i] % 2 ) == 0
+        </Original>
+        <Expanded>
+          1 == 0
+        </Expanded>
+      </Expression>
+      <Info>
+        Testing if fib[7] (21) is even
+      </Info>
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          ( fib[i] % 2 ) == 0
+        </Original>
+        <Expanded>
+          1 == 0
+        </Expanded>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="more nested SECTION tests">
+      <Section name="s1" description="doesn't equal">
+        <Section name="s2" description="equal">
+          <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+            <Original>
+              a == b
+            </Original>
+            <Expanded>
+              1 == 2
+            </Expanded>
+          </Expression>
+          <OverallResults successes="0" failures="1" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="0" failures="1" expectedFailures="0"/>
+      </Section>
+      <Section name="s1" description="doesn't equal">
+        <Section name="s3" description="not equal">
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+            <Original>
+              a != b
+            </Original>
+            <Expanded>
+              1 != 2
+            </Expanded>
+          </Expression>
+          <OverallResults successes="1" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="s1" description="doesn't equal">
+        <Section name="s4" description="less than">
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+            <Original>
+              a &lt; b
+            </Original>
+            <Expanded>
+              1 &lt; 2
+            </Expanded>
+          </Expression>
+          <OverallResults successes="1" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="nested SECTION tests">
+      <Section name="s1" description="doesn't equal">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            a != b
+          </Original>
+          <Expanded>
+            1 != 2
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            b != a
+          </Original>
+          <Expanded>
+            2 != 1
+          </Expanded>
+        </Expression>
+        <Section name="s2" description="not equal">
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+            <Original>
+              a != b
+            </Original>
+            <Expanded>
+              1 != 2
+            </Expanded>
+          </Expression>
+          <OverallResults successes="1" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="3" failures="0" expectedFailures="0"/>
+      </Section>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="non streamable - with conv. op">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+        <Original>
+          s == "7"
+        </Original>
+        <Expanded>
+          "7" == "7"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="not allowed">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="null strings">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          makeString( false ) != static_cast&lt;char*>(nullptr)
+        </Original>
+        <Expanded>
+          "valid string" != {null string}
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          makeString( true ) == static_cast&lt;char*>(nullptr)
+        </Original>
+        <Expanded>
+          {null string} == {null string}
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="null_ptr">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+        <Original>
+          ptr.get() == nullptr
+        </Original>
+        <Expanded>
+          NULL == nullptr
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="pair&lt;pair&lt;int,const char *,pair&lt;std::string,int> > -> toString">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" >
+        <Original>
+          Catch::toString( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }"
+        </Original>
+        <Expanded>
+          "{ { 42, "Arthur" }, { "Ford", 24 } }"
+==
+"{ { 42, "Arthur" }, { "Ford", 24 } }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="pointer to class">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+        <Original>
+          p == 0
+        </Original>
+        <Expanded>
+          NULL == 0
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="random SECTION tests">
+      <Section name="s1" description="doesn't equal">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            a != b
+          </Original>
+          <Expanded>
+            1 != 2
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            b != a
+          </Original>
+          <Expanded>
+            2 != 1
+          </Expanded>
+        </Expression>
         <OverallResults successes="2" failures="0" expectedFailures="0"/>
       </Section>
+      <Section name="s2" description="not equal">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            a != b
+          </Original>
+          <Expanded>
+            1 != 2
+          </Expanded>
+        </Expression>
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="replaceInPlace">
+      <Section name="replace single char">
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            replaceInPlace( letters, "b", "z" )
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            letters == "azcdefcg"
+          </Original>
+          <Expanded>
+            "azcdefcg" == "azcdefcg"
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="replace two chars">
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            replaceInPlace( letters, "c", "z" )
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            letters == "abzdefzg"
+          </Original>
+          <Expanded>
+            "abzdefzg" == "abzdefzg"
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="replace first char">
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            replaceInPlace( letters, "a", "z" )
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            letters == "zbcdefcg"
+          </Original>
+          <Expanded>
+            "zbcdefcg" == "zbcdefcg"
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="replace last char">
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            replaceInPlace( letters, "g", "z" )
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            letters == "abcdefcz"
+          </Original>
+          <Expanded>
+            "abcdefcz" == "abcdefcz"
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="replace all chars">
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            replaceInPlace( letters, letters, "replaced" )
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            letters == "replaced"
+          </Original>
+          <Expanded>
+            "replaced" == "replaced"
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="replace no chars">
+        <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            !replaceInPlace( letters, "x", "z" )
+          </Original>
+          <Expanded>
+            !false
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            letters == letters
+          </Original>
+          <Expanded>
+            "abcdefcg" == "abcdefcg"
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="escape '">
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            replaceInPlace( s, "'", "|'" )
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            s == "didn|'t"
+          </Original>
+          <Expanded>
+            "didn|'t" == "didn|'t"
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="second tag">
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="send a single char to INFO">
+      <Info>
+        3
+      </Info>
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          false
+        </Original>
+        <Expanded>
+          false
+        </Expanded>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="sends information to INFO">
+      <Info>
+        hi
+      </Info>
+      <Info>
+        i := 7
+      </Info>
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+        <Original>
+          false
+        </Original>
+        <Expanded>
+          false
+        </Expanded>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="std::pair&lt;int,const std::string> -> toString">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" >
+        <Original>
+          Catch::toString(value) == "{ 34, \"xyzzy\" }"
+        </Original>
+        <Expanded>
+          "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="std::pair&lt;int,std::string> -> toString">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" >
+        <Original>
+          Catch::toString( value ) == "{ 34, \"xyzzy\" }"
+        </Original>
+        <Expanded>
+          "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="std::vector&lt;std::pair&lt;std::string,int> > -> toString">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" >
+        <Original>
+          Catch::toString( pr ) == "{ { \"green\", 55 } }"
+        </Original>
+        <Expanded>
+          "{ { "green", 55 } }"
+==
+"{ { "green", 55 } }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="string literals of different sizes can be compared">
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+        <Original>
+          std::string( "first" ) == "second"
+        </Original>
+        <Expanded>
+          "first" == "second"
+        </Expanded>
+      </Expression>
+      <OverallResult success="false"/>
+    </TestCase>
+    <TestCase name="toString on const wchar_t const pointer returns the string contents">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          result == "\"wide load\""
+        </Original>
+        <Expanded>
+          ""wide load"" == ""wide load""
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString on const wchar_t pointer returns the string contents">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          result == "\"wide load\""
+        </Original>
+        <Expanded>
+          ""wide load"" == ""wide load""
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString on wchar_t const pointer returns the string contents">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          result == "\"wide load\""
+        </Original>
+        <Expanded>
+          ""wide load"" == ""wide load""
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString on wchar_t returns the string contents">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          result == "\"wide load\""
+        </Original>
+        <Expanded>
+          ""wide load"" == ""wide load""
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString( has_maker )">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+        <Original>
+          Catch::toString( item ) == "StringMaker&lt;has_maker>"
+        </Original>
+        <Expanded>
+          "StringMaker&lt;has_maker>"
+==
+"StringMaker&lt;has_maker>"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString( has_maker_and_toString )">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+        <Original>
+          Catch::toString( item ) == "toString( has_maker_and_toString )"
+        </Original>
+        <Expanded>
+          "toString( has_maker_and_toString )"
+==
+"toString( has_maker_and_toString )"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString( has_toString )">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+        <Original>
+          Catch::toString( item ) == "toString( has_toString )"
+        </Original>
+        <Expanded>
+          "toString( has_toString )"
+==
+"toString( has_toString )"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString( vectors&lt;has_maker )">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+        <Original>
+          Catch::toString( v ) == "{ StringMaker&lt;has_maker> }"
+        </Original>
+        <Expanded>
+          "{ StringMaker&lt;has_maker> }"
+==
+"{ StringMaker&lt;has_maker> }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString( vectors&lt;has_maker_and_toString )">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+        <Original>
+          Catch::toString( v ) == "{ StringMaker&lt;has_maker_and_toString> }"
+        </Original>
+        <Expanded>
+          "{ StringMaker&lt;has_maker_and_toString> }"
+==
+"{ StringMaker&lt;has_maker_and_toString> }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString( vectors&lt;has_toString )">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+        <Original>
+          Catch::toString( v ) == "{ {?} }"
+        </Original>
+        <Expanded>
+          "{ {?} }" == "{ {?} }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString(enum class w/operator&lt;&lt;)">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e0) == "E2/V0"
+        </Original>
+        <Expanded>
+          "E2/V0" == "E2/V0"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e1) == "E2/V1"
+        </Original>
+        <Expanded>
+          "E2/V1" == "E2/V1"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e3) == "Unknown enum value 10"
+        </Original>
+        <Expanded>
+          "Unknown enum value 10"
+==
+"Unknown enum value 10"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString(enum class)">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e0) == "0"
+        </Original>
+        <Expanded>
+          "0" == "0"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e1) == "1"
+        </Original>
+        <Expanded>
+          "1" == "1"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString(enum w/operator&lt;&lt;)">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e0) == "E2{0}"
+        </Original>
+        <Expanded>
+          "E2{0}" == "E2{0}"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e1) == "E2{1}"
+        </Original>
+        <Expanded>
+          "E2{1}" == "E2{1}"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString(enum)">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e0) == "0"
+        </Original>
+        <Expanded>
+          "0" == "0"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e1) == "1"
+        </Original>
+        <Expanded>
+          "1" == "1"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="tuple&lt;>">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+        <Original>
+          "{ }" == Catch::toString(type{})
+        </Original>
+        <Expanded>
+          "{ }" == "{ }"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+        <Original>
+          "{ }" == Catch::toString(value)
+        </Original>
+        <Expanded>
+          "{ }" == "{ }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="tuple&lt;float,int>">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+        <Original>
+          "1.2f" == Catch::toString(float(1.2))
+        </Original>
+        <Expanded>
+          "1.2f" == "1.2f"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+        <Original>
+          "{ 1.2f, 0 }" == Catch::toString(type{1.2,0})
+        </Original>
+        <Expanded>
+          "{ 1.2f, 0 }" == "{ 1.2f, 0 }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="tuple&lt;int>">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+        <Original>
+          "{ 0 }" == Catch::toString(type{0})
+        </Original>
+        <Expanded>
+          "{ 0 }" == "{ 0 }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="tuple&lt;nullptr,int,const char *>">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+        <Original>
+          "{ nullptr, 42, \"Catch me\" }" == Catch::toString(value)
+        </Original>
+        <Expanded>
+          "{ nullptr, 42, "Catch me" }"
+==
+"{ nullptr, 42, "Catch me" }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="tuple&lt;string,string>">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+        <Original>
+          "{ \"hello\", \"world\" }" == Catch::toString(type{"hello","world"})
+        </Original>
+        <Expanded>
+          "{ "hello", "world" }"
+==
+"{ "hello", "world" }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="tuple&lt;tuple&lt;int>,tuple&lt;>,float>">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+        <Original>
+          "{ { 42 }, { }, 1.2f }" == Catch::toString(value)
+        </Original>
+        <Expanded>
+          "{ { 42 }, { }, 1.2f }"
+==
+"{ { 42 }, { }, 1.2f }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="vec&lt;vec&lt;string,alloc>> -> toString">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(v) == "{  }"
+        </Original>
+        <Expanded>
+          "{  }" == "{  }"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(v) == "{ { \"hello\" }, { \"world\" } }"
+        </Original>
+        <Expanded>
+          "{ { "hello" }, { "world" } }"
+==
+"{ { "hello" }, { "world" } }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="vector&lt;int,allocator> -> toString">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == "{  }"
+        </Original>
+        <Expanded>
+          "{  }" == "{  }"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == "{ 42 }"
+        </Original>
+        <Expanded>
+          "{ 42 }" == "{ 42 }"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == "{ 42, 250 }"
+        </Original>
+        <Expanded>
+          "{ 42, 250 }" == "{ 42, 250 }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="vector&lt;int> -> toString">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == "{  }"
+        </Original>
+        <Expanded>
+          "{  }" == "{  }"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == "{ 42 }"
+        </Original>
+        <Expanded>
+          "{ 42 }" == "{ 42 }"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == "{ 42, 250 }"
+        </Original>
+        <Expanded>
+          "{ 42, 250 }" == "{ 42, 250 }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="vector&lt;string> -> toString">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == "{  }"
+        </Original>
+        <Expanded>
+          "{  }" == "{  }"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == "{ \"hello\" }"
+        </Original>
+        <Expanded>
+          "{ "hello" }" == "{ "hello" }"
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == "{ \"hello\", \"world\" }"
+        </Original>
+        <Expanded>
+          "{ "hello", "world" }"
+==
+"{ "hello", "world" }"
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="vectors can be sized and resized">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          v.size() == 5
+        </Original>
+        <Expanded>
+          5 == 5
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          v.capacity() >= 5
+        </Original>
+        <Expanded>
+          5 >= 5
+        </Expanded>
+      </Expression>
+      <Section name="resizing bigger changes size and capacity">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            v.size() == 10
+          </Original>
+          <Expanded>
+            10 == 10
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            v.capacity() >= 10
+          </Original>
+          <Expanded>
+            10 >= 10
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          v.size() == 5
+        </Original>
+        <Expanded>
+          5 == 5
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          v.capacity() >= 5
+        </Original>
+        <Expanded>
+          5 >= 5
+        </Expanded>
+      </Expression>
+      <Section name="resizing smaller changes size but not capacity">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            v.size() == 0
+          </Original>
+          <Expanded>
+            0 == 0
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            v.capacity() >= 5
+          </Original>
+          <Expanded>
+            5 >= 5
+          </Expanded>
+        </Expression>
+        <Section name="We can use the 'swap trick' to reset the capacity">
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+            <Original>
+              v.capacity() == 0
+            </Original>
+            <Expanded>
+              0 == 0
+            </Expanded>
+          </Expression>
+          <OverallResults successes="1" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="3" failures="0" expectedFailures="0"/>
+      </Section>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          v.size() == 5
+        </Original>
+        <Expanded>
+          5 == 5
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          v.capacity() >= 5
+        </Original>
+        <Expanded>
+          5 >= 5
+        </Expanded>
+      </Expression>
+      <Section name="reserving bigger changes capacity but not size">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            v.size() == 5
+          </Original>
+          <Expanded>
+            5 == 5
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            v.capacity() >= 10
+          </Original>
+          <Expanded>
+            10 >= 10
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          v.size() == 5
+        </Original>
+        <Expanded>
+          5 == 5
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+        <Original>
+          v.capacity() >= 5
+        </Original>
+        <Expanded>
+          5 >= 5
+        </Expanded>
+      </Expression>
+      <Section name="reserving smaller does not change size or capacity">
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            v.size() == 5
+          </Original>
+          <Expanded>
+            5 == 5
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+          <Original>
+            v.capacity() >= 5
+          </Original>
+          <Expanded>
+            5 >= 5
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="xmlentitycheck">
+      <Section name="embedded xml" description="&lt;test>it should be possible to embed xml characters, such as &lt;, &quot; or &amp;, or even whole &lt;xml>documents&lt;/xml> within an attribute&lt;/test>">
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="encoded chars" description="these should all be encoded: &amp;&amp;&amp;&quot;&quot;&quot;&lt;&lt;&lt;&amp;&quot;&lt;&lt;&amp;&quot;">
+        <OverallResults successes="1" failures="0" expectedFailures="0"/>
+      </Section>
       <OverallResult success="true"/>
     </TestCase>
     <OverallResults successes="825" failures="81" expectedFailures="18"/>
diff --git a/scripts/approvalTests.py b/scripts/approvalTests.py
index 618812f..2fe3245 100644
--- a/scripts/approvalTests.py
+++ b/scripts/approvalTests.py
@@ -22,6 +22,7 @@
 	cmdPath = sys.argv[1]
 else:
 	cmdPath = os.path.join( catchPath, 'projects/XCode/CatchSelfTest/DerivedData/CatchSelfTest/Build/Products/Debug/CatchSelfTest' )
+#	cmdPath = os.path.join( catchPath, 'projects/CMake/cmake-build-debug/SelfTest' )
 
 overallResult = 0
 
@@ -100,15 +101,15 @@
 			overallResult = 1
 
 # Standard console reporter
-approve( "console.std", ["~_"] )
+approve( "console.std", ["~_", "--order", "lex"] )
 # console reporter, include passes, warn about No Assertions
-approve( "console.sw", ["~_", "-s", "-w", "NoAssertions"] )
+approve( "console.sw", ["~_", "-s", "-w", "NoAssertions", "--order", "lex"] )
 # console reporter, include passes, warn about No Assertions, limit failures to first 4
-approve( "console.swa4", ["~_", "-s", "-w", "NoAssertions", "-x", "4"] )
+approve( "console.swa4", ["~_", "-s", "-w", "NoAssertions", "-x", "4", "--order", "lex"] )
 # junit reporter, include passes, warn about No Assertions
-approve( "junit.sw", ["~_", "-s", "-w", "NoAssertions", "-r", "junit"] )
+approve( "junit.sw", ["~_", "-s", "-w", "NoAssertions", "-r", "junit", "--order", "lex"] )
 # xml reporter, include passes, warn about No Assertions
-approve( "xml.sw", ["~_", "-s", "-w", "NoAssertions", "-r", "xml"] )
+approve( "xml.sw", ["~_", "-s", "-w", "NoAssertions", "-r", "xml", "--order", "lex"] )
 
 if overallResult != 0:
 	print( "run approve.py to approve new baselines" )