GCC Code Coverage Report


Directory: ./
File: tests/TestExactSized.cpp
Date: 2023-01-04 16:32:12
Exec Total Coverage
Lines: 74 74 100.0%
Functions: 12 12 100.0%
Branches: 105 270 38.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, ExactSizedEmptySource) {
19 {
20 auto iter = CXXIter::empty<std::string>();
21
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_EQ(0, iter.size());
22 }
23 {
24 2 auto iter = CXXIter::empty<std::string>()
25 .map([](std::string blub) { return blub.size(); })
26 .sort()
27 .intersperse(CXXIter::empty<size_t>());
28
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_EQ(0, iter.size());
29
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
30 {
31 auto iter = CXXIter::empty<std::string>()
32 .filter([](const std::string&) { return true; });
33 static_assert(!CXXIterExactSizeIterator<decltype(iter)>);
34 }
35 {
36 auto iter = CXXIter::empty<std::string>()
37 .filterMap([](const std::string&) -> std::optional<bool> { return true; });
38 static_assert(!CXXIterExactSizeIterator<decltype(iter)>);
39 }
40 }
41
42 8 TEST(CXXIter, ExactSizedRepeatSource) {
43 {
44
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
4 auto iter = CXXIter::repeat<std::string>("asdf");
45
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_EQ(iter.size(), SizeHint::INFINITE);
46
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
47 {
48
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
4 auto iter = CXXIter::repeat<std::string>("test")
49
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .map([](std::string blub) { return blub.size(); })
50
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .sort()
51
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 .intersperse(CXXIter::empty<size_t>());
52
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_EQ(iter.size(), 1);
53
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
54 {
55
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
4 auto iter = CXXIter::repeat<std::string>("test")
56
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .map([](std::string blub) { return blub.size(); })
57
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .sort()
58
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 .intersperse(CXXIter::repeat<size_t>(1337));
59
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_EQ(iter.size(), SizeHint::INFINITE);
60
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
61 {
62
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
4 auto iter = CXXIter::repeat<std::string>("test")
63
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .map([](std::string blub) { return blub.size(); })
64
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .sort()
65
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
4 .intersperse(CXXIter::repeat<size_t>(1337))
66
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .filterMap([](size_t item) -> std::optional<size_t> { return item; });
67 static_assert(!CXXIterExactSizeIterator<decltype(iter)>);
68 2 }
69 {
70
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
4 auto iter = CXXIter::repeat<std::string>("test")
71
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .map([](std::string blub) { return blub.size(); })
72
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .sort()
73
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
4 .intersperse(CXXIter::repeat<size_t>(1337))
74
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .filter([](size_t) { return true; });
75 static_assert(!CXXIterExactSizeIterator<decltype(iter)>);
76 2 }
77 }
78
79 8 TEST(CXXIter, ExactSizedRangeSource) {
80 {
81 2 auto iter = CXXIter::range<float>(0.0f, 2.0f, 0.25f);
82
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_EQ(iter.size(), 9);
83 }
84 {
85 2 auto iter = CXXIter::range<float>(0.0f, 2.0f, 0.25f)
86 .map([](float blub) { return std::to_string(blub); })
87 .sort()
88 .intersperse(CXXIter::empty<std::string>());
89
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_EQ(iter.size(), 1);
90
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
91 {
92 2 auto iter = CXXIter::range<float>(0.0f, 2.0f, 0.25f)
93 .map([](float blub) { return std::to_string(blub); })
94 .sort()
95 .intersperse(CXXIter::empty<std::string>())
96 .flatMap();
97 static_assert(!CXXIterExactSizeIterator<decltype(iter)>);
98 2 }
99 }
100
101 8 TEST(CXXIter, ExactSizedItemSource) {
102
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 const std::vector<int> input = {1337, 42, 64};
103 {
104
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto iter = CXXIter::from(input);
105
4/14
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
2 ASSERT_EQ(iter.size(), input.size());
106 }
107 {
108
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto iter = CXXIter::from(input)
109
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .skip(1)
110
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .take(10)
111
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .map([](int blub) { return std::to_string(blub); })
112
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sort()
113
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 .intersperse(CXXIter::empty<std::string>());
114
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_EQ(iter.size(), 1);
115
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
116 {
117
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto iter = CXXIter::from(input)
118
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .map([](int blub) { return std::to_string(blub); })
119
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sort()
120
3/6
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
4 .intersperse(CXXIter::repeat<std::string>(","))
121
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .skip(1)
122
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .take(3);
123
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_EQ(iter.size(), 3);
124
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
125 {
126
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto iter = CXXIter::from(input)
127
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .map([](int blub) { return std::to_string(blub); })
128
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sort()
129
3/6
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
4 .intersperse(CXXIter::repeat<std::string>(","))
130
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .flatMap();
131 static_assert(!CXXIterExactSizeIterator<decltype(iter)>);
132 2 }
133 {
134
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto iter = CXXIter::from(input)
135
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .map([](int blub) { return std::to_string(blub); })
136
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sort()
137
3/6
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
4 .intersperse(CXXIter::repeat<std::string>(","))
138
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .filter([](const std::string&) { return true; });
139 static_assert(!CXXIterExactSizeIterator<decltype(iter)>);
140 2 }
141
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
142
143
144 //TODO: skip(cnt) and take(cnt)
145