GCC Code Coverage Report


Directory: ./
File: tests/TestRandomAccess.cpp
Date: 2023-01-04 16:32:12
Exec Total Coverage
Lines: 88 88 100.0%
Functions: 21 21 100.0%
Branches: 215 654 32.9%

Line Branch Exec Source
1 #include <iostream>
2 #include <vector>
3 #include <functional>
4 #include <string>
5 #include <optional>
6 #include <set>
7 #include <map>
8 #include <list>
9 #include <deque>
10 #include <unordered_set>
11 #include <unordered_map>
12
13 #include "TestCommon.h"
14
15 using namespace CXXIter;
16
17
18 8 TEST(CXXIter, randomAccessSources) {
19 { // SrcCRef
20 {
21
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input = {1.337f, 1.338f, 1.339f, 1.340f, 1.350f};
22
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto src = SrcCRef(input);
23
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_EQ(src.next().value(), 1.337f);
24
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 src.advanceBy(2);
25
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_EQ(src.next().value(), 1.340f);
26
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_EQ(src.next().value(), 1.350f);
27
3/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
2 ASSERT_FALSE(src.next().has_value());
28
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
29 }
30 { // SrcRef
31 {
32
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input = {1.337f, 1.338f, 1.339f, 1.340f, 1.350f};
33
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto src = SrcRef(input);
34
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_EQ(src.next().value(), 1.337f);
35
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 src.advanceBy(2);
36
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_EQ(src.next().value(), 1.340f);
37
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_EQ(src.next().value(), 1.350f);
38
3/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
2 ASSERT_FALSE(src.next().has_value());
39
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
40 }
41 { // SrcMov
42 {
43
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input = {1.337f, 1.338f, 1.339f, 1.340f, 1.350f};
44
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 auto src = SrcMov(std::move(input));
45
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_EQ(src.next().value(), 1.337f);
46
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 src.advanceBy(2);
47
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_EQ(src.next().value(), 1.340f);
48
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_EQ(src.next().value(), 1.350f);
49
3/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
2 ASSERT_FALSE(src.next().has_value());
50
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
51 }
52 }
53
54 8 TEST(CXXIter, randomAccessCast) {
55
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input = {1.337f, 2.338f, 3.339f, 4.340f, 5.350f};
56
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 auto src = CXXIter::from(std::move(input)).cast<size_t>();
57
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_EQ(src.next().value(), 1);
58
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 src.advanceBy(2);
59
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_EQ(src.next().value(), 4);
60
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_EQ(src.next().value(), 5);
61
3/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
2 ASSERT_FALSE(src.next().has_value());
62
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
63
64 8 TEST(CXXIter, randomAccessChainer) {
65
3/6
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
10 std::vector<std::string> input1 = {"1337", "42"};
66
4/8
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
12 std::vector<std::string> input2 = {"31337", "64", "69"};
67
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 auto src = CXXIter::from(std::move(input1))
68
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
4 .chain(CXXIter::from(std::move(input2)));
69
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.
4 ASSERT_EQ(src.next().value(), "1337");
70
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 src.advanceBy(2);
71
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.
4 ASSERT_EQ(src.next().value(), "64");
72
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.
4 ASSERT_EQ(src.next().value(), "69");
73
3/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ 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 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_FALSE(src.next().has_value());
74
3/6
✓ 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.
2 }
75
76 8 TEST(CXXIter, randomAccessFilter) {
77
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input = {1.337f, 2.338f, 0.01f, 3.339f, 4.340f, 5.350f};
78
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
8 auto src = CXXIter::from(std::move(input)).filter([](float val) { return val > 2.0f; });
79
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_EQ(src.next().value(), 2.338f);
80
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 src.advanceBy(2);
81
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_EQ(src.next().value(), 5.350f);
82
3/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
2 ASSERT_FALSE(src.next().has_value());
83
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
84
85 8 TEST(CXXIter, randomAccessFilterMap) {
86
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input = {1.337f, 2.338f, 0.01f, 3.339f, 4.340f, 5.1f};
87
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
8 auto src = CXXIter::from(std::move(input)).filterMap([](float val) -> std::optional<size_t> {
88
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
6 if(val <= 2.0f) { return {}; }
89 4 return static_cast<size_t>(val);
90
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 });
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_EQ(src.next().value(), 2);
92
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 src.advanceBy(2);
93
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_EQ(src.next().value(), 5);
94
3/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
2 ASSERT_FALSE(src.next().has_value());
95
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
96
97 8 TEST(CXXIter, randomAccessModify) {
98
5/10
✓ 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 14 taken 1 times.
✗ Branch 15 not taken.
12 std::vector<std::pair<int, std::string>> input = { {1337, "1337"}, {42, "42"}, {69, "69"}, {31337, "31337"} };
99
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto src = CXXIter::from(input)
100
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .modify([](auto& keyValue) {
101
2/4
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 keyValue.second = keyValue.second + "-" + std::to_string(keyValue.first + 1);
102 2 });
103
3/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
2 ASSERT_TRUE(src.next().has_value());
104
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 src.advanceBy(2);
105
3/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
2 ASSERT_TRUE(src.next().has_value());
106
3/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
2 ASSERT_FALSE(src.next().has_value());
107
108
9/24
✓ 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 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
2 ASSERT_THAT(input, ElementsAre( Pair(1337, "1337-1338"), Pair(42, "42"), Pair(69, "69"), Pair(31337, "31337-31338") ));
109
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
110
111 8 TEST(CXXIter, randomAccessMap) {
112 2 size_t iterState = 0;
113
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input = {1.337f, 2.338f, 3.339f, 4.340f, 0.1f};
114
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
7 auto src = CXXIter::from(input).map([iterState](float val) mutable -> size_t {
115 5 iterState += 100;
116 5 return static_cast<size_t>(val) + iterState;
117 });
118
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_EQ(src.next().value(), 101);
119
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 src.advanceBy(2);
120
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_EQ(src.next().value(), 404);
121
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_EQ(src.next().value(), 500);
122
3/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
2 ASSERT_FALSE(src.next().has_value());
123
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
124
125 //TEST(CXXIter, doubleEndedSort) {
126 // { // ASCENDING
127 // std::vector<float> input = {1.0f, 2.0f, 0.5f, 3.0f, -42.0f};
128 // auto src = CXXIter::from(input)
129 // .sort<false>([](const float& a, const float& b) { return (a < b); });
130 // ASSERT_EQ(src.nextBack().value(), 3.0f);
131 // ASSERT_EQ(src.nextBack().value(), 2.0f);
132 // ASSERT_EQ(src.nextBack().value(), 1.0f);
133 // ASSERT_EQ(src.nextBack().value(), 0.5f);
134 // ASSERT_EQ(src.nextBack().value(), -42.0f);
135 // ASSERT_FALSE(src.nextBack().has_value());
136 // ASSERT_FALSE(src.next().has_value());
137 // }
138 // { // ASCENDING
139 // std::vector<float> input = {1.0f, 2.0f, 0.5f, 3.0f, -42.0f};
140 // auto src = CXXIter::from(input)
141 // .sort<false>([](const float& a, const float& b) { return (a < b); });
142 // ASSERT_EQ(src.nextBack().value(), 3.0f);
143 // ASSERT_EQ(src.next().value(), -42.0f);
144 // ASSERT_EQ(src.next().value(), 0.5f);
145 // ASSERT_EQ(src.nextBack().value(), 2.0f);
146 // ASSERT_EQ(src.nextBack().value(), 1.0f);
147 // ASSERT_FALSE(src.nextBack().has_value());
148 // ASSERT_FALSE(src.next().has_value());
149 // }
150 // { // DESCENDING
151 // std::vector<float> input = {1.0f, 2.0f, 0.5f, 3.0f, -42.0f};
152 // auto src = CXXIter::from(input)
153 // .sort<CXXIter::DESCENDING, false>();
154 // ASSERT_EQ(src.nextBack().value(), -42.0f);
155 // ASSERT_EQ(src.nextBack().value(), 0.5f);
156 // ASSERT_EQ(src.nextBack().value(), 1.0f);
157 // ASSERT_EQ(src.nextBack().value(), 2.0f);
158 // ASSERT_EQ(src.nextBack().value(), 3.0f);
159 // ASSERT_FALSE(src.nextBack().has_value());
160 // ASSERT_FALSE(src.next().has_value());
161 // }
162 // { // DESCENDING
163 // std::vector<float> input = {1.0f, 2.0f, 0.5f, 3.0f, -42.0f};
164 // auto src = CXXIter::from(input)
165 // .sort<CXXIter::DESCENDING, false>();
166 // ASSERT_EQ(src.nextBack().value(), -42.0f);
167 // ASSERT_EQ(src.next().value(), 3.0f);
168 // ASSERT_EQ(src.next().value(), 2.0f);
169 // ASSERT_EQ(src.nextBack().value(), 0.5f);
170 // ASSERT_EQ(src.nextBack().value(), 1.0f);
171 // ASSERT_FALSE(src.nextBack().has_value());
172 // ASSERT_FALSE(src.next().has_value());
173 // }
174 //}
175