| 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 |