GCC Code Coverage Report


Directory: ./
File: tests/TestHelpers.cpp
Date: 2023-01-04 16:32:12
Exec Total Coverage
Lines: 58 58 100.0%
Functions: 9 9 100.0%
Branches: 131 349 37.5%

Line Branch Exec Source
1 #include <vector>
2
3 #include "TestCommon.h"
4
5 // ################################################################################################
6 // HELPERS
7 // ################################################################################################
8 8 TEST(CXXIter, unzip) {
9
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input = {1.0f, 2.0f, 0.5f, 3.0f, -42.0f};
10
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::vector<std::pair<size_t, float>> output = CXXIter::from(input).copied()
11
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .indexed()
12
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 .sortBy<CXXIter::DESCENDING>(CXXIter::fn::unzip<1>())
13
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
14
3/12
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
2 ASSERT_EQ(input.size(), output.size());
15
10/26
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
2 ASSERT_THAT(output, ElementsAre(Pair(3, 3.0f), Pair(1, 2.0f), Pair(0, 1.0f), Pair(2, 0.5f), Pair(4, -42.0f)));
16
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
17
18 8 TEST(CXXIter, tryDynCast) {
19 struct Parent {
20 6 virtual ~Parent() {}
21 };
22 struct Child1 : public Parent {
23 std::string id;
24
1/2
✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
6 Child1(const std::string& id) : id(id) {}
25 };
26 struct Child2 : public Parent {};
27
28 { // normal
29
9/18
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
4 std::vector<Parent*> input = { new Parent(), new Child1("0"), new Child1("1"), new Child2() };
30
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<Child1*> output = CXXIter::from(input)
31
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 .filterMap(CXXIter::fn::tryDynCast<Child1*>())
32
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
33
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(output.size(), 2);
34
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(output[0]->id, "0");
35
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(output[1]->id, "1");
36
3/5
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
4 CXXIter::from(output).forEach([](auto ptr) { delete ptr; });
37
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
38 { // const
39
9/18
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
4 std::vector<const Parent*> input = { new Parent(), new Child1("0"), new Child1("1"), new Child2() };
40
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<const Child1*> output = CXXIter::from(input)
41
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 .filterMap(CXXIter::fn::tryDynCast<const Child1*>())
42
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
43
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(output.size(), 2);
44
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(output[0]->id, "0");
45
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(output[1]->id, "1");
46
3/5
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
4 CXXIter::from(output).forEach([](auto ptr) { delete ptr; });
47
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
48 { // volatile
49
9/18
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
4 std::vector<volatile Parent*> input = { new Parent(), new Child1("0"), new Child1("1"), new Child2() };
50
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<volatile Child1*> output = CXXIter::from(input)
51
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 .filterMap(CXXIter::fn::tryDynCast<volatile Child1*>())
52
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
53
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(output.size(), 2);
54
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(const_cast<std::string&>(output[0]->id), "0");
55
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(const_cast<std::string&>(output[1]->id), "1");
56
3/5
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
4 CXXIter::from(output).forEach([](auto ptr) { delete ptr; });
57
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
58 }
59
60 8 TEST(CXXIter, filterIsOneOf) {
61 enum class CakeType { Sacher, ButterCake, CheeseCake, ChocolateCake, StrawberryCake };
62 struct Cake {
63 CakeType type;
64 float volume;
65
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 bool operator==(const Cake& o) const { return o.type == type && o.volume == volume; }
66 };
67
68 std::vector<Cake> input = {
69 { CakeType::Sacher, 1.33f }, { CakeType::CheeseCake, 5.0f },
70 { CakeType::ButterCake, 2.33f }, { CakeType::Sacher, 42.0f },
71 { CakeType::StrawberryCake, 1.6f }, { CakeType::ChocolateCake, 55.0f },
72 { CakeType::Sacher, 3.63f }, { CakeType::StrawberryCake, 14.0f }
73
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 };
74 {
75
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<Cake> output = CXXIter::from(input)
76
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
4 .filter(CXXIter::fn::filterIsOneOf(
77 8 [](const Cake& cake) { return cake.type; },
78 {CakeType::Sacher, CakeType::ChocolateCake}
79 ))
80
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
81
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(output.size(), 4);
82
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
2 ASSERT_THAT(output, ElementsAre( Cake {CakeType::Sacher, 1.33f}, Cake {CakeType::Sacher, 42.0f},
83
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Cake {CakeType::ChocolateCake, 55.0f}, Cake {CakeType::Sacher, 3.63f} ));
84
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
85 {
86
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<CakeType> output = CXXIter::from(input)
87
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
10 .map([](const Cake& cake) { return cake.type; })
88
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
4 .filter(CXXIter::fn::filterIsOneOf({CakeType::Sacher, CakeType::ChocolateCake}))
89
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
90
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(output.size(), 4);
91
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
2 ASSERT_THAT(output, ElementsAre( CakeType::Sacher, CakeType::Sacher, CakeType::ChocolateCake, CakeType::Sacher ));
92
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
93
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
94