# #1455 - INFO and WARN can start with a linebreak
warning {test-number} - '
This info message starts with a linebreak' with 1 message: '
This warning message starts with a linebreak'
# #1514: stderr/stdout is not captured in tests aborted by an exception
not ok {test-number} - explicitly with 1 message: '1514'
# #1548
ok {test-number} - std::is_same<TypeList<int>, TypeList<int>>::value for: true
# #1905 -- test spec parser properly clears internal state between compound tests
ok {test-number} - spec.matches(*fakeTestCase("spec . char")) for: true
# #1905 -- test spec parser properly clears internal state between compound tests
ok {test-number} - spec.matches(*fakeTestCase("spec , char")) for: true
# #1905 -- test spec parser properly clears internal state between compound tests
ok {test-number} - !(spec.matches(*fakeTestCase(R"(spec \, char)"))) for: !false
# #1912 -- test spec parser handles escaping
ok {test-number} - spec.matches(*fakeTestCase(R"(spec {a} char)")) for: true
# #1912 -- test spec parser handles escaping
ok {test-number} - spec.matches(*fakeTestCase(R"(spec [a] char)")) for: true
# #1912 -- test spec parser handles escaping
ok {test-number} - !(spec.matches(*fakeTestCase("differs but has similar tag", "[a]"))) for: !false
# #1912 -- test spec parser handles escaping
ok {test-number} - spec.matches(*fakeTestCase(R"(spec \ char)")) for: true
# #1913 - GENERATE inside a for loop should not keep recreating the generator
ok {test-number} - counter < 7 for: 3 < 7
# #1913 - GENERATE inside a for loop should not keep recreating the generator
ok {test-number} - counter < 7 for: 6 < 7
# #1913 - GENERATEs can share a line
ok {test-number} - i != j for: 1 != 3
# #1913 - GENERATEs can share a line
ok {test-number} - i != j for: 1 != 4
# #1913 - GENERATEs can share a line
ok {test-number} - i != j for: 2 != 3
# #1913 - GENERATEs can share a line
ok {test-number} - i != j for: 2 != 4
# #1938 - GENERATE after a section
ok {test-number} - with 1 message: 'A'
# #1938 - GENERATE after a section
ok {test-number} - m for: 1
# #1938 - GENERATE after a section
ok {test-number} - m for: 2
# #1938 - GENERATE after a section
ok {test-number} - m for: 3
# #1938 - Section followed by flat generate
ok {test-number} - 1
# #1938 - Section followed by flat generate
ok {test-number} - m for: 2
# #1938 - Section followed by flat generate
ok {test-number} - m for: 3
# #1938 - flat generate
ok {test-number} - m for: 1
# #1938 - flat generate
ok {test-number} - m for: 2
# #1938 - flat generate
ok {test-number} - m for: 3
# #1938 - mixed sections and generates
ok {test-number} - with 1 message: 'A'
# #1938 - mixed sections and generates
ok {test-number} - with 3 messages: 'i := 1' and 'j := 3' and 'k := 5'
# #1938 - mixed sections and generates
ok {test-number} - with 1 message: 'B'
# #1938 - mixed sections and generates
ok {test-number} - with 3 messages: 'i := 1' and 'j := 3' and 'k := 6'
# #1938 - mixed sections and generates
ok {test-number} - with 1 message: 'B'
# #1938 - mixed sections and generates
ok {test-number} - with 3 messages: 'i := 1' and 'j := 4' and 'k := 5'
# #1938 - mixed sections and generates
ok {test-number} - with 3 messages: 'i := 1' and 'j := 4' and 'k := 6'
# #1938 - mixed sections and generates
ok {test-number} - with 1 message: 'A'
# #1938 - mixed sections and generates
ok {test-number} - with 3 messages: 'i := 2' and 'j := 3' and 'k := 5'
# #1938 - mixed sections and generates
ok {test-number} - with 1 message: 'B'
# #1938 - mixed sections and generates
ok {test-number} - with 3 messages: 'i := 2' and 'j := 3' and 'k := 6'
# #1938 - mixed sections and generates
ok {test-number} - with 1 message: 'B'
# #1938 - mixed sections and generates
ok {test-number} - with 3 messages: 'i := 2' and 'j := 4' and 'k := 5'
# #1938 - mixed sections and generates
ok {test-number} - with 3 messages: 'i := 2' and 'j := 4' and 'k := 6'
# #1938 - nested generate
ok {test-number} - m for: 1
# #1938 - nested generate
ok {test-number} - n for: 1
# #1938 - nested generate
ok {test-number} - m for: 1
# #1938 - nested generate
ok {test-number} - n for: 2
# #1938 - nested generate
ok {test-number} - m for: 1
# #1938 - nested generate
ok {test-number} - n for: 3
# #1938 - nested generate
ok {test-number} - m for: 2
# #1938 - nested generate
ok {test-number} - n for: 1
# #1938 - nested generate
ok {test-number} - m for: 2
# #1938 - nested generate
ok {test-number} - n for: 2
# #1938 - nested generate
ok {test-number} - m for: 2
# #1938 - nested generate
ok {test-number} - n for: 3
# #1938 - nested generate
ok {test-number} - m for: 3
# #1938 - nested generate
ok {test-number} - n for: 1
# #1938 - nested generate
ok {test-number} - m for: 3
# #1938 - nested generate
ok {test-number} - n for: 2
# #1938 - nested generate
ok {test-number} - m for: 3
# #1938 - nested generate
ok {test-number} - n for: 3
# #1954 - 7 arg template test case sig compiles - 1, 1, 1, 1, 1, 0, 0
ok {test-number} -
# #1954 - 7 arg template test case sig compiles - 5, 1, 1, 1, 1, 0, 0
ok {test-number} -
# #1954 - 7 arg template test case sig compiles - 5, 3, 1, 1, 1, 0, 0
ok {test-number} -
# #2152 - ULP checks between differently signed values were wrong - double
ok {test-number} - smallest_non_zero, WithinULP( -smallest_non_zero, 2 ) for: 0.0 is within 2 ULPs of -4.9406564584124654e-324 ([-1.4821969375237396e-323, 4.9406564584124654e-324])
# #2152 - ULP checks between differently signed values were wrong - double
ok {test-number} - smallest_non_zero, !WithinULP( -smallest_non_zero, 1 ) for: 0.0 not is within 1 ULPs of -4.9406564584124654e-324 ([-9.8813129168249309e-324, -0.0000000000000000e+00])
# #2152 - ULP checks between differently signed values were wrong - float
ok {test-number} - smallest_non_zero, WithinULP( -smallest_non_zero, 2 ) for: 0.0f is within 2 ULPs of -1.40129846e-45f ([-4.20389539e-45, 1.40129846e-45])
# #2152 - ULP checks between differently signed values were wrong - float
ok {test-number} - smallest_non_zero, !WithinULP( -smallest_non_zero, 1 ) for: 0.0f not is within 1 ULPs of -1.40129846e-45f ([-2.80259693e-45, -0.00000000e+00])
# #748 - captures with unexpected exceptions
not ok {test-number} - unexpected exception with message: 'answer := 42' with 1 message: 'expected exception'
# #748 - captures with unexpected exceptions
not ok {test-number} - unexpected exception with message: 'answer := 42'; expression was: thisThrows() with 1 message: 'expected exception'
# #748 - captures with unexpected exceptions
ok {test-number} - thisThrows() with 1 message: 'answer := 42'
# #809
ok {test-number} - 42 == f for: 42 == {?}
# #833
ok {test-number} - a == t for: 3 == 3
# #833
ok {test-number} - a == t for: 3 == 3
# #833
ok {test-number} - throws_int(true)
# #833
ok {test-number} - throws_int(true), int
# #833
ok {test-number} - throws_int(false)
# #833
ok {test-number} - "aaa", Catch::Matchers::EndsWith("aaa") for: "aaa" ends with: "aaa"
# #833
ok {test-number} - templated_tests<int>(3) for: true
# #835 -- errno should not be touched by Catch
not ok {test-number} - f() == 0 for: 1 == 0
# #835 -- errno should not be touched by Catch
ok {test-number} - errno == 1 for: 1 == 1
# #872
ok {test-number} - x == 4 for: {?} == 4 with 1 message: 'dummy := 0'
# #961 -- Dynamically created sections should all be reported
ok {test-number} - with 1 message: 'Everything is OK'
# #961 -- Dynamically created sections should all be reported
ok {test-number} - with 1 message: 'Everything is OK'
# #961 -- Dynamically created sections should all be reported
ok {test-number} - with 1 message: 'Everything is OK'
# #961 -- Dynamically created sections should all be reported
ok {test-number} - with 1 message: 'Everything is OK'
# #961 -- Dynamically created sections should all be reported
ok {test-number} - with 1 message: 'Everything is OK'
# 'Not' checks that should fail
not ok {test-number} - false != false
# 'Not' checks that should fail
not ok {test-number} - true != true
# 'Not' checks that should fail
not ok {test-number} - !true for: false
# 'Not' checks that should fail
not ok {test-number} - !(true) for: !true
# 'Not' checks that should fail
not ok {test-number} - !trueValue for: false
# 'Not' checks that should fail
not ok {test-number} - !(trueValue) for: !true
# 'Not' checks that should fail
not ok {test-number} - !(1 == 1) for: false
# 'Not' checks that should fail
not ok {test-number} - !(1 == 1)
# 'Not' checks that should succeed
ok {test-number} - false == false
# 'Not' checks that should succeed
ok {test-number} - true == true
# 'Not' checks that should succeed
ok {test-number} - !false for: true
# 'Not' checks that should succeed
ok {test-number} - !(false) for: !false
# 'Not' checks that should succeed
ok {test-number} - !falseValue for: true
# 'Not' checks that should succeed
ok {test-number} - !(falseValue) for: !false
# 'Not' checks that should succeed
ok {test-number} - !(1 == 2) for: true
# 'Not' checks that should succeed
ok {test-number} - !(1 == 2)
# (unimplemented) static bools can be evaluated
ok {test-number} - is_true<true>::value == true for: true == true
# (unimplemented) static bools can be evaluated
ok {test-number} - true == is_true<true>::value for: true == true
# (unimplemented) static bools can be evaluated
ok {test-number} - is_true<false>::value == false for: false == false
# (unimplemented) static bools can be evaluated
ok {test-number} - false == is_true<false>::value for: false == false
# (unimplemented) static bools can be evaluated
ok {test-number} - !is_true<false>::value for: true
# (unimplemented) static bools can be evaluated
ok {test-number} - !!is_true<true>::value for: true
# (unimplemented) static bools can be evaluated
ok {test-number} - is_true<true>::value for: true
# (unimplemented) static bools can be evaluated
ok {test-number} - !(is_true<false>::value) for: !false
# 3x3x3 ints
ok {test-number} - x < y for: 1 < 4
# 3x3x3 ints
ok {test-number} - y < z for: 4 < 7
# 3x3x3 ints
ok {test-number} - x < z for: 1 < 7
# 3x3x3 ints
ok {test-number} - x < y for: 1 < 4
# 3x3x3 ints
ok {test-number} - y < z for: 4 < 8
# 3x3x3 ints
ok {test-number} - x < z for: 1 < 8
# 3x3x3 ints
ok {test-number} - x < y for: 1 < 4
# 3x3x3 ints
ok {test-number} - y < z for: 4 < 9
# 3x3x3 ints
ok {test-number} - x < z for: 1 < 9
# 3x3x3 ints
ok {test-number} - x < y for: 1 < 5
# 3x3x3 ints
ok {test-number} - y < z for: 5 < 7
# 3x3x3 ints
ok {test-number} - x < z for: 1 < 7
# 3x3x3 ints
ok {test-number} - x < y for: 1 < 5
# 3x3x3 ints
ok {test-number} - y < z for: 5 < 8
# 3x3x3 ints
ok {test-number} - x < z for: 1 < 8
# 3x3x3 ints
ok {test-number} - x < y for: 1 < 5
# 3x3x3 ints
ok {test-number} - y < z for: 5 < 9
# 3x3x3 ints
ok {test-number} - x < z for: 1 < 9
# 3x3x3 ints
ok {test-number} - x < y for: 1 < 6
# 3x3x3 ints
ok {test-number} - y < z for: 6 < 7
# 3x3x3 ints
ok {test-number} - x < z for: 1 < 7
# 3x3x3 ints
ok {test-number} - x < y for: 1 < 6
# 3x3x3 ints
ok {test-number} - y < z for: 6 < 8
# 3x3x3 ints
ok {test-number} - x < z for: 1 < 8
# 3x3x3 ints
ok {test-number} - x < y for: 1 < 6
# 3x3x3 ints
ok {test-number} - y < z for: 6 < 9
# 3x3x3 ints
ok {test-number} - x < z for: 1 < 9
# 3x3x3 ints
ok {test-number} - x < y for: 2 < 4
# 3x3x3 ints
ok {test-number} - y < z for: 4 < 7
# 3x3x3 ints
ok {test-number} - x < z for: 2 < 7
# 3x3x3 ints
ok {test-number} - x < y for: 2 < 4
# 3x3x3 ints
ok {test-number} - y < z for: 4 < 8
# 3x3x3 ints
ok {test-number} - x < z for: 2 < 8
# 3x3x3 ints
ok {test-number} - x < y for: 2 < 4
# 3x3x3 ints
ok {test-number} - y < z for: 4 < 9
# 3x3x3 ints
ok {test-number} - x < z for: 2 < 9
# 3x3x3 ints
ok {test-number} - x < y for: 2 < 5
# 3x3x3 ints
ok {test-number} - y < z for: 5 < 7
# 3x3x3 ints
ok {test-number} - x < z for: 2 < 7
# 3x3x3 ints
ok {test-number} - x < y for: 2 < 5
# 3x3x3 ints
ok {test-number} - y < z for: 5 < 8
# 3x3x3 ints
ok {test-number} - x < z for: 2 < 8
# 3x3x3 ints
ok {test-number} - x < y for: 2 < 5
# 3x3x3 ints
ok {test-number} - y < z for: 5 < 9
# 3x3x3 ints
ok {test-number} - x < z for: 2 < 9
# 3x3x3 ints
ok {test-number} - x < y for: 2 < 6
# 3x3x3 ints
ok {test-number} - y < z for: 6 < 7
# 3x3x3 ints
ok {test-number} - x < z for: 2 < 7
# 3x3x3 ints
ok {test-number} - x < y for: 2 < 6
# 3x3x3 ints
ok {test-number} - y < z for: 6 < 8
# 3x3x3 ints
ok {test-number} - x < z for: 2 < 8
# 3x3x3 ints
ok {test-number} - x < y for: 2 < 6
# 3x3x3 ints
ok {test-number} - y < z for: 6 < 9
# 3x3x3 ints
ok {test-number} - x < z for: 2 < 9
# 3x3x3 ints
ok {test-number} - x < y for: 3 < 4
# 3x3x3 ints
ok {test-number} - y < z for: 4 < 7
# 3x3x3 ints
ok {test-number} - x < z for: 3 < 7
# 3x3x3 ints
ok {test-number} - x < y for: 3 < 4
# 3x3x3 ints
ok {test-number} - y < z for: 4 < 8
# 3x3x3 ints
ok {test-number} - x < z for: 3 < 8
# 3x3x3 ints
ok {test-number} - x < y for: 3 < 4
# 3x3x3 ints
ok {test-number} - y < z for: 4 < 9
# 3x3x3 ints
ok {test-number} - x < z for: 3 < 9
# 3x3x3 ints
ok {test-number} - x < y for: 3 < 5
# 3x3x3 ints
ok {test-number} - y < z for: 5 < 7
# 3x3x3 ints
ok {test-number} - x < z for: 3 < 7
# 3x3x3 ints
ok {test-number} - x < y for: 3 < 5
# 3x3x3 ints
ok {test-number} - y < z for: 5 < 8
# 3x3x3 ints
ok {test-number} - x < z for: 3 < 8
# 3x3x3 ints
ok {test-number} - x < y for: 3 < 5
# 3x3x3 ints
ok {test-number} - y < z for: 5 < 9
# 3x3x3 ints
ok {test-number} - x < z for: 3 < 9
# 3x3x3 ints
ok {test-number} - x < y for: 3 < 6
# 3x3x3 ints
ok {test-number} - y < z for: 6 < 7
# 3x3x3 ints
ok {test-number} - x < z for: 3 < 7
# 3x3x3 ints
ok {test-number} - x < y for: 3 < 6
# 3x3x3 ints
ok {test-number} - y < z for: 6 < 8
# 3x3x3 ints
ok {test-number} - x < z for: 3 < 8
# 3x3x3 ints
ok {test-number} - x < y for: 3 < 6
# 3x3x3 ints
ok {test-number} - y < z for: 6 < 9
# 3x3x3 ints
ok {test-number} - x < z for: 3 < 9
# A METHOD_AS_TEST_CASE based test run that fails
not ok {test-number} - s == "world" for: "hello" == "world"
# A METHOD_AS_TEST_CASE based test run that succeeds
ok {test-number} - s == "hello" for: "hello" == "hello"
# A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - Template_Foo<float>
not ok {test-number} - Template_Fixture_2<TestType>::m_a.size() == 1 for: 0 == 1
# A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - Template_Foo<int>
not ok {test-number} - Template_Fixture_2<TestType>::m_a.size() == 1 for: 0 == 1
# A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - std::vector<float>
not ok {test-number} - Template_Fixture_2<TestType>::m_a.size() == 1 for: 0 == 1
# A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - std::vector<int>
not ok {test-number} - Template_Fixture_2<TestType>::m_a.size() == 1 for: 0 == 1
# A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - Template_Foo<float>
ok {test-number} - Template_Fixture_2<TestType>::m_a.size() == 0 for: 0 == 0
# A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - Template_Foo<int>
ok {test-number} - Template_Fixture_2<TestType>::m_a.size() == 0 for: 0 == 0
# A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - std::vector<float>
ok {test-number} - Template_Fixture_2<TestType>::m_a.size() == 0 for: 0 == 0
# A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - std::vector<int>
ok {test-number} - Template_Fixture_2<TestType>::m_a.size() == 0 for: 0 == 0
# A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - Template_Foo_2<float, 6>
not ok {test-number} - Template_Fixture_2<TestType>{}.m_a.size() < 2 for: 6 < 2
# A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - Template_Foo_2<int, 2>
not ok {test-number} - Template_Fixture_2<TestType>{}.m_a.size() < 2 for: 2 < 2
# A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - std::array<float, 6>
not ok {test-number} - Template_Fixture_2<TestType>{}.m_a.size() < 2 for: 6 < 2
# A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - std::array<int, 2>
not ok {test-number} - Template_Fixture_2<TestType>{}.m_a.size() < 2 for: 2 < 2
# A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - Template_Foo_2<float,6>
ok {test-number} - Template_Fixture_2<TestType>{}.m_a.size() >= 2 for: 6 >= 2
# A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - Template_Foo_2<int,2>
ok {test-number} - Template_Fixture_2<TestType>{}.m_a.size() >= 2 for: 2 >= 2
# A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - std::array<float,6>
ok {test-number} - Template_Fixture_2<TestType>{}.m_a.size() >= 2 for: 6 >= 2
# A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - std::array<int,2>
ok {test-number} - Template_Fixture_2<TestType>{}.m_a.size() >= 2 for: 2 >= 2
# A TEMPLATE_TEST_CASE_METHOD based test run that fails - double
not ok {test-number} - Template_Fixture<TestType>::m_a == 2 for: 1.0 == 2
# A TEMPLATE_TEST_CASE_METHOD based test run that fails - float
not ok {test-number} - Template_Fixture<TestType>::m_a == 2 for: 1.0f == 2
# A TEMPLATE_TEST_CASE_METHOD based test run that fails - int
not ok {test-number} - Template_Fixture<TestType>::m_a == 2 for: 1 == 2
# A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - double
ok {test-number} - Template_Fixture<TestType>::m_a == 1 for: 1.0 == 1
# A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - float
ok {test-number} - Template_Fixture<TestType>::m_a == 1 for: 1.0f == 1
# A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - int
ok {test-number} - Template_Fixture<TestType>::m_a == 1 for: 1 == 1
# A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 1
not ok {test-number} - Nttp_Fixture<V>::value == 0 for: 1 == 0
# A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 3
not ok {test-number} - Nttp_Fixture<V>::value == 0 for: 3 == 0
# A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 6
not ok {test-number} - Nttp_Fixture<V>::value == 0 for: 6 == 0
# A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 1
ok {test-number} - Nttp_Fixture<V>::value > 0 for: 1 > 0
# A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 3
ok {test-number} - Nttp_Fixture<V>::value > 0 for: 3 > 0
# A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 6
ok {test-number} - Nttp_Fixture<V>::value > 0 for: 6 > 0
# A TEST_CASE_METHOD based test run that fails
not ok {test-number} - m_a == 2 for: 1 == 2
# A TEST_CASE_METHOD based test run that succeeds
ok {test-number} - m_a == 1 for: 1 == 1
# A Template product test case - Foo<float>
ok {test-number} - x.size() == 0 for: 0 == 0
# A Template product test case - Foo<int>
ok {test-number} - x.size() == 0 for: 0 == 0
# A Template product test case - std::vector<float>
ok {test-number} - x.size() == 0 for: 0 == 0
# A Template product test case - std::vector<int>
ok {test-number} - x.size() == 0 for: 0 == 0
# A Template product test case with array signature - Bar<float, 42>
ok {test-number} - x.size() > 0 for: 42 > 0
# A Template product test case with array signature - Bar<int, 9>
ok {test-number} - x.size() > 0 for: 9 > 0
# A Template product test case with array signature - std::array<float, 42>
ok {test-number} - x.size() > 0 for: 42 > 0
# A Template product test case with array signature - std::array<int, 9>
ok {test-number} - x.size() > 0 for: 9 > 0
# A comparison that uses literals instead of the normal constructor
ok {test-number} - d == 1.23_a for: 1.23 == Approx( 1.23 )
# A comparison that uses literals instead of the normal constructor
ok {test-number} - d != 1.22_a for: 1.23 != Approx( 1.22 )
# A comparison that uses literals instead of the normal constructor
ok {test-number} - 1, !Predicate<int>( alwaysFalse, "always false" ) for: 1 not matches predicate: "always false"
# Arbitrary predicate matcher
ok {test-number} - "Hello olleH", Predicate<std::string>( []( std::string const& str ) -> bool { return str.front() == str.back(); }, "First and last character should be equal" ) for: "Hello olleH" matches predicate: "First and last character should be equal"
ok {test-number} - with 1 message: 'std::is_same<decltype( MatcherA() || MatcherB() ), Catch::Matchers::Detail:: MatchAnyOfGeneric<MatcherA, MatcherB>>::value'
# Combining only templated matchers
ok {test-number} - 1, MatcherA() || MatcherB() for: 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 )
# Combining only templated matchers
ok {test-number} - with 1 message: 'std::is_same<decltype( MatcherA() && MatcherB() ), Catch::Matchers::Detail:: MatchAllOfGeneric<MatcherA, MatcherB>>::value'
# Combining only templated matchers
ok {test-number} - 1, MatcherA() && MatcherB() for: 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 )
# Combining only templated matchers
ok {test-number} - with 1 message: 'std::is_same< decltype( MatcherA() || !MatcherB() ), Catch::Matchers::Detail::MatchAnyOfGeneric< MatcherA, Catch::Matchers::Detail::MatchNotOfGeneric<MatcherB>>>::value'
# Combining only templated matchers
ok {test-number} - 1, MatcherA() || !MatcherB() for: 1 ( equals: (int) 1 or (float) 1.0f or not equals: (long long) 1 )
# Combining templated and concrete matchers
ok {test-number} - vec, Predicate<std::vector<int>>( []( auto const& v ) { return std::all_of( v.begin(), v.end(), []( int elem ) { return elem % 2 == 1; } ); }, "All elements are odd" ) && !EqualsRange( a ) for: { 1, 3, 5 } ( matches predicate: "All elements are odd" and not Equals: { 5, 3, 1 } )
ok {test-number} - data.str_hello == "hello" for: "hello" == "hello"
# Equality checks that should succeed
ok {test-number} - "hello" == data.str_hello for: "hello" == "hello"
# Equality checks that should succeed
ok {test-number} - data.str_hello.size() == 5 for: 5 == 5
# Equality checks that should succeed
ok {test-number} - x == Approx( 1.3 ) for: 1.3 == Approx( 1.3 )
# Equals
ok {test-number} - testStringForMatching(), Equals( "this string contains 'abc' as a substring" ) for: "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring"
# Equals
ok {test-number} - testStringForMatching(), Equals( "this string contains 'ABC' as a substring", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring" (case insensitive)
# Equals string matcher
not ok {test-number} - testStringForMatching(), Equals( "this string contains 'ABC' as a substring" ) for: "this string contains 'abc' as a substring" equals: "this string contains 'ABC' as a substring"
# Equals string matcher
not ok {test-number} - testStringForMatching(), Equals( "something else", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" equals: "something else" (case insensitive)
# Exception as a value (e.g. in REQUIRE_THROWS_MATCHES) can be stringified
ok {test-number} - ::Catch::Detail::stringify(WhatException{}) == "This exception has overridden what() method" for: "This exception has overridden what() method" == "This exception has overridden what() method"
# Exception as a value (e.g. in REQUIRE_THROWS_MATCHES) can be stringified
ok {test-number} - ::Catch::Detail::stringify(OperatorException{}) == "OperatorException" for: "OperatorException" == "OperatorException"
# Exception as a value (e.g. in REQUIRE_THROWS_MATCHES) can be stringified
ok {test-number} - ::Catch::Detail::stringify(StringMakerException{}) == "StringMakerException" for: "StringMakerException" == "StringMakerException"
# Exception matchers that fail
not ok {test-number} - expected exception, got none; expression was: doesNotThrow(), SpecialException, ExceptionMatcher{ 1 }
# Exception matchers that fail
not ok {test-number} - expected exception, got none; expression was: doesNotThrow(), SpecialException, ExceptionMatcher{ 1 }
# Exception matchers that fail
not ok {test-number} - unexpected exception with message: 'Unknown exception'; expression was: throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 }
# Exception matchers that fail
not ok {test-number} - unexpected exception with message: 'Unknown exception'; expression was: throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 }
# Exception matchers that fail
not ok {test-number} - throwsSpecialException( 3 ), SpecialException, ExceptionMatcher{ 1 } for: SpecialException::what special exception has value of 1
# Exception matchers that fail
not ok {test-number} - throwsSpecialException( 4 ), SpecialException, ExceptionMatcher{ 1 } for: SpecialException::what special exception has value of 1
# Exception matchers that succeed
ok {test-number} - throwsSpecialException( 1 ), SpecialException, ExceptionMatcher{ 1 } for: SpecialException::what special exception has value of 1
# Exception matchers that succeed
ok {test-number} - throwsSpecialException( 2 ), SpecialException, ExceptionMatcher{ 2 } for: SpecialException::what special exception has value of 2
ok {test-number} - 10., WithinRel( 11.1, 0.1 ) for: 10.0 and 11.1 are within 10% of each other
# Floating point matchers: double
ok {test-number} - 10., !WithinRel( 11.2, 0.1 ) for: 10.0 not and 11.2 are within 10% of each other
# Floating point matchers: double
ok {test-number} - 1., !WithinRel( 0., 0.99 ) for: 1.0 not and 0 are within 99% of each other
# Floating point matchers: double
ok {test-number} - -0., WithinRel( 0. ) for: -0.0 and 0 are within 2.22045e-12% of each other
# Floating point matchers: double
ok {test-number} - v1, WithinRel( v2 ) for: 0.0 and 2.22507e-308 are within 2.22045e-12% of each other
# Floating point matchers: double
ok {test-number} - 1., WithinAbs( 1., 0 ) for: 1.0 is within 0.0 of 1.0
# Floating point matchers: double
ok {test-number} - 0., WithinAbs( 1., 1 ) for: 0.0 is within 1.0 of 1.0
# Floating point matchers: double
ok {test-number} - 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.99 of 1.0
# Floating point matchers: double
ok {test-number} - 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.99 of 1.0
# Floating point matchers: double
ok {test-number} - 11., !WithinAbs( 10., 0.5 ) for: 11.0 not is within 0.5 of 10.0
# Floating point matchers: double
ok {test-number} - 10., !WithinAbs( 11., 0.5 ) for: 10.0 not is within 0.5 of 11.0
# Floating point matchers: double
ok {test-number} - -10., WithinAbs( -10., 0.5 ) for: -10.0 is within 0.5 of -10.0
# Floating point matchers: double
ok {test-number} - -10., WithinAbs( -9.6, 0.5 ) for: -10.0 is within 0.5 of -9.6
# Floating point matchers: double
ok {test-number} - 1., WithinULP( 1., 0 ) for: 1.0 is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00])
# Floating point matchers: double
ok {test-number} - nextafter( 1., 2. ), WithinULP( 1., 1 ) for: 1.0 is within 1 ULPs of 1.0000000000000000e+00 ([9.9999999999999989e-01, 1.0000000000000002e+00])
# Floating point matchers: double
ok {test-number} - 0., WithinULP( nextafter( 0., 1. ), 1 ) for: 0.0 is within 1 ULPs of 4.9406564584124654e-324 ([0.0000000000000000e+00, 9.8813129168249309e-324])
# Floating point matchers: double
ok {test-number} - 1., WithinULP( nextafter( 1., 0. ), 1 ) for: 1.0 is within 1 ULPs of 9.9999999999999989e-01 ([9.9999999999999978e-01, 1.0000000000000000e+00])
# Floating point matchers: double
ok {test-number} - 1., !WithinULP( nextafter( 1., 2. ), 0 ) for: 1.0 not is within 0 ULPs of 1.0000000000000002e+00 ([1.0000000000000002e+00, 1.0000000000000002e+00])
# Floating point matchers: double
ok {test-number} - 1., WithinULP( 1., 0 ) for: 1.0 is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00])
# Floating point matchers: double
ok {test-number} - -0., WithinULP( 0., 0 ) for: -0.0 is within 0 ULPs of 0.0000000000000000e+00 ([0.0000000000000000e+00, 0.0000000000000000e+00])
# Floating point matchers: double
ok {test-number} - 1., WithinAbs( 1., 0.5 ) || WithinULP( 2., 1 ) for: 1.0 ( is within 0.5 of 1.0 or is within 1 ULPs of 2.0000000000000000e+00 ([1.9999999999999998e+00, 2.0000000000000004e+00]) )
# Floating point matchers: double
ok {test-number} - 1., WithinAbs( 2., 0.5 ) || WithinULP( 1., 0 ) for: 1.0 ( is within 0.5 of 2.0 or is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00]) )
# Floating point matchers: double
ok {test-number} - 0.0001, WithinAbs( 0., 0.001 ) || WithinRel( 0., 0.1 ) for: 0.0001 ( is within 0.001 of 0.0 or and 0 are within 10% of each other )
# Floating point matchers: double
ok {test-number} - WithinAbs( 1., 0. )
# Floating point matchers: double
ok {test-number} - WithinAbs( 1., -1. ), std::domain_error
# Floating point matchers: double
ok {test-number} - WithinULP( 1., 0 )
# Floating point matchers: double
ok {test-number} - WithinRel( 1., 0. )
# Floating point matchers: double
ok {test-number} - WithinRel( 1., -0.2 ), std::domain_error
# Floating point matchers: double
ok {test-number} - WithinRel( 1., 1. ), std::domain_error
# Floating point matchers: float
ok {test-number} - 10.f, WithinRel( 11.1f, 0.1f ) for: 10.0f and 11.1 are within 10% of each other
# Floating point matchers: float
ok {test-number} - 10.f, !WithinRel( 11.2f, 0.1f ) for: 10.0f not and 11.2 are within 10% of each other
# Floating point matchers: float
ok {test-number} - 1.f, !WithinRel( 0.f, 0.99f ) for: 1.0f not and 0 are within 99% of each other
# Floating point matchers: float
ok {test-number} - -0.f, WithinRel( 0.f ) for: -0.0f and 0 are within 0.00119209% of each other
# Floating point matchers: float
ok {test-number} - v1, WithinRel( v2 ) for: 0.0f and 1.17549e-38 are within 0.00119209% of each other
# Floating point matchers: float
ok {test-number} - 1.f, WithinAbs( 1.f, 0 ) for: 1.0f is within 0.0 of 1.0
# Floating point matchers: float
ok {test-number} - 0.f, WithinAbs( 1.f, 1 ) for: 0.0f is within 1.0 of 1.0
# Floating point matchers: float
ok {test-number} - 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.9900000095 of 1.0
# Floating point matchers: float
ok {test-number} - 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.9900000095 of 1.0
# Floating point matchers: float
ok {test-number} - 0.f, WithinAbs( -0.f, 0 ) for: 0.0f is within 0.0 of -0.0
# Floating point matchers: float
ok {test-number} - 11.f, !WithinAbs( 10.f, 0.5f ) for: 11.0f not is within 0.5 of 10.0
# Floating point matchers: float
ok {test-number} - 10.f, !WithinAbs( 11.f, 0.5f ) for: 10.0f not is within 0.5 of 11.0
# Floating point matchers: float
ok {test-number} - -10.f, WithinAbs( -10.f, 0.5f ) for: -10.0f is within 0.5 of -10.0
# Floating point matchers: float
ok {test-number} - -10.f, WithinAbs( -9.6f, 0.5f ) for: -10.0f is within 0.5 of -9.6000003815
# Floating point matchers: float
ok {test-number} - 1.f, WithinULP( 1.f, 0 ) for: 1.0f is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00])
# Floating point matchers: float
ok {test-number} - -1.f, WithinULP( -1.f, 0 ) for: -1.0f is within 0 ULPs of -1.00000000e+00f ([-1.00000000e+00, -1.00000000e+00])
# Floating point matchers: float
ok {test-number} - nextafter( 1.f, 2.f ), WithinULP( 1.f, 1 ) for: 1.0f is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00])
# Floating point matchers: float
ok {test-number} - 0.f, WithinULP( nextafter( 0.f, 1.f ), 1 ) for: 0.0f is within 1 ULPs of 1.40129846e-45f ([0.00000000e+00, 2.80259693e-45])
# Floating point matchers: float
ok {test-number} - 1.f, WithinULP( nextafter( 1.f, 0.f ), 1 ) for: 1.0f is within 1 ULPs of 9.99999940e-01f ([9.99999881e-01, 1.00000000e+00])
# Floating point matchers: float
ok {test-number} - 1.f, !WithinULP( nextafter( 1.f, 2.f ), 0 ) for: 1.0f not is within 0 ULPs of 1.00000012e+00f ([1.00000012e+00, 1.00000012e+00])
# Floating point matchers: float
ok {test-number} - 1.f, WithinULP( 1.f, 0 ) for: 1.0f is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00])
# Floating point matchers: float
ok {test-number} - -0.f, WithinULP( 0.f, 0 ) for: -0.0f is within 0 ULPs of 0.00000000e+00f ([0.00000000e+00, 0.00000000e+00])
# Floating point matchers: float
ok {test-number} - 1.f, WithinAbs( 1.f, 0.5 ) || WithinULP( 1.f, 1 ) for: 1.0f ( is within 0.5 of 1.0 or is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00]) )
# Floating point matchers: float
ok {test-number} - 1.f, WithinAbs( 2.f, 0.5 ) || WithinULP( 1.f, 0 ) for: 1.0f ( is within 0.5 of 2.0 or is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00]) )
# Floating point matchers: float
ok {test-number} - 0.0001f, WithinAbs( 0.f, 0.001f ) || WithinRel( 0.f, 0.1f ) for: 0.0001f ( is within 0.001 of 0.0 or and 0 are within 10% of each other )
# Floating point matchers: float
ok {test-number} - WithinAbs( 1.f, 0.f )
# Floating point matchers: float
ok {test-number} - WithinAbs( 1.f, -1.f ), std::domain_error
# Floating point matchers: float
ok {test-number} - WithinULP( 1.f, 0 )
# Floating point matchers: float
ok {test-number} - WithinULP( 1.f, static_cast<uint64_t>( -1 ) ), std::domain_error
# Floating point matchers: float
ok {test-number} - WithinRel( 1.f, 0.f )
# Floating point matchers: float
ok {test-number} - WithinRel( 1.f, -0.2f ), std::domain_error
# Floating point matchers: float
ok {test-number} - WithinRel( 1.f, 1.f ), std::domain_error
# Generators -- adapters
ok {test-number} - i % 2 == 0 for: 0 == 0
# Generators -- adapters
ok {test-number} - i % 2 == 0 for: 0 == 0
# Generators -- adapters
ok {test-number} - i % 2 == 0 for: 0 == 0
# Generators -- adapters
ok {test-number} - filter([] (int) {return false; }, value(1)), Catch::GeneratorException
# Generators -- adapters
ok {test-number} - i < 4 for: 1 < 4
# Generators -- adapters
ok {test-number} - i < 4 for: 2 < 4
# Generators -- adapters
ok {test-number} - i < 4 for: 3 < 4
# Generators -- adapters
ok {test-number} - i % 2 == 0 for: 0 == 0
# Generators -- adapters
ok {test-number} - i % 2 == 0 for: 0 == 0
# Generators -- adapters
ok {test-number} - i % 2 == 0 for: 0 == 0
# Generators -- adapters
ok {test-number} - i.size() == 1 for: 1 == 1
# Generators -- adapters
ok {test-number} - i.size() == 1 for: 1 == 1
# Generators -- adapters
ok {test-number} - i.size() == 1 for: 1 == 1
# Generators -- adapters
ok {test-number} - i.size() == 1 for: 1 == 1
# Generators -- adapters
ok {test-number} - i.size() == 1 for: 1 == 1
# Generators -- adapters
ok {test-number} - i.size() == 1 for: 1 == 1
# Generators -- adapters
ok {test-number} - j > 0 for: 1 > 0
# Generators -- adapters
ok {test-number} - j > 0 for: 2 > 0
# Generators -- adapters
ok {test-number} - j > 0 for: 3 > 0
# Generators -- adapters
ok {test-number} - j > 0 for: 1 > 0
# Generators -- adapters
ok {test-number} - j > 0 for: 2 > 0
# Generators -- adapters
ok {test-number} - j > 0 for: 3 > 0
# Generators -- adapters
ok {test-number} - chunk2.size() == 2 for: 2 == 2
# Generators -- adapters
ok {test-number} - chunk2.front() == chunk2.back() for: 1 == 1
# Generators -- adapters
ok {test-number} - chunk2.size() == 2 for: 2 == 2
# Generators -- adapters
ok {test-number} - chunk2.front() == chunk2.back() for: 2 == 2
# Generators -- adapters
ok {test-number} - chunk2.size() == 2 for: 2 == 2
# Generators -- adapters
ok {test-number} - chunk2.front() == chunk2.back() for: 3 == 3
# Generators -- adapters
ok {test-number} - chunk2.size() == 2 for: 2 == 2
# Generators -- adapters
ok {test-number} - chunk2.front() == chunk2.back() for: 1 == 1
# Generators -- adapters
ok {test-number} - chunk2.front() < 3 for: 1 < 3
# Generators -- adapters
ok {test-number} - chunk2.size() == 2 for: 2 == 2
# Generators -- adapters
ok {test-number} - chunk2.front() == chunk2.back() for: 2 == 2
# Generators -- adapters
ok {test-number} - chunk2.front() < 3 for: 2 < 3
# Generators -- adapters
ok {test-number} - chunk2.size() == 0 for: 0 == 0
# Generators -- adapters
ok {test-number} - chunk2.size() == 0 for: 0 == 0
# Generators -- adapters
ok {test-number} - chunk2.size() == 0 for: 0 == 0
# Generators -- adapters
ok {test-number} - chunk(2, value(1)), Catch::GeneratorException
# Generators -- simple
ok {test-number} - j < i for: -3 < 1
# Generators -- simple
ok {test-number} - j < i for: -2 < 1
# Generators -- simple
ok {test-number} - j < i for: -1 < 1
# Generators -- simple
ok {test-number} - 4u * i > str.size() for: 4 > 1
# Generators -- simple
ok {test-number} - 4u * i > str.size() for: 4 > 2
# Generators -- simple
ok {test-number} - 4u * i > str.size() for: 4 > 3
# Generators -- simple
ok {test-number} - j < i for: -3 < 2
# Generators -- simple
ok {test-number} - j < i for: -2 < 2
# Generators -- simple
ok {test-number} - j < i for: -1 < 2
# Generators -- simple
ok {test-number} - 4u * i > str.size() for: 8 > 1
# Generators -- simple
ok {test-number} - 4u * i > str.size() for: 8 > 2
# Generators -- simple
ok {test-number} - 4u * i > str.size() for: 8 > 3
# Generators -- simple
ok {test-number} - j < i for: -3 < 3
# Generators -- simple
ok {test-number} - j < i for: -2 < 3
# Generators -- simple
ok {test-number} - j < i for: -1 < 3
# Generators -- simple
ok {test-number} - 4u * i > str.size() for: 12 > 1
# Generators -- simple
ok {test-number} - 4u * i > str.size() for: 12 > 2
# Generators -- simple
ok {test-number} - 4u * i > str.size() for: 12 > 3
# Generators internals
ok {test-number} - gen.get() == 123 for: 123 == 123
# Generators internals
ok {test-number} - !(gen.next()) for: !false
# Generators internals
ok {test-number} - gen.get() == 1 for: 1 == 1
# Generators internals
ok {test-number} - gen.next() for: true
# Generators internals
ok {test-number} - gen.get() == 3 for: 3 == 3
# Generators internals
ok {test-number} - gen.next() for: true
# Generators internals
ok {test-number} - gen.get() == 5 for: 5 == 5
# Generators internals
ok {test-number} - !(gen.next()) for: !false
# Generators internals
ok {test-number} - gen.get() == 1 for: 1 == 1
# Generators internals
ok {test-number} - gen.next() for: true
# Generators internals
ok {test-number} - gen.get() == 5 for: 5 == 5
# Generators internals
ok {test-number} - gen.next() for: true
# Generators internals
ok {test-number} - gen.get() == 2 for: 2 == 2
# Generators internals
ok {test-number} - gen.next() for: true
# Generators internals
ok {test-number} - gen.get() == 4 for: 4 == 4
# Generators internals
ok {test-number} - gen.next() for: true
# Generators internals
ok {test-number} - gen.get() == 0 for: 0 == 0
# Generators internals
ok {test-number} - !(gen.next()) for: !false
# Generators internals
ok {test-number} - gen.get().size() == 2 for: 2 == 2
# Generators internals
ok {test-number} - gen.get() == "aa" for: "aa" == "aa"
# Generators internals
ok {test-number} - gen.next() for: true
# Generators internals
ok {test-number} - gen.get() == "bb" for: "bb" == "bb"
# Generators internals
ok {test-number} - gen.next() for: true
# Generators internals
ok {test-number} - gen.get() == "cc" for: "cc" == "cc"
# Generators internals
ok {test-number} - !(gen.next()) for: !false
# Generators internals
ok {test-number} - gen.get() == 1 for: 1 == 1
# Generators internals
ok {test-number} - gen.next() for: true
# Generators internals
ok {test-number} - gen.get() == 3 for: 3 == 3
# Generators internals
ok {test-number} - !(gen.next()) for: !false
# Generators internals
ok {test-number} - gen.get() == 1 for: 1 == 1
# Generators internals
ok {test-number} - gen.next() for: true
# Generators internals
ok {test-number} - gen.get() == 3 for: 3 == 3
# Generators internals
ok {test-number} - !(gen.next()) for: !false
# Generators internals
ok {test-number} - filter([](int) { return false; }, value(1)), Catch::GeneratorException
# Greater-than inequalities with different epsilons
ok {test-number} - d >= Approx( 1.24 ).epsilon(0.1) for: 1.23 >= Approx( 1.24 )
# INFO and WARN do not abort tests
warning {test-number} - 'this is a message' with 1 message: 'this is a warning'
# INFO gets logged on failure
not ok {test-number} - a == 1 for: 2 == 1 with 2 messages: 'this message should be logged' and 'so should this'
# INFO gets logged on failure, even if captured before successful assertions
ok {test-number} - a == 2 for: 2 == 2 with 1 message: 'this message may be logged later'
# INFO gets logged on failure, even if captured before successful assertions
not ok {test-number} - a == 1 for: 2 == 1 with 2 messages: 'this message may be logged later' and 'this message should be logged'
# INFO gets logged on failure, even if captured before successful assertions
not ok {test-number} - a == 0 for: 2 == 0 with 3 messages: 'this message may be logged later' and 'this message should be logged' and 'and this, but later'
# INFO gets logged on failure, even if captured before successful assertions
ok {test-number} - a == 2 for: 2 == 2 with 4 messages: 'this message may be logged later' and 'this message should be logged' and 'and this, but later' and 'but not this'
# INFO is reset for each loop
ok {test-number} - i < 10 for: 0 < 10 with 2 messages: 'current counter 0' and 'i := 0'
# INFO is reset for each loop
ok {test-number} - i < 10 for: 1 < 10 with 2 messages: 'current counter 1' and 'i := 1'
# INFO is reset for each loop
ok {test-number} - i < 10 for: 2 < 10 with 2 messages: 'current counter 2' and 'i := 2'
# INFO is reset for each loop
ok {test-number} - i < 10 for: 3 < 10 with 2 messages: 'current counter 3' and 'i := 3'
# INFO is reset for each loop
ok {test-number} - i < 10 for: 4 < 10 with 2 messages: 'current counter 4' and 'i := 4'
# INFO is reset for each loop
ok {test-number} - i < 10 for: 5 < 10 with 2 messages: 'current counter 5' and 'i := 5'
# INFO is reset for each loop
ok {test-number} - i < 10 for: 6 < 10 with 2 messages: 'current counter 6' and 'i := 6'
# INFO is reset for each loop
ok {test-number} - i < 10 for: 7 < 10 with 2 messages: 'current counter 7' and 'i := 7'
# INFO is reset for each loop
ok {test-number} - i < 10 for: 8 < 10 with 2 messages: 'current counter 8' and 'i := 8'
# INFO is reset for each loop
ok {test-number} - i < 10 for: 9 < 10 with 2 messages: 'current counter 9' and 'i := 9'
# INFO is reset for each loop
not ok {test-number} - i < 10 for: 10 < 10 with 2 messages: 'current counter 10' and 'i := 10'
# Inequality checks that should fail
not ok {test-number} - data.int_seven != 7 for: 7 != 7
# Inequality checks that should fail
not ok {test-number} - data.float_nine_point_one != Approx( 9.1f ) for: 9.1f != Approx( 9.1000003815 )
# Inequality checks that should fail
not ok {test-number} - data.double_pi != Approx( 3.1415926535 ) for: 3.1415926535 != Approx( 3.1415926535 )
# Inequality checks that should fail
not ok {test-number} - data.str_hello != "hello" for: "hello" != "hello"
# Inequality checks that should fail
not ok {test-number} - data.str_hello.size() != 5 for: 5 != 5
# Inequality checks that should succeed
ok {test-number} - data.int_seven != 6 for: 7 != 6
# Inequality checks that should succeed
ok {test-number} - data.int_seven != 8 for: 7 != 8
ok {test-number} - d <= Approx( 1.22 ).epsilon(0.1) for: 1.23 <= Approx( 1.22 )
# ManuallyRegistered
ok {test-number} - with 1 message: 'was called'
# Matchers can be (AllOf) composed with the && operator
ok {test-number} - testStringForMatching(), ContainsSubstring( "string" ) && ContainsSubstring( "abc" ) && ContainsSubstring( "substring" ) && ContainsSubstring( "contains" ) for: "this string contains 'abc' as a substring" ( contains: "string" and contains: "abc" and contains: "substring" and contains: "contains" )
# Matchers can be (AnyOf) composed with the || operator
ok {test-number} - testStringForMatching(), ContainsSubstring( "string" ) || ContainsSubstring( "different" ) || ContainsSubstring( "random" ) for: "this string contains 'abc' as a substring" ( contains: "string" or contains: "different" or contains: "random" )
# Matchers can be (AnyOf) composed with the || operator
ok {test-number} - testStringForMatching2(), ContainsSubstring( "string" ) || ContainsSubstring( "different" ) || ContainsSubstring( "random" ) for: "some completely different text that contains one common word" ( contains: "string" or contains: "different" or contains: "random" )
# Matchers can be composed with both && and ||
ok {test-number} - testStringForMatching(), ( ContainsSubstring( "string" ) || ContainsSubstring( "different" ) ) && ContainsSubstring( "substring" ) for: "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "substring" )
# Matchers can be composed with both && and || - failing
not ok {test-number} - testStringForMatching(), ( ContainsSubstring( "string" ) || ContainsSubstring( "different" ) ) && ContainsSubstring( "random" ) for: "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "random" )
# Matchers can be negated (Not) with the ! operator
ok {test-number} - testStringForMatching(), !ContainsSubstring( "different" ) for: "this string contains 'abc' as a substring" not contains: "different"
# Matchers can be negated (Not) with the ! operator - failing
not ok {test-number} - testStringForMatching(), !ContainsSubstring( "substring" ) for: "this string contains 'abc' as a substring" not contains: "substring"
ok {test-number} - spec.matches( *fakeTestCase( "aardvark" ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches(*fakeTestCase("hidden and foo", "[.][foo]")) for: true
# Parse test names and tags
ok {test-number} - !(spec.matches(*fakeTestCase("only foo", "[foo]"))) for: !false
# Parse test names and tags
ok {test-number} - !(spec.matches(*fakeTestCase("hidden and foo", "[.][foo]"))) for: !false
# Parse test names and tags
ok {test-number} - !(spec.matches(*fakeTestCase("only foo", "[foo]"))) for: !false
# Parse test names and tags
ok {test-number} - !(spec.matches(*fakeTestCase("only hidden", "[.]"))) for: !false
# Parse test names and tags
ok {test-number} - spec.matches(*fakeTestCase("neither foo nor hidden", "[bar]")) for: true
# Parsed tags are matched case insensitive
ok {test-number} - spec.hasFilters() for: true
# Parsed tags are matched case insensitive
ok {test-number} - spec.getInvalidSpecs().empty() for: true
# Parsed tags are matched case insensitive
ok {test-number} - spec.matches( testCase ) for: true
# Parsing sharding-related cli flags
ok {test-number} - cli.parse({ "test", "--shard-count=8" }) for: {?}
# Parsing sharding-related cli flags
ok {test-number} - config.shardCount == 8 for: 8 == 8
# Parsing sharding-related cli flags
ok {test-number} - !(result) for: !{?}
# Parsing sharding-related cli flags
ok {test-number} - result.errorMessage(), ContainsSubstring("Shard count must be a positive number") for: "Shard count must be a positive number" contains: "Shard count must be a positive number"
# Parsing sharding-related cli flags
ok {test-number} - !(result) for: !{?}
# Parsing sharding-related cli flags
ok {test-number} - result.errorMessage(), ContainsSubstring("Shard count must be a positive number") for: "Shard count must be a positive number" contains: "Shard count must be a positive number"
# Parsing sharding-related cli flags
ok {test-number} - cli.parse({ "test", "--shard-index=2" }) for: {?}
# Parsing sharding-related cli flags
ok {test-number} - config.shardIndex == 2 for: 2 == 2
# Parsing sharding-related cli flags
ok {test-number} - !(result) for: !{?}
# Parsing sharding-related cli flags
ok {test-number} - result.errorMessage(), ContainsSubstring("Shard index must be a non-negative number") for: "Shard index must be a non-negative number" contains: "Shard index must be a non-negative number"
# Parsing sharding-related cli flags
ok {test-number} - cli.parse({ "test", "--shard-index=0" }) for: {?}
# Parsing sharding-related cli flags
ok {test-number} - config.shardIndex == 0 for: 0 == 0
# Parsing tags with non-alphabetical characters is pass-through
ok {test-number} - spec.hasFilters() for: true with 1 message: 'tagString := "[tag with spaces]"'
# Parsing tags with non-alphabetical characters is pass-through
ok {test-number} - spec.getInvalidSpecs().empty() for: true with 1 message: 'tagString := "[tag with spaces]"'
# Parsing tags with non-alphabetical characters is pass-through
ok {test-number} - spec.matches( testCase ) for: true with 1 message: 'tagString := "[tag with spaces]"'
# Parsing tags with non-alphabetical characters is pass-through
ok {test-number} - spec.hasFilters() for: true with 1 message: 'tagString := "[I said "good day" sir!]"'
# Parsing tags with non-alphabetical characters is pass-through
ok {test-number} - spec.getInvalidSpecs().empty() for: true with 1 message: 'tagString := "[I said "good day" sir!]"'
# Parsing tags with non-alphabetical characters is pass-through
ok {test-number} - spec.matches( testCase ) for: true with 1 message: 'tagString := "[I said "good day" sir!]"'
ok {test-number} - result.errorMessage(), ContainsSubstring("empty filename") for: "Reporter 'console' has empty filename specified as its output. Supply a filename or remove the colons to use the default output." contains: "empty filename"
ok {test-number} - result.errorMessage(), ContainsSubstring("Only one reporter may have unspecified output file.") for: "Only one reporter may have unspecified output file." contains: "Only one reporter may have unspecified output file."
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "-b"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.shouldDebugBreak == true for: true == true
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "--break"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.shouldDebugBreak for: true
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "-a"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.abortAfter == 1 for: 1 == 1
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "-x", "2"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.abortAfter == 2 for: 2 == 2
# Process can be configured on command line
ok {test-number} - !result for: true
# Process can be configured on command line
ok {test-number} - result.errorMessage(), ContainsSubstring("convert") && ContainsSubstring("oops") for: "Unable to convert 'oops' to destination type" ( contains: "convert" and contains: "oops" )
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) for: {?}
# Process can be configured on command line
ok {test-number} - config.waitForKeypress == std::get<1>(input) for: 0 == 0
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) for: {?}
# Process can be configured on command line
ok {test-number} - config.waitForKeypress == std::get<1>(input) for: 1 == 1
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) for: {?}
# Process can be configured on command line
ok {test-number} - config.waitForKeypress == std::get<1>(input) for: 2 == 2
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) for: {?}
# Process can be configured on command line
ok {test-number} - config.waitForKeypress == std::get<1>(input) for: 3 == 3
# Process can be configured on command line
ok {test-number} - !result for: true
# Process can be configured on command line
ok {test-number} - result.errorMessage(), ContainsSubstring("never") && ContainsSubstring("both") for: "keypress argument must be one of: never, start, exit or both. 'sometimes' not recognised" ( contains: "never" and contains: "both" )
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "-e"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.noThrow for: true
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "--nothrow"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.noThrow for: true
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "-o", "filename.ext"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.defaultOutputFilename == "filename.ext" for: "filename.ext" == "filename.ext"
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "--out", "filename.ext"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.defaultOutputFilename == "filename.ext" for: "filename.ext" == "filename.ext"
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "-abe"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.abortAfter == 1 for: 1 == 1
# Process can be configured on command line
ok {test-number} - config.shouldDebugBreak for: true
# Process can be configured on command line
ok {test-number} - config.noThrow == true for: true == true
# Process can be configured on command line
ok {test-number} - cli.parse({"test"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.useColour == UseColour::Auto for: 0 == 0
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "--use-colour", "auto"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.useColour == UseColour::Auto for: 0 == 0
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "--use-colour", "yes"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.useColour == UseColour::Yes for: 1 == 1
# Process can be configured on command line
ok {test-number} - cli.parse({"test", "--use-colour", "no"}) for: {?}
# Process can be configured on command line
ok {test-number} - config.useColour == UseColour::No for: 2 == 2
# Process can be configured on command line
ok {test-number} - !result for: true
# Process can be configured on command line
ok {test-number} - result.errorMessage(), ContainsSubstring( "colour mode must be one of" ) for: "colour mode must be one of: auto, yes or no. 'wrong' not recognised" contains: "colour mode must be one of"
# Process can be configured on command line
ok {test-number} - cli.parse({ "test", "--benchmark-samples=200" }) for: {?}
# Process can be configured on command line
ok {test-number} - config.benchmarkSamples == 200 for: 200 == 200
# Process can be configured on command line
ok {test-number} - cli.parse({ "test", "--benchmark-resamples=20000" }) for: {?}
# Reconstruction should be based on stringification: #914
not ok {test-number} - truthy(false) for: Hey, its truthy!
# Regex string matcher
not ok {test-number} - testStringForMatching(), Matches( "this STRING contains 'abc' as a substring" ) for: "this string contains 'abc' as a substring" matches "this STRING contains 'abc' as a substring" case sensitively
# Regex string matcher
not ok {test-number} - testStringForMatching(), Matches( "contains 'abc' as a substring" ) for: "this string contains 'abc' as a substring" matches "contains 'abc' as a substring" case sensitively
# Regex string matcher
not ok {test-number} - testStringForMatching(), Matches( "this string contains 'abc' as a" ) for: "this string contains 'abc' as a substring" matches "this string contains 'abc' as a" case sensitively
# Regression test #1
ok {test-number} - actual, !UnorderedEquals( expected ) for: { 'a', 'b' } not UnorderedEquals: { 'c', 'b' }
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
# Reporter's write listings to provided stream
ok {test-number} - listingString, ContainsSubstring("fakeTag"s) for: "All available tags: 1 [fakeTag] 1 tag " contains: "fakeTag" with 1 message: 'Tested reporter: Automake'
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
ok {test-number} - !(factories.empty()) for: !false
# Reporter's write listings to provided stream
ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: Automake'
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
# Reporter's write listings to provided stream
ok {test-number} - listingString, ContainsSubstring("fakeTag"s) for: "All available tags: 1 [fakeTag] 1 tag " contains: "fakeTag" with 1 message: 'Tested reporter: compact'
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
ok {test-number} - !(factories.empty()) for: !false
# Reporter's write listings to provided stream
ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: compact'
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
# Reporter's write listings to provided stream
ok {test-number} - listingString, ContainsSubstring("fakeTag"s) for: "All available tags: 1 [fakeTag] 1 tag " contains: "fakeTag" with 1 message: 'Tested reporter: console'
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
ok {test-number} - !(factories.empty()) for: !false
# Reporter's write listings to provided stream
ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: console'
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
# Reporter's write listings to provided stream
ok {test-number} - listingString, ContainsSubstring("fakeTag"s) for: "<?xml version="1.0" encoding="UTF-8"?> All available tags: 1 [fakeTag] 1 tag " contains: "fakeTag" with 1 message: 'Tested reporter: JUnit'
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
# Reporter's write listings to provided stream
ok {test-number} - listingString, ContainsSubstring("fake reporter"s) for: "<?xml version="1.0" encoding="UTF-8"?> Available reporters: fake reporter: fake description " contains: "fake reporter" with 1 message: 'Tested reporter: JUnit'
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
# Reporter's write listings to provided stream
ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "<?xml version="1.0" encoding="UTF-8"?> All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: JUnit'
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
# Reporter's write listings to provided stream
ok {test-number} - listingString, ContainsSubstring("fakeTag"s) for: "<?xml version="1.0" encoding="UTF-8"?> All available tags: 1 [fakeTag] 1 tag " contains: "fakeTag" with 1 message: 'Tested reporter: SonarQube'
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
# Reporter's write listings to provided stream
ok {test-number} - listingString, ContainsSubstring("fake reporter"s) for: "<?xml version="1.0" encoding="UTF-8"?> Available reporters: fake reporter: fake description " contains: "fake reporter" with 1 message: 'Tested reporter: SonarQube'
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
# Reporter's write listings to provided stream
ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "<?xml version="1.0" encoding="UTF-8"?> All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: SonarQube'
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
# Reporter's write listings to provided stream
ok {test-number} - listingString, ContainsSubstring("fakeTag"s) for: "All available tags: 1 [fakeTag] 1 tag " contains: "fakeTag" with 1 message: 'Tested reporter: TAP'
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
ok {test-number} - !(factories.empty()) for: !false
# Reporter's write listings to provided stream
ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: TAP'
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
# Reporter's write listings to provided stream
ok {test-number} - listingString, ContainsSubstring("fakeTag"s) for: "All available tags: 1 [fakeTag] 1 tag " contains: "fakeTag" with 1 message: 'Tested reporter: TeamCity'
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
ok {test-number} - !(factories.empty()) for: !false
# Reporter's write listings to provided stream
ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: TeamCity'
# Reporter's write listings to provided stream
ok {test-number} - !(factories.empty()) for: !false
# The default listing implementation write to provided stream
ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" )
# This test 'should' fail but doesn't
ok {test-number} - with 1 message: 'oops!'
# Thrown string literals are translated
not ok {test-number} - unexpected exception with message: 'For some reason someone is throwing a string literal!'
# Tracker
ok {test-number} - testCase.isOpen() for: true
# Tracker
ok {test-number} - s1.isOpen() for: true
# Tracker
ok {test-number} - s1.isSuccessfullyCompleted() for: true
# Tracker
ok {test-number} - testCase.isComplete() == false for: false == false
# Tracker
ok {test-number} - ctx.completedCycle() for: true
# Tracker
ok {test-number} - testCase.isSuccessfullyCompleted() for: true
# Tracker
ok {test-number} - testCase.isOpen() for: true
# Tracker
ok {test-number} - s1.isOpen() for: true
# Tracker
ok {test-number} - s1.isComplete() for: true
# Tracker
ok {test-number} - s1.isSuccessfullyCompleted() == false for: false == false
# Tracker
ok {test-number} - testCase.isComplete() == false for: false == false
# Tracker
ok {test-number} - ctx.completedCycle() for: true
# Tracker
ok {test-number} - testCase.isSuccessfullyCompleted() == false for: false == false
# Tracker
ok {test-number} - testCase2.isOpen() for: true
# Tracker
ok {test-number} - s1b.isOpen() == false for: false == false
# Tracker
ok {test-number} - ctx.completedCycle() for: true
# Tracker
ok {test-number} - testCase.isComplete() for: true
# Tracker
ok {test-number} - testCase.isSuccessfullyCompleted() for: true
# Tracker
ok {test-number} - testCase.isOpen() for: true
# Tracker
ok {test-number} - s1.isOpen() for: true
# Tracker
ok {test-number} - s1.isComplete() for: true
# Tracker
ok {test-number} - s1.isSuccessfullyCompleted() == false for: false == false
# Tracker
ok {test-number} - testCase.isComplete() == false for: false == false
# Tracker
ok {test-number} - ctx.completedCycle() for: true
# Tracker
ok {test-number} - testCase.isSuccessfullyCompleted() == false for: false == false
# Tracker
ok {test-number} - testCase2.isOpen() for: true
# Tracker
ok {test-number} - s1b.isOpen() == false for: false == false
# Tracker
ok {test-number} - s2.isOpen() for: true
# Tracker
ok {test-number} - ctx.completedCycle() for: true
# Tracker
ok {test-number} - testCase.isComplete() for: true
# Tracker
ok {test-number} - testCase.isSuccessfullyCompleted() for: true
# Tracker
ok {test-number} - testCase.isOpen() for: true
# Tracker
ok {test-number} - s1.isOpen() for: true
# Tracker
ok {test-number} - s2.isOpen() == false for: false == false
# Tracker
ok {test-number} - testCase.isComplete() == false for: false == false
# Tracker
ok {test-number} - testCase2.isOpen() for: true
# Tracker
ok {test-number} - s1b.isOpen() == false for: false == false
# Tracker
ok {test-number} - s2b.isOpen() for: true
# Tracker
ok {test-number} - ctx.completedCycle() == false for: false == false
# Tracker
ok {test-number} - ctx.completedCycle() for: true
# Tracker
ok {test-number} - s2b.isSuccessfullyCompleted() for: true
# Tracker
ok {test-number} - testCase2.isComplete() == false for: false == false
# Tracker
ok {test-number} - testCase2.isSuccessfullyCompleted() for: true
# Tracker
ok {test-number} - testCase.isOpen() for: true
# Tracker
ok {test-number} - s1.isOpen() for: true
# Tracker
ok {test-number} - s2.isOpen() == false for: false == false
# Tracker
ok {test-number} - testCase.isComplete() == false for: false == false
# Tracker
ok {test-number} - testCase2.isOpen() for: true
# Tracker
ok {test-number} - s1b.isOpen() == false for: false == false
# Tracker
ok {test-number} - s2b.isOpen() for: true
# Tracker
ok {test-number} - ctx.completedCycle() == false for: false == false
# Tracker
ok {test-number} - ctx.completedCycle() for: true
# Tracker
ok {test-number} - s2b.isComplete() for: true
# Tracker
ok {test-number} - s2b.isSuccessfullyCompleted() == false for: false == false
# Tracker
ok {test-number} - testCase2.isSuccessfullyCompleted() == false for: false == false
# Tracker
ok {test-number} - testCase3.isOpen() for: true
# Tracker
ok {test-number} - s1c.isOpen() == false for: false == false
# Tracker
ok {test-number} - s2c.isOpen() == false for: false == false
# Tracker
ok {test-number} - testCase3.isSuccessfullyCompleted() for: true
# Tracker
ok {test-number} - testCase.isOpen() for: true
# Tracker
ok {test-number} - s1.isOpen() for: true
# Tracker
ok {test-number} - s2.isOpen() for: true
# Tracker
ok {test-number} - s2.isComplete() for: true
# Tracker
ok {test-number} - s1.isComplete() == false for: false == false
# Tracker
ok {test-number} - s1.isComplete() for: true
# Tracker
ok {test-number} - testCase.isComplete() == false for: false == false
# Tracker
ok {test-number} - testCase.isComplete() for: true
# Trim strings
ok {test-number} - trim(std::string(no_whitespace)) == no_whitespace for: "There is no extra whitespace here" == "There is no extra whitespace here"
# Trim strings
ok {test-number} - trim(std::string(leading_whitespace)) == no_whitespace for: "There is no extra whitespace here" == "There is no extra whitespace here"
# Trim strings
ok {test-number} - trim(std::string(trailing_whitespace)) == no_whitespace for: "There is no extra whitespace here" == "There is no extra whitespace here"
# Trim strings
ok {test-number} - trim(std::string(whitespace_at_both_ends)) == no_whitespace for: "There is no extra whitespace here" == "There is no extra whitespace here"
# Trim strings
ok {test-number} - trim(StringRef(no_whitespace)) == StringRef(no_whitespace) for: There is no extra whitespace here == There is no extra whitespace here
# Trim strings
ok {test-number} - trim(StringRef(leading_whitespace)) == StringRef(no_whitespace) for: There is no extra whitespace here == There is no extra whitespace here
# Trim strings
ok {test-number} - trim(StringRef(trailing_whitespace)) == StringRef(no_whitespace) for: There is no extra whitespace here == There is no extra whitespace here
# Trim strings
ok {test-number} - trim(StringRef(whitespace_at_both_ends)) == StringRef(no_whitespace) for: There is no extra whitespace here == There is no extra whitespace here
# Unexpected exceptions can be translated
not ok {test-number} - unexpected exception with message: '3.14'
ok {test-number} - encode( stringWithQuotes ) == stringWithQuotes for: "don't "quote" me on that" == "don't "quote" me on that"
# XmlEncode
ok {test-number} - encode( stringWithQuotes, Catch::XmlEncode::ForAttributes ) == "don't "quote" me on that" for: "don't "quote" me on that" == "don't "quote" me on that"