mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 04:07:10 +01:00 
			
		
		
		
	Redo generator interface
This commit is contained in:
		| @@ -57,106 +57,87 @@ Tricky.tests.cpp:<line number>: passed: !is_true<false>::value for: true | ||||
| Tricky.tests.cpp:<line number>: passed: !!is_true<true>::value for: true | ||||
| Tricky.tests.cpp:<line number>: passed: is_true<true>::value for: true | ||||
| Tricky.tests.cpp:<line number>: passed: !(is_true<false>::value) for: !false | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 101 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 102 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 103 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 104 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 105 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 106 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 107 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 108 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 109 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 110 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 101 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 102 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 103 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 104 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 105 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 106 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 107 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 108 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 109 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 110 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 101 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 102 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 103 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 104 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 105 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 106 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 107 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 108 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 109 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 110 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 4 < 101 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 4 < 102 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 4 < 103 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 4 < 104 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 4 < 105 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 4 < 106 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 4 < 107 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 4 < 108 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 4 < 109 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 4 < 110 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 5 < 101 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 5 < 102 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 5 < 103 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 5 < 104 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 5 < 105 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 5 < 106 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 5 < 107 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 5 < 108 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 5 < 109 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 5 < 110 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 6 < 101 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 6 < 102 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 6 < 103 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 6 < 104 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 6 < 105 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 6 < 106 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 6 < 107 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 6 < 108 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 6 < 109 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 6 < 110 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 7 < 101 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 7 < 102 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 7 < 103 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 7 < 104 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 7 < 105 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 7 < 106 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 7 < 107 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 7 < 108 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 7 < 109 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 7 < 110 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 8 < 101 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 8 < 102 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 8 < 103 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 8 < 104 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 8 < 105 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 8 < 106 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 8 < 107 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 8 < 108 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 8 < 109 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 8 < 110 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 9 < 101 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 9 < 102 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 9 < 103 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 9 < 104 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 9 < 105 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 9 < 106 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 9 < 107 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 9 < 108 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 9 < 109 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 9 < 110 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 10 < 101 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 10 < 102 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 10 < 103 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 10 < 104 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 10 < 105 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 10 < 106 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 10 < 107 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 10 < 108 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 10 < 109 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 10 < 110 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 4 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 4 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 1 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 4 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 4 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 1 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 4 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 4 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 1 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 5 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 5 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 1 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 5 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 5 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 1 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 5 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 5 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 1 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 6 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 6 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 1 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 6 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 6 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 1 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 1 < 6 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 6 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 1 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 4 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 4 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 2 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 4 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 4 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 2 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 4 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 4 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 2 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 5 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 5 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 2 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 5 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 5 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 2 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 5 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 5 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 2 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 6 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 6 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 2 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 6 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 6 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 2 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 2 < 6 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 6 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 2 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 4 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 4 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 3 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 4 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 4 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 3 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 4 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 4 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 3 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 5 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 5 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 3 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 5 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 5 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 3 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 5 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 5 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 3 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 6 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 6 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 3 < 7 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 6 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 6 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 3 < 8 | ||||
| Generators.tests.cpp:<line number>: passed: x < y for: 3 < 6 | ||||
| Generators.tests.cpp:<line number>: passed: y < z for: 6 < 9 | ||||
| Generators.tests.cpp:<line number>: passed: x < z for: 3 < 9 | ||||
| Class.tests.cpp:<line number>: failed: s == "world" for: "hello" == "world" | ||||
| Class.tests.cpp:<line number>: passed: s == "hello" for: "hello" == "hello" | ||||
| Class.tests.cpp:<line number>: failed: Template_Fixture_2<TestType>::m_a.size() == 1 for: 0 == 1 | ||||
| @@ -418,48 +399,49 @@ Matchers.tests.cpp:<line number>: passed: WithinAbs(1.f, 0.f) | ||||
| Matchers.tests.cpp:<line number>: passed: WithinAbs(1.f, -1.f), std::domain_error | ||||
| Matchers.tests.cpp:<line number>: passed: WithinULP(1.f, 0) | ||||
| Matchers.tests.cpp:<line number>: passed: WithinULP(1.f, -1), std::domain_error | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "a"' and 'j := 8' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "a"' and 'j := 9' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "a"' and 'j := 10' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "a"' and 'j := 2' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "a"' and 'j := 3.141' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "a"' and 'j := 1.379' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "b"' and 'j := 8' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "b"' and 'j := 9' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "b"' and 'j := 10' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "b"' and 'j := 2' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "b"' and 'j := 3.141' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "b"' and 'j := 1.379' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "c"' and 'j := 8' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "c"' and 'j := 9' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "c"' and 'j := 10' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "c"' and 'j := 2' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "c"' and 'j := 3.141' | ||||
| Generators.tests.cpp:<line number>: passed: with 2 messages: 'i := "c"' and 'j := 1.379' | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.size() == 2 for: 2 == 2 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen[0] == 1 for: 1 == 1 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen[1] == 2 for: 2 == 2 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.size() == 4 for: 4 == 4 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen[0] == 3 for: 3 == 3 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen[1] == 1 for: 1 == 1 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen[2] == 4 for: 4 == 4 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen[3] == 1 for: 1 == 1 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.size() == 4 for: 4 == 4 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen[0] == 1 for: 1 == 1 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen[1] == 2 for: 2 == 2 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen[2] == 9 for: 9 == 9 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen[3] == 7 for: 7 == 7 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.size() == 2 for: 2 == 2 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen[0] == 3 for: 3 == 3 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen[1] == 1 for: 1 == 1 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.size() == 2 for: 2 == 2 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen[0] == 3 for: 3 == 3 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen[1] == 1 for: 1 == 1 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: base->size() == 4 for: 4 == 4 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: typed for: 0x<hex digits> | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: typed->size() == 4 for: 4 == 4 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: (*typed)[0] == 7 for: 7 == 7 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: (*typed)[3] == 11 for: 11 == 11 | ||||
| Generators.tests.cpp:<line number>: passed: j < i for: -3 < 1 | ||||
| Generators.tests.cpp:<line number>: passed: j < i for: -2 < 1 | ||||
| Generators.tests.cpp:<line number>: passed: j < i for: -1 < 1 | ||||
| Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 4 > 1 | ||||
| Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 4 > 2 | ||||
| Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 4 > 3 | ||||
| Generators.tests.cpp:<line number>: passed: j < i for: -3 < 2 | ||||
| Generators.tests.cpp:<line number>: passed: j < i for: -2 < 2 | ||||
| Generators.tests.cpp:<line number>: passed: j < i for: -1 < 2 | ||||
| Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 8 > 1 | ||||
| Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 8 > 2 | ||||
| Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 8 > 3 | ||||
| Generators.tests.cpp:<line number>: passed: j < i for: -3 < 3 | ||||
| Generators.tests.cpp:<line number>: passed: j < i for: -2 < 3 | ||||
| Generators.tests.cpp:<line number>: passed: j < i for: -1 < 3 | ||||
| Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 12 > 1 | ||||
| Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 12 > 2 | ||||
| Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 12 > 3 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 123 for: 123 == 123 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: !(gen.next()) for: !false | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 1 for: 1 == 1 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 3 for: 3 == 3 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 5 for: 5 == 5 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: !(gen.next()) for: !false | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 1 for: 1 == 1 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 5 for: 5 == 5 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 2 for: 2 == 2 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 4 for: 4 == 4 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 0 for: 0 == 0 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: !(gen.next()) for: !false | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.get().size() == 2 for: 2 == 2 | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == "aa" for: "aa" == "aa" | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == "bb" for: "bb" == "bb" | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.next() for: true | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == "cc" for: "cc" == "cc" | ||||
| GeneratorsImpl.tests.cpp:<line number>: passed: !(gen.next()) for: !false | ||||
| Approx.tests.cpp:<line number>: passed: d >= Approx( 1.22 ) for: 1.23 >= Approx( 1.22 ) | ||||
| Approx.tests.cpp:<line number>: passed: d >= Approx( 1.23 ) for: 1.23 >= Approx( 1.23 ) | ||||
| Approx.tests.cpp:<line number>: passed: !(d >= Approx( 1.24 )) for: !(1.23 >= Approx( 1.24 )) | ||||
| @@ -1274,6 +1256,10 @@ Generators.tests.cpp:<line number>: passed: data.str.size() == data.len for: 3 = | ||||
| Generators.tests.cpp:<line number>: passed: data.str.size() == data.len for: 3 == 3 | ||||
| Generators.tests.cpp:<line number>: passed: data.str.size() == data.len for: 5 == 5 | ||||
| Generators.tests.cpp:<line number>: passed: data.str.size() == data.len for: 4 == 4 | ||||
| Generators.tests.cpp:<line number>: passed: strlen(std::get<0>(data)) == static_cast<size_t>(std::get<1>(data)) for: 5 == 5 | ||||
| Generators.tests.cpp:<line number>: passed: strlen(std::get<0>(data)) == static_cast<size_t>(std::get<1>(data)) for: 6 == 6 | ||||
| Generators.tests.cpp:<line number>: passed: strlen(std::get<0>(data)) == static_cast<size_t>(std::get<1>(data)) for: 5 == 5 | ||||
| Generators.tests.cpp:<line number>: passed: strlen(std::get<0>(data)) == static_cast<size_t>(std::get<1>(data)) for: 6 == 6 | ||||
| Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'Why would you throw a std::string?' | ||||
| Misc.tests.cpp:<line number>: passed: result == "\"wide load\"" for: ""wide load"" == ""wide load"" | ||||
| Misc.tests.cpp:<line number>: passed: result == "\"wide load\"" for: ""wide load"" == ""wide load"" | ||||
|   | ||||
| @@ -1170,6 +1170,6 @@ due to unexpected exception with message: | ||||
|   Why would you throw a std::string? | ||||
|  | ||||
| =============================================================================== | ||||
| test cases:  243 |  183 passed |  56 failed |  4 failed as expected | ||||
| assertions: 1262 | 1126 passed | 115 failed | 21 failed as expected | ||||
| test cases:  244 |  184 passed |  56 failed |  4 failed as expected | ||||
| assertions: 1248 | 1112 passed | 115 failed | 21 failed as expected | ||||
|  | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,7 +1,7 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <testsuitesloose text artifact | ||||
| > | ||||
|   <testsuite name="<exe-name>" errors="17" failures="113" tests="1277" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}"> | ||||
|   <testsuite name="<exe-name>" errors="17" failures="113" tests="1263" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}"> | ||||
|     <testcase classname="<exe-name>.global" name="# A test name that starts with a #" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="#1005: Comparing pointer to int and long (NULL can be either on various systems)" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="#1027" time="{duration}"/> | ||||
| @@ -70,7 +70,7 @@ Condition.tests.cpp:<line number> | ||||
|     <testcase classname="<exe-name>.global" name="(unimplemented) static bools can be evaluated/negation" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="(unimplemented) static bools can be evaluated/double negation" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="(unimplemented) static bools can be evaluated/direct" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="10x10 ints" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="3x3x3 ints" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.TestClass" name="A METHOD_AS_TEST_CASE based test run that fails" time="{duration}"> | ||||
|       <failure message=""hello" == "world"" type="REQUIRE"> | ||||
| Class.tests.cpp:<line number> | ||||
| @@ -339,14 +339,12 @@ Message.tests.cpp:<line number> | ||||
|     <testcase classname="<exe-name>.global" name="Floating point matchers: float/ULPs" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Floating point matchers: float/Composed" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Floating point matchers: float/Constructor validation" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Generators/one" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Generators/two" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Generators impl/range" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Generators impl/fixed values" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Generators impl/combined" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Generators impl/values" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Generators impl/values2" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Generators impl/type erasure" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Generators -- simple/one" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Generators -- simple/two" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Generators internals/Single value" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Generators internals/Preset values" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Generators internals/Generator combinator" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Generators internals/Explicitly typed generator sequence" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Greater-than inequalities with different epsilons" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="INFO and WARN do not abort tests" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="INFO gets logged on failure" time="{duration}"> | ||||
| @@ -938,6 +936,7 @@ Tricky.tests.cpp:<line number> | ||||
|     <testcase classname="<exe-name>.global" name="stringify( vectors<has_maker_and_operator> )" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="stringify( vectors<has_operator> )" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="strlen3" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="tables" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="thrown std::strings are translated" time="{duration}"> | ||||
|       <error type="TEST_CASE"> | ||||
| Why would you throw a std::string? | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,93 +1,46 @@ | ||||
| #include "catch.hpp" | ||||
|  | ||||
| // Tests of generartor implementation details | ||||
|  | ||||
| TEST_CASE("Generators impl", "[impl]") { | ||||
| // Tests of generator implementation details | ||||
| TEST_CASE("Generators internals", "[generators][internals]") { | ||||
|     using namespace Catch::Generators; | ||||
|  | ||||
|     SECTION( "range" ) { | ||||
|         auto gen = range(1,3); | ||||
|  | ||||
|         CHECK( gen.size() == 2 ); | ||||
|  | ||||
|         CHECK( gen[0] == 1 ); | ||||
|         CHECK( gen[1] == 2 ); | ||||
|     SECTION("Single value") { | ||||
|         auto gen = value(123); | ||||
|         REQUIRE(gen.get() == 123); | ||||
|         REQUIRE_FALSE(gen.next()); | ||||
|     } | ||||
|     SECTION( "fixed values" ) { | ||||
|         auto gen = values( { 3, 1, 4, 1 } ); | ||||
|  | ||||
|         CHECK( gen.size() == 4 ); | ||||
|         CHECK( gen[0] == 3 ); | ||||
|         CHECK( gen[1] == 1 ); | ||||
|         CHECK( gen[2] == 4 ); | ||||
|         CHECK( gen[3] == 1 ); | ||||
|     SECTION("Preset values") { | ||||
|         auto gen = values({ 1, 3, 5 }); | ||||
|         REQUIRE(gen.get() == 1); | ||||
|         REQUIRE(gen.next()); | ||||
|         REQUIRE(gen.get() == 3); | ||||
|         REQUIRE(gen.next()); | ||||
|         REQUIRE(gen.get() == 5); | ||||
|         REQUIRE_FALSE(gen.next()); | ||||
|     } | ||||
|     SECTION( "combined" ) { | ||||
|         auto gen = makeGenerators( range( 1, 3 ), values( { 9, 7 } ) ); | ||||
|  | ||||
|         CHECK( gen.size() == 4 ); | ||||
|         CHECK( gen[0] == 1 ); | ||||
|         CHECK( gen[1] == 2 ); | ||||
|         CHECK( gen[2] == 9 ); | ||||
|         CHECK( gen[3] == 7 ); | ||||
|     SECTION("Generator combinator") { | ||||
|         auto gen = makeGenerators(1, 5, values({ 2, 4 }), 0); | ||||
|         REQUIRE(gen.get() == 1); | ||||
|         REQUIRE(gen.next()); | ||||
|         REQUIRE(gen.get() == 5); | ||||
|         REQUIRE(gen.next()); | ||||
|         REQUIRE(gen.get() == 2); | ||||
|         REQUIRE(gen.next()); | ||||
|         REQUIRE(gen.get() == 4); | ||||
|         REQUIRE(gen.next()); | ||||
|         REQUIRE(gen.get() == 0); | ||||
|         REQUIRE_FALSE(gen.next()); | ||||
|     } | ||||
|  | ||||
|     SECTION( "values" ) { | ||||
|         auto gen = makeGenerators( 3, 1 ); | ||||
|  | ||||
|         CHECK( gen.size() == 2 ); | ||||
|         CHECK( gen[0] == 3 ); | ||||
|         CHECK( gen[1] == 1 ); | ||||
|     } | ||||
|     SECTION( "values2" ) { | ||||
|         auto gen = makeGenerators( 3, 1 ); | ||||
|  | ||||
|         CHECK( gen.size() == 2 ); | ||||
|         CHECK( gen[0] == 3 ); | ||||
|         CHECK( gen[1] == 1 ); | ||||
|     } | ||||
|  | ||||
|  | ||||
|     SECTION( "type erasure" ) { | ||||
|         auto gen = makeGenerators( range( 7, 10 ), 11 ); | ||||
|  | ||||
|         // Make type erased version | ||||
|         auto dynCopy = pf::make_unique<Generators<int>>( std::move( gen ) ); | ||||
|         std::unique_ptr<GeneratorBase const> base = std::move( dynCopy ); | ||||
|  | ||||
|         // Only thing we can do is ask for the size | ||||
|         CHECK( base->size() == 4 ); | ||||
|  | ||||
|         // Restore typed version | ||||
|         auto typed = dynamic_cast<Generators<int> const*>( base.get() ); | ||||
|         REQUIRE( typed ); | ||||
|         CHECK( typed->size() == 4 ); | ||||
|         CHECK( (*typed)[0] == 7 ); | ||||
|         CHECK( (*typed)[3] == 11 ); | ||||
|     } | ||||
| } | ||||
|  | ||||
| TEST_CASE("Generators impl - random", "[approvals]") { | ||||
|     using namespace Catch::Generators; | ||||
|  | ||||
|     SECTION( "random range" ) { | ||||
|         auto gen = random( 3, 9 ); | ||||
|  | ||||
|         CHECK( gen.size() == 6 ); | ||||
|         for( size_t i = 0; i < 6; ++i ) { | ||||
|             CHECK( gen[i] >= 3 ); | ||||
|             CHECK( gen[i] <= 8 ); | ||||
|             if( i > 0 ) | ||||
|                 CHECK( gen[i] != gen[i-1] ); | ||||
|         } | ||||
|     } | ||||
|     SECTION( "random selection" ) { | ||||
|         auto gen = random<int>( 10 ); | ||||
|  | ||||
|         CHECK( gen.size() == 10 ); | ||||
|         for( size_t i = 0; i < 10; ++i ) { | ||||
|             if( i > 0 ) | ||||
|                 CHECK( gen[i] != gen[i-1] ); | ||||
|         } | ||||
|     SECTION("Explicitly typed generator sequence") { | ||||
|         auto gen = makeGenerators(as<std::string>{}, "aa", "bb", "cc"); | ||||
|         // This just checks that the type is std::string: | ||||
|         REQUIRE(gen.get().size() == 2); | ||||
|         // Iterate over the generator | ||||
|         REQUIRE(gen.get() == "aa"); | ||||
|         REQUIRE(gen.next()); | ||||
|         REQUIRE(gen.get() == "bb"); | ||||
|         REQUIRE(gen.next()); | ||||
|         REQUIRE(gen.get() == "cc"); | ||||
|         REQUIRE_FALSE(gen.next()); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,53 +1,58 @@ | ||||
| #include "catch.hpp" | ||||
|  | ||||
| // Examples of usage of Generators | ||||
| #include <cstring> | ||||
|  | ||||
| // This test doesn't do much - it just shows how you can have several generators, of different | ||||
| // types (ie `i` and `j` are different types), can be sequenced using `,` and | ||||
| // can be expressed as named generators (like range) or as individual values. | ||||
| // Generators can be mixed with SECTIONs. | ||||
| // At time of writing the generated values are not automatically reported as part of the test | ||||
| // name or associated values - so we explicitly CAPTURE then (run this with `-s` to see them). | ||||
| // We could also incorporate them into the section names using DYNAMIC_SECTION. See the BDD | ||||
| // example later for more information. | ||||
| TEST_CASE("Generators") { | ||||
|  | ||||
|     auto i = GENERATE( as<std::string>(), "a", "b", "c" ); | ||||
|  | ||||
|     SECTION( "one" ) { | ||||
|         auto j = GENERATE( range( 8, 11 ), 2 ); | ||||
|  | ||||
|         CAPTURE( i, j ); | ||||
|         SUCCEED(); | ||||
| // Generators and sections can be nested freely | ||||
| TEST_CASE("Generators -- simple", "[generators]") { | ||||
|     auto i = GENERATE(1, 2, 3); | ||||
|     SECTION("one") { | ||||
|         auto j = GENERATE(values({ -3, -2, -1 })); | ||||
|         REQUIRE(j < i); | ||||
|     } | ||||
|     SECTION( "two" ) { | ||||
|         auto j = GENERATE( 3.141, 1.379 ); | ||||
|         CAPTURE( i, j ); | ||||
|         SUCCEED(); | ||||
|  | ||||
|     SECTION("two") { | ||||
|         // You can also explicitly set type for generators via Catch::Generators::as | ||||
|         auto str = GENERATE(as<std::string>{}, "a", "bb", "ccc"); | ||||
|         REQUIRE(4u * i > str.size()); | ||||
|     } | ||||
| } | ||||
|  | ||||
| // This one generates the cross-product of two ranges. | ||||
| // It's mostly here to demonstrate the performance which, at time of writing, | ||||
| // leaves a lot to be desired. | ||||
| TEST_CASE( "100x100 ints", "[.][approvals]" ) { | ||||
|     auto x = GENERATE( range( 0,100 ) ); | ||||
|     auto y = GENERATE( range( 200,300 ) ); | ||||
|  | ||||
|     CHECK( x < y ); | ||||
| // You can create a cartesian-product of generators by creating multiple ones | ||||
| TEST_CASE("3x3x3 ints", "[generators]") { | ||||
|     auto x = GENERATE(1, 2, 3); | ||||
|     auto y = GENERATE(4, 5, 6); | ||||
|     auto z = GENERATE(7, 8, 9); | ||||
|     // These assertions will be run 27 times (3x3x3) | ||||
|     CHECK(x < y); | ||||
|     CHECK(y < z); | ||||
|     REQUIRE(x < z); | ||||
| } | ||||
|  | ||||
| // smaller version | ||||
| TEST_CASE( "10x10 ints" ) { | ||||
|     auto x = GENERATE( range( 1,11 ) ); | ||||
|     auto y = GENERATE( range( 101, 111 ) ); | ||||
| // You can also create data tuples | ||||
| TEST_CASE("tables", "[generators]") { | ||||
|     // Note that this will not compile with libstdc++ older than libstdc++6 | ||||
|     // See https://stackoverflow.com/questions/12436586/tuple-vector-and-initializer-list | ||||
|     // for possible workarounds | ||||
|     //    auto data = GENERATE(table<char const*, int>({ | ||||
|     //        {"first", 5}, | ||||
|     //        {"second", 6}, | ||||
|     //        {"third", 5}, | ||||
|     //        {"etc...", 6} | ||||
|     //    })); | ||||
|  | ||||
|     CHECK( x < y ); | ||||
|     // Workaround for the libstdc++ bug mentioned above | ||||
|     using tuple_type = std::tuple<char const*, int>; | ||||
|     auto data = GENERATE(table<char const*, int>({ | ||||
|         tuple_type{"first", 5}, | ||||
|         tuple_type{"second", 6}, | ||||
|         tuple_type{"third", 5}, | ||||
|         tuple_type{"etc...", 6} | ||||
|     })); | ||||
|  | ||||
|     REQUIRE(strlen(std::get<0>(data)) == static_cast<size_t>(std::get<1>(data))); | ||||
| } | ||||
|  | ||||
| // Some of the following tests use structured bindings for convenience and so are | ||||
| // conditionally compiled using the de-facto (and soon to be formally) standard | ||||
| // feature macros | ||||
|  | ||||
| #ifdef __cpp_structured_bindings | ||||
|  | ||||
| @@ -56,7 +61,7 @@ TEST_CASE( "10x10 ints" ) { | ||||
| // but it demonstrates a possible usage. | ||||
| // Spelling out the pair like this is a bit verbose, so read on for better examples | ||||
| // - the use of structured bindings here is an optional convenience | ||||
| TEST_CASE( "strlen", "[approvals]" ) { | ||||
| TEST_CASE( "strlen", "[approvals][generators]" ) { | ||||
|     auto [test_input, expected] = GENERATE( values<std::pair<std::string_view, size_t>>({ | ||||
|             {"one", 3}, | ||||
|             {"two", 3}, | ||||
| @@ -69,7 +74,7 @@ TEST_CASE( "strlen", "[approvals]" ) { | ||||
|  | ||||
| // A nicer way to do pairs (or more) of values - using the table generator. | ||||
| // Note, you must specify the types up-front. | ||||
| TEST_CASE( "strlen2", "[approvals]" ) { | ||||
| TEST_CASE( "strlen2", "[approvals][generators]" ) { | ||||
|     auto [test_input, expected] = GENERATE( table<std::string, size_t>({ | ||||
|             {"one", 3}, | ||||
|             {"two", 3}, | ||||
| @@ -81,11 +86,11 @@ TEST_CASE( "strlen2", "[approvals]" ) { | ||||
| } | ||||
| #endif | ||||
|  | ||||
| // An alternate way of doing data tables without structure bindings | ||||
| // - I'd prefer to have the Data class within the test case but gcc 4.x doesn't seem to like it | ||||
|  | ||||
| // An alternate way of doing data tables without structured bindings | ||||
| struct Data { std::string str; size_t len; }; | ||||
|  | ||||
| TEST_CASE( "strlen3" ) { | ||||
| TEST_CASE( "strlen3", "[generators]" ) { | ||||
|     auto data = GENERATE( values<Data>({ | ||||
|             {"one", 3}, | ||||
|             {"two", 3}, | ||||
| @@ -96,15 +101,7 @@ TEST_CASE( "strlen3" ) { | ||||
|     REQUIRE( data.str.size() == data.len ); | ||||
| } | ||||
|  | ||||
| // A nod towards property-based testing - generate a random selection of numbers | ||||
| // in a range and assert on global properties those numbers. | ||||
| static auto square( int i ) -> int { return i*i; } | ||||
|  | ||||
| TEST_CASE( "Random numbers in a range", "[.][approvals]" ) { | ||||
|     auto x = GENERATE( random( -10000, 10000 ) ); | ||||
|     CAPTURE( x ); | ||||
|     REQUIRE( square(x) >= 0 ); | ||||
| } | ||||
|  | ||||
| #ifdef __cpp_structured_bindings | ||||
|  | ||||
| @@ -118,7 +115,7 @@ TEST_CASE( "Random numbers in a range", "[.][approvals]" ) { | ||||
|  | ||||
| static auto eatCucumbers( int start, int eat ) -> int { return start-eat; } | ||||
|  | ||||
| SCENARIO("Eating cucumbers", "[approvals]") { | ||||
| SCENARIO("Eating cucumbers", "[generators][approvals]") { | ||||
|  | ||||
|     auto [start, eat, left] = GENERATE( table<int,int,int> ({ | ||||
|             { 12, 5, 7 }, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Martin Hořeňovský
					Martin Hořeňovský