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 |