Sort test ordering during Approval testing
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"/>