GCC Code Coverage Report


Directory: ./
File: tests/TestChainers.cpp
Date: 2023-01-04 16:32:12
Exec Total Coverage
Lines: 1445 1446 99.9%
Functions: 87 87 100.0%
Branches: 2943 8231 35.8%

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 CXXIter::SizeHint;
16
17 // ################################################################################################
18 // CHAINERS
19 // ################################################################################################
20 8 TEST(CXXIter, cast) {
21 { // sizeHint
22
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input = {1.35, 56.123};
23
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 SizeHint sizeHint = CXXIter::from(input).cast<double>().sizeHint();
24
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(sizeHint.lowerBound, input.size());
25
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(sizeHint.upperBound.value(), input.size());
26
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
27 {
28
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input = {1.35, 56.123};
29
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<double> output = CXXIter::from(input)
30
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .cast<double>()
31
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
32
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());
33
5/14
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 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 2 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 2 times.
✓ Branch 25 taken 1 times.
6 for(size_t i = 0; i < input.size(); ++i) { ASSERT_NEAR(input[i], output[i], 0.000005); }
34
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
35 }
36
37 8 TEST(CXXIter, copied) {
38 { // sizeHint
39
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input = {1.35, 56.123};
40
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 SizeHint sizeHint = CXXIter::from(input).copied().sizeHint();
41
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(sizeHint.lowerBound, input.size());
42
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(sizeHint.upperBound.value(), input.size());
43
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
44 { // copied
45
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> input = {"inputString1", "inputString2"};
46
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<std::string> output = CXXIter::from(input)
47
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied() // clone values, now working with owned copies instead of references to input
48
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .modify([](std::string& item) { item[item.size() - 1] += 1; }) // modify copies, input untouched
49
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
50
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(2, output.size());
51
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(input, ElementsAre("inputString1", "inputString2"));
52
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("inputString2", "inputString3"));
53
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
54 { // uncopied
55
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> input = {"inputString1", "inputString2"};
56
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<std::string> output = CXXIter::from(input)
57
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .modify([](std::string& item) { item[item.size() - 1] += 1; }) // modify
58
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
59
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(2, output.size());
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_THAT(input, ElementsAre("inputString2", "inputString3"));
61
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("inputString2", "inputString3"));
62
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
63 }
64
65 8 TEST(CXXIter, indexed) {
66 {
67
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> input = {"1337", "42", "64"};
68
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<std::pair<size_t, std::string&>> output = CXXIter::from(input)
69
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .indexed()
70
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
71
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(), 3);
72
8/22
✓ 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 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
2 ASSERT_THAT(output, ElementsAre(Pair(0, "1337"), Pair(1, "42"), Pair(2, "64")));
73
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
74 {
75
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> input = {"1337", "42", "64"};
76
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<std::pair<size_t, std::string>> output = CXXIter::from(std::move(input))
77
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .indexed()
78
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
79
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(), 3);
80
8/22
✓ 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 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
2 ASSERT_THAT(output, ElementsAre(Pair(0, "1337"), Pair(1, "42"), Pair(2, "64")));
81
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
82 }
83
84 8 TEST(CXXIter, flagLast) {
85 { // sizeHint
86
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input = {1.35, 56.123};
87
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 SizeHint sizeHint = CXXIter::from(input).flagLast().sizeHint();
88
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(sizeHint.lowerBound, input.size());
89
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(sizeHint.upperBound.value(), input.size());
90
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
91 { // reference
92
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> input = {"1337", "42", "64"};
93
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<std::pair<std::string&, bool>> output = CXXIter::from(input)
94
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .flagLast()
95
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
96
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(), 3);
97
8/22
✓ 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 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
2 ASSERT_THAT(output, ElementsAre(Pair("1337", false), Pair("42", false), Pair("64", true)));
98
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
99 { //moved
100
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> input = {"1337", "42", "64"};
101
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<std::pair<std::string, bool>> output = CXXIter::from(std::move(input))
102
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .flagLast()
103
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
104
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(), 3);
105
8/22
✓ 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 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
2 ASSERT_THAT(output, ElementsAre(Pair("1337", false), Pair("42", false), Pair("64", true)));
106
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
107 { // filterLast
108
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> input = {"1337", "42", "64"};
109
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<std::string> output = CXXIter::from(input)
110
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .flagLast()
111
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
5 .filterMap([](const std::pair<std::string&, bool>& el) -> std::optional<std::string> {
112
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
3 if(el.second) { return {}; } // remove last
113 2 return el.first;
114 })
115
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
116
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);
117
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("1337", "42"));
118
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
119 { // flag after non-exact iterator
120
5/10
✓ 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.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
14 std::vector<std::string> input = {"1337", "42", "420", "64"};
121
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<std::pair<std::string&, bool>> output = CXXIter::from(input)
122
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
6 .filter([](const std::string& el) { return el.size() >= 3; })
123
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .flagLast()
124
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
125
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);
126
7/20
✓ 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 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
2 ASSERT_THAT(output, ElementsAre(Pair("1337", false), Pair("420", true)));
127
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
128 }
129
130 8 TEST(CXXIter, filter) {
131 { // sizeHint
132
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input = {1.35, 56.123};
133
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
134
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .filter([](int item) { return (item % 2) == 0; })
135
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
136
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
137
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(sizeHint.upperBound.value(), input.size());
138
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
139 {
140
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {1, 2, 3, 4, 5, 6, 7, 8};
141
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input)
142
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
10 .filter([](int item) { return (item % 2) == 0; })
143
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
144
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(4, output.size());
145
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(2, 4, 6, 8));
146
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
147 {
148
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {1, 2, 3, 4, 5, 6, 7, 8};
149
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> output = CXXIter::SrcMov(std::move(input))
150
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
12 .filter([](int item) { return (item % 2) == 0; })
151
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
152
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(4, output.size());
153
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(2, 4, 6, 8));
154
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
155 }
156
157 8 TEST(CXXIter, unique) {
158 { // sizeHint
159
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1, 1, 2, 3, 3, 4, 4, 5, 5, 5};
160
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
161
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .unique()
162
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
163
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
164
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(sizeHint.upperBound.value(), input.size());
165
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
166 { // basic data
167
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1, 1, 2, 3, 3, 4, 4, 5, 5, 5};
168
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<size_t> output = CXXIter::from(input)
169
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .unique()
170
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .copied()
171
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
172
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(), 5);
173
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(1, 2, 3, 4, 5));
174
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
175 { // basic data
176
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<double> input = {1.0, 1.5, 1.4, 2.0, 2.1, 2.99, 3.25, 4.5};
177
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<double> output = CXXIter::from(input)
178
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .unique()
179
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .copied()
180
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
181
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(output.size(), input.size());
182
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(1.0, 1.5, 1.4, 2.0, 2.1, 2.99, 3.25, 4.5));
183
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
184 { // with mapFn
185
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<double> input = {1.0, 1.5, 1.4, 2.0, 2.1, 2.99, 3.25, 4.5};
186
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<double> output = CXXIter::from(input)
187
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
10 .unique([](double item) { return std::floor(item); })
188
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .copied()
189
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
190
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);
191
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(1.0, 2.0, 3.25, 4.5));
192
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
193 }
194
195 8 TEST(CXXIter, reverse) {
196 { // sizeHint
197
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1, 42, 2, 1337, 3, 4, 69, 5, 6, 5};
198
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 SizeHint sizeHint = CXXIter::from(input).copied()
199
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .reverse()
200
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
201
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(sizeHint.lowerBound, input.size());
202
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(sizeHint.upperBound.value(), input.size());
203
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
204 { // Reverse using DoubleEndedIterator
205
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1, 42, 2, 1337, 3, 4, 69, 5, 6, 5};
206
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::vector<size_t> output = CXXIter::from(input).copied()
207
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .reverse()
208
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
209
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());
210
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(5, 6, 5, 69, 4, 3, 1337, 2, 42, 1));
211
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
212 { // Reverse using internal Cache
213
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input1 = {1, 2, 3, 4, 5};
214
7/14
✓ 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.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
18 std::vector<std::string> input2 = {"1", "2", "3", "4", "5", "6"};
215
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, std::string>> output = CXXIter::from(input1).copied()
216
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 .zip(CXXIter::from(input2).copied())
217
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .reverse()
218
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
219
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(output.size(), input1.size());
220
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(5, "5"), Pair(4, "4"), Pair(3, "3"), Pair(2, "2"), Pair(1, "1")));
221
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 }
222
223 { // Double Reverse using DoubleEndedIterator
224
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1, 42, 2, 1337, 3, 4, 69, 5, 6, 5};
225
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::vector<size_t> output = CXXIter::from(input).copied()
226
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .reverse()
227
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .reverse()
228
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
229
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());
230
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(1, 42, 2, 1337, 3, 4, 69, 5, 6, 5));
231
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
232 { // Double Reverse using internal Cache
233
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input1 = {1, 2, 3, 4, 5};
234
7/14
✓ 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.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
18 std::vector<std::string> input2 = {"1", "2", "3", "4", "5", "6"};
235
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, std::string>> output = CXXIter::from(input1).copied()
236
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 .zip(CXXIter::from(input2).copied())
237
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .reverse()
238
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .reverse()
239
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
240
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(output.size(), input1.size());
241
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(1, "1"), Pair(2, "2"), Pair(3, "3"), Pair(4, "4"), Pair(5, "5")));
242
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 }
243 }
244
245 8 TEST(CXXIter, chunkedExact_buffered) {
246 { // non-interleaved
247 { // sizeHint
248 {
249
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
250
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
251
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
252
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3>()
253
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
254
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 3);
255
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(sizeHint.upperBound.value(), 3);
256
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
257 {
258
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
259
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
260
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
261
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3>()
262
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
263
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 2);
264
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(sizeHint.upperBound.value(), 2);
265
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
266 {
267
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2};
268
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
269
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
270
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3>()
271
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
272
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 2);
273
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(sizeHint.upperBound.value(), 2);
274
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
275 {
276
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2};
277
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
278
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
279
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .filter([](size_t) { return true; })
280
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3>()
281
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
282
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
283
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(sizeHint.upperBound.value(), 2);
284
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
285 }
286
287 {
288
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
289
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
290
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
291
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3>()
292
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
293
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(), 3);
294
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512));
295
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(31337, 69, 5));
296
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[2], ElementsAre(1, 2, 3));
297
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
298 {
299
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
300
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
301
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
302
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3>()
303
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
304
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);
305
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512));
306
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(31337, 69, 5));
307
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
308 {
309
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
310
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
311
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
312
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<5>()
313
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
314
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(), 1);
315
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512, 31337, 69));
316
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
317 }
318
319 { // overlapping, step width 2
320 { // sizeHint
321 {
322
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
323
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
324
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
325
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 2>()
326
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
327
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 4);
328
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(sizeHint.upperBound.value(), 4);
329
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
330 {
331
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
332
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
333
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
334
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 2>()
335
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
336
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 3);
337
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(sizeHint.upperBound.value(), 3);
338
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
339 {
340
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2};
341
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
342
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
343
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 2>()
344
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
345
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 3);
346
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(sizeHint.upperBound.value(), 3);
347
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
348 {
349
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2};
350
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
351
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
352
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .filter([](size_t) { return true; })
353
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 2>()
354
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
355
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
356
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(sizeHint.upperBound.value(), 3);
357
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
358 }
359
360 {
361
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
362
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
363
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
364
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 2>()
365
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
366
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);
367
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512));
368
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(512, 31337, 69));
369
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[2], ElementsAre(69, 5, 1));
370
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[3], ElementsAre(1, 2, 3));
371
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
372 {
373
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
374
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
375
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
376
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 2>()
377
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
378
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(), 3);
379
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512));
380
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(512, 31337, 69));
381
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[2], ElementsAre(69, 5, 1));
382
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
383 {
384
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
385
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
386
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
387
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<5, 3>()
388
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
389
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);
390
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512, 31337, 69));
391
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(31337, 69, 5, 1, 2));
392
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
393 }
394
395
396 { // step width > context-size
397 { //sizeHint
398 {
399
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
400
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
401
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
402
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 4>()
403
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
404
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 2);
405
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(sizeHint.upperBound.value(), 2);
406
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
407 {
408
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
409
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
410
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
411
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 4>()
412
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
413
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 2);
414
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(sizeHint.upperBound.value(), 2);
415
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
416 {
417
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2};
418
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
419
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
420
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 4>()
421
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
422
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 2);
423
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(sizeHint.upperBound.value(), 2);
424
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
425 {
426
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2};
427
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
428
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
429
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .filter([](size_t) { return true; })
430
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 4>()
431
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
432
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
433
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(sizeHint.upperBound.value(), 2);
434
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
435 }
436
437 {
438
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
439
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
440
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
441
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 4>()
442
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
443
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);
444
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512));
445
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(69, 5, 1));
446
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
447 {
448
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
449
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
450
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
451
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 4>()
452
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
453
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);
454
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512));
455
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(69, 5, 1));
456
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
457 {
458
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
459
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
460
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
461
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<5, 6>()
462
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
463
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(), 1);
464
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512, 31337, 69));
465
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
466 }
467 }
468
469 8 TEST(CXXIter, chunkedExact_directAccess) {
470 { // non-interleaved
471 { // sizeHint
472 {
473
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
474
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
475
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3>()
476
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
477
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 3);
478
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(sizeHint.upperBound.value(), 3);
479
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
480 {
481
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
482
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
483
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3>()
484
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
485
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 2);
486
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(sizeHint.upperBound.value(), 2);
487
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
488 {
489
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2};
490
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
491
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3>()
492
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
493
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 2);
494
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(sizeHint.upperBound.value(), 2);
495
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
496 {
497
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2};
498
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
499
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .filter([](size_t) { return true; })
500
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3>()
501
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
502
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
503
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(sizeHint.upperBound.value(), 2);
504
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
505 }
506
507 {
508
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
509
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
510
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3>()
511
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
512
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(), 3);
513
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512));
514
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(31337, 69, 5));
515
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[2], ElementsAre(1, 2, 3));
516
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
517 {
518
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
519
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
520
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3>()
521
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
522
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);
523
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512));
524
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(31337, 69, 5));
525
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
526 {
527
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
528
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
529
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<5>()
530
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
531
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(), 1);
532
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512, 31337, 69));
533
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
534 }
535
536 { // overlapping, step width 2
537 { // sizeHint
538 {
539
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
540
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
541
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 2>()
542
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
543
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 4);
544
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(sizeHint.upperBound.value(), 4);
545
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
546 {
547
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
548
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
549
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 2>()
550
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
551
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 3);
552
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(sizeHint.upperBound.value(), 3);
553
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
554 {
555
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2};
556
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
557
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 2>()
558
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
559
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 3);
560
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(sizeHint.upperBound.value(), 3);
561
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
562 {
563
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2};
564
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
565
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .filter([](size_t) { return true; })
566
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 2>()
567
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
568
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
569
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(sizeHint.upperBound.value(), 3);
570
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
571 }
572
573 {
574
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
575
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
576
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 2>()
577
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
578
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);
579
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512));
580
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(512, 31337, 69));
581
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[2], ElementsAre(69, 5, 1));
582
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[3], ElementsAre(1, 2, 3));
583
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
584 {
585
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
586
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
587
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 2>()
588
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
589
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(), 3);
590
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512));
591
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(512, 31337, 69));
592
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[2], ElementsAre(69, 5, 1));
593
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
594 {
595
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
596
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
597
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<5, 3>()
598
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
599
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);
600
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512, 31337, 69));
601
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(31337, 69, 5, 1, 2));
602
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
603 }
604
605
606 { // step width > context-size
607 { //sizeHint
608 {
609
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
610
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
611
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 4>()
612
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
613
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 2);
614
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(sizeHint.upperBound.value(), 2);
615
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
616 {
617
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
618
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
619
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 4>()
620
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
621
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 2);
622
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(sizeHint.upperBound.value(), 2);
623
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
624 {
625
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2};
626
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
627
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 4>()
628
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
629
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 2);
630
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(sizeHint.upperBound.value(), 2);
631
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
632 {
633
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2};
634
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
635
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .filter([](size_t) { return true; })
636
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 4>()
637
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
638
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
639
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(sizeHint.upperBound.value(), 2);
640
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
641 }
642
643 {
644
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
645
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
646
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 4>()
647
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
648
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);
649
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512));
650
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(69, 5, 1));
651
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
652 {
653
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
654
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
655
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 4>()
656
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
657
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);
658
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512));
659
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(69, 5, 1));
660
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
661 {
662
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
663
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
664
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<5, 6>()
665
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
666
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(), 1);
667
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512, 31337, 69));
668
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
669 }
670 }
671
672 8 TEST(CXXIter, chunkedExact_elementTypeSelection) {
673 { // contiguous
674 { // references
675 { // mutable
676
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
677
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 auto iter = CXXIter::from(input).chunkedExact<3, 2>();
678
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 CXXIter::ExactChunk<size_t, 3>& output0 = iter.next().value();
679
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 CXXIter::ExactChunk<size_t, 3>& output1 = iter.next().value();
680
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(output0.data(), &input[0]);
681
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(output1.data(), &input[2]);
682 2 output1[1] = 9999;
683
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(input[3], 9999);
684
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
685 { // const
686
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 const std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
687
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 auto iter = CXXIter::from(input).chunkedExact<3, 2>();
688
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const CXXIter::ExactChunk<size_t, 3>& output0 = iter.next().value();
689
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const CXXIter::ExactChunk<size_t, 3>& output1 = iter.next().value();
690
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(output0.data(), &input[0]);
691
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(output1.data(), &input[2]);
692
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
693 }
694 { // owned
695
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
696
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 auto iter = CXXIter::from(input).copied().chunkedExact<3, 2>();
697
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const CXXIter::ExactChunk<size_t, 3>& output0 = iter.next().value();
698
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const CXXIter::ExactChunk<size_t, 3>& output1 = iter.next().value();
699
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_NE(output0.data(), &input[0]);
700
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_NE(output1.data(), &input[2]);
701
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
702 }
703 { // non-contiguous
704 { // references
705 { // mutable
706
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::deque<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
707
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 auto iter = CXXIter::from(input).chunkedExact<3, 2>();
708
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const CXXIter::ExactChunk<size_t&, 3>& output0 = iter.next().value();
709
3/12
✓ 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(&output0[0].get(), &input[0]);
710
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const CXXIter::ExactChunk<size_t&, 3>& output1 = iter.next().value();
711
3/12
✓ 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(&output1[0].get(), &input[2]);
712 2 output1[1].get() = 9999;
713
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(input[3], 9999);
714
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
715 { // const
716
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 const std::deque<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
717
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 auto iter = CXXIter::from(input).chunkedExact<3, 2>();
718
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const CXXIter::ExactChunk<const size_t&, 3>& output0 = iter.next().value();
719
3/12
✓ 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(&output0[0].get(), &input[0]);
720
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const CXXIter::ExactChunk<const size_t&, 3>& output1 = iter.next().value();
721
3/12
✓ 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(&output1[0].get(), &input[2]);
722
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
723 }
724 { // owned
725
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::deque<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
726
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 auto iter = CXXIter::from(input).copied().chunkedExact<3, 2>();
727
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const CXXIter::ExactChunk<size_t, 3>& output0 = iter.next().value();
728
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const CXXIter::ExactChunk<size_t, 3>& output1 = iter.next().value();
729
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_NE(output0.data(), &input[0]);
730
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_NE(output1.data(), &input[2]);
731
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
732 }
733 }
734
735 8 TEST(CXXIter, chunkedExact_usage) {
736 {
737
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
738
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<CXXIter::ExactChunk<size_t, 3>> output = CXXIter::from(input)
739
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3>()
740
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
741
8/22
✓ 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 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
2 ASSERT_THAT(output, ElementsAre(ElementsAre(1337, 42, 512), ElementsAre(31337, 69, 5), ElementsAre(1, 2, 3)));
742
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
743 {
744
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2};
745
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<CXXIter::ExactChunk<size_t, 3>> output = CXXIter::from(input)
746
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3>()
747
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
748
7/20
✓ 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 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
2 ASSERT_THAT(output, ElementsAre(ElementsAre(1337, 42, 512), ElementsAre(31337, 69, 5)));
749
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
750 {
751
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5};
752
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<CXXIter::ExactChunk<size_t, 3>> output = CXXIter::from(input)
753
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 1>()
754
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
755
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(output, ElementsAre(ElementsAre(1337, 42, 512), ElementsAre(42, 512, 31337), ElementsAre(512, 31337, 69), ElementsAre(31337, 69, 5)));
756
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
757 {
758
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
759
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<CXXIter::ExactChunk<size_t, 3>> output = CXXIter::from(input)
760
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 4>()
761
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
762
7/20
✓ 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 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
2 ASSERT_THAT(output, ElementsAre(ElementsAre(1337, 42, 512), ElementsAre(69, 5, 1)));
763
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
764 {
765
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
766
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 CXXIter::from(input)
767
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 4>()
768
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .forEach([](std::array<size_t, 3>& chunkRef) {
769 2 chunkRef[0] += 1; chunkRef[1] += 2; chunkRef[2] += 3;
770 2 });
771
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(input, ElementsAre(1337+1, 42+2, 512+3, 31337, 69+1, 5+2, 1+3));
772
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
773 {
774
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::deque<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
775
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<CXXIter::ExactChunk<size_t, 3>> output = CXXIter::from(input)
776
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied() // required to avoid std::reference_wrapper<...> in elements produced by chunkedExact()
777
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 4>()
778
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
779
7/20
✓ 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 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
2 ASSERT_THAT(output, ElementsAre(ElementsAre(1337, 42, 512), ElementsAre(69, 5, 1)));
780
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
781 {
782
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
783 // CXXIter::ExactChunk<size_t&, 3> resolves to std::array<std::reference_wrapper<size_t>, 3>
784
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<CXXIter::ExactChunk<size_t&, 3>> output = CXXIter::from(input)
785
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
9 .filter([](const auto&) { return true; })
786
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunkedExact<3, 4>()
787
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
788 // output == { {1337, 42, 512}, {69, 5, 1} }
789 2 }
790 }
791
792 8 TEST(CXXIter, chunked) {
793 { // sizeHint
794 {
795
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
796
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
797
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
798
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunked<3>()
799
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
800
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 3);
801
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(sizeHint.upperBound.value(), 3);
802
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
803 {
804
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
805
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
806
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
807
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunked<3>()
808
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
809
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 3);
810
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(sizeHint.upperBound.value(), 3);
811
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
812 {
813
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2};
814
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
815
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
816
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunked<3>()
817
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
818
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 3);
819
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(sizeHint.upperBound.value(), 3);
820
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
821 {
822
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2};
823
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
824
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
825
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .filter([](size_t) { return true; })
826
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunked<3>()
827
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
828
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
829
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(sizeHint.upperBound.value(), 3);
830
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
831 }
832 {
833
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
834
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
835
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
836
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunked<3>()
837
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
838
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(), 3);
839
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512));
840
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(31337, 69, 5));
841
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[2], ElementsAre(1, 2, 3));
842
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
843 {
844
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1};
845
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
846
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
847
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunked<3>()
848
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
849
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(), 3);
850
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512));
851
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(31337, 69, 5));
852
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[2], ElementsAre(1));
853
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
854 {
855
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1337, 42, 512, 31337, 69, 5, 1, 2, 3};
856
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
857
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .copied()
858
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .chunked<5>()
859
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
860
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);
861
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[0], ElementsAre(1337, 42, 512, 31337, 69));
862
5/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_THAT(output[1], ElementsAre(5, 1, 2, 3));
863
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
864 }
865
866 8 TEST(CXXIter, filterMap) {
867 { // sizeHint
868
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {1, 2, 3, 4, 5, 6, 7, 8};
869
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
870
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .filterMap([](int item) -> std::optional<int> {
871 if(item % 2 == 0) { return (item + 3); }
872 return {};
873 })
874
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
875
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
876
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(sizeHint.upperBound.value(), input.size());
877
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
878 {
879
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {1, 2, 3, 4, 5, 6, 7, 8};
880
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input)
881
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
10 .filterMap([](int item) -> std::optional<int> {
882
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 4 times.
8 if(item % 2 == 0) { return (item + 3); }
883 4 return {};
884 })
885
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
886
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(4, output.size());
887
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(2+3, 4+3, 6+3, 8+3));
888
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
889 }
890
891 8 TEST(CXXIter, map) {
892 struct SimpleState {
893 size_t state = 0;
894 8 SimpleState(size_t state) : state(state) {}
895 12 size_t getAddState() {
896 12 state += 1;
897 12 return state;
898 }
899 };
900
901 { // sizeHint
902
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {1337, 42};
903
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
904
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .map([](int i) { return std::make_pair(i, std::to_string(i)); })
905
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
906
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(sizeHint.lowerBound, input.size());
907
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(sizeHint.upperBound.value(), input.size());
908
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
909 {
910
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
8 std::unordered_map<int, std::string> input = { {1337, "1337"}, {42, "42"} };
911
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::unordered_set<int> output = CXXIter::from(input)
912
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .map([](const auto& pair) { return pair.first; })
913
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::unordered_set>();
914
5/16
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 27 taken 2 times.
✗ Branch 28 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 1 times.
6 for(const int& item : output) { ASSERT_TRUE(input.contains(item)); }
915
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
916 {
917
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {1337, 42};
918
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::unordered_map<int, std::string> output = CXXIter::from(input)
919
2/3
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
6 .map([](int i) { return std::make_pair(i, std::to_string(i)); }) // construct pair
920
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::unordered_map>(); // collect into map
921
2/2
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 1 times.
6 for(const int& item : input) {
922
3/14
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ 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 24 taken 2 times.
✗ Branch 25 not taken.
4 ASSERT_TRUE(output.contains(item));
923
5/16
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 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 2 times.
✗ Branch 26 not taken.
8 ASSERT_EQ(output[item], std::to_string(item));
924 }
925
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
926 { // move source
927
1/2
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
2 std::vector<SimpleState> input = { 0, 1336, 41, 68 };
928
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 size_t output = CXXIter::from(std::move(input))
929
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
8 .map([](SimpleState&& state) { return state.getAddState(); })
930
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sum();
931
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(output, 1 + 1337 + 42 + 69);
932
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(input.size(), 0);
933
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
934 { // ref source
935
1/2
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
2 std::vector<SimpleState> input = { 1, 1337, 42, 69 };
936
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 size_t output = CXXIter::from(input)
937
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
6 .map([](SimpleState& state) { return state.getAddState(); })
938
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sum();
939
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(output, 2 + 1338 + 43 + 70);
940
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[0].getAddState(), 3);
941
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[1].getAddState(), 1339);
942
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[2].getAddState(), 44);
943
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[3].getAddState(), 71);
944
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
945 }
946
947 8 TEST(CXXIter, modify) {
948 { // sizeHint
949
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
8 std::unordered_map<int, std::string> input = { {1337, "1337"}, {42, "42"} };
950
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
951
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .modify([](auto& keyValue) { keyValue.second = "-" + keyValue.second; })
952
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
953
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(sizeHint.lowerBound, input.size());
954
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(sizeHint.upperBound.value(), input.size());
955
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
956 {
957
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
8 std::unordered_map<int, std::string> input = { {1337, "1337"}, {42, "42"} };
958
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::unordered_map<int, std::string> output = CXXIter::from(input)
959
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .modify([](auto& keyValue) { keyValue.second = "-" + keyValue.second; }) // modify input
960
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::unordered_map>(); // copy to output
961
2/2
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 1 times.
6 for(const auto& item : input) {
962
3/14
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ 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 24 taken 2 times.
✗ Branch 25 not taken.
4 ASSERT_TRUE(output.contains(item.first));
963
4/14
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 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 2 times.
✗ Branch 23 not taken.
4 ASSERT_EQ(item.second, input[item.first]);
964
2/12
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ 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 22 taken 2 times.
✗ Branch 23 not taken.
4 ASSERT_TRUE(item.second.starts_with("-"));
965 }
966
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
967 }
968
969 8 TEST(CXXIter, skip) {
970 { // sizeHint
971 {
972
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 42, 42, 42, 1337, 42};
973
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
974
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .skip(3)
975
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
976
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 3);
977
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(sizeHint.upperBound.value(), 3);
978
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
979 {
980
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 42, 42, 42, 1337, 42};
981
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
982
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .skip(10)
983
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
984
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
985
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(sizeHint.upperBound.value(), 0);
986
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
987 {
988
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 42, 42, 42, 1337, 42};
989
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
990
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .skip(0)
991
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
992
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(sizeHint.lowerBound, input.size());
993
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(sizeHint.upperBound.value(), input.size());
994
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
995 }
996 {
997
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 42, 42, 42, 1337};
998
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input)
999
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .skip(3) // skip first 3 values
1000
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1001
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);
1002
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(42, 1337));
1003
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1004 {
1005
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 42, 42, 42, 1337};
1006
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input)
1007
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .skip(0)
1008
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1009
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(output.size(), input.size());
1010
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(42, 42, 42, 42, 1337));
1011
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1012 {
1013
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 42, 42, 42, 1337, 69, 69, 31337};
1014
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input)
1015
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .skip(3)
1016
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .skip(1)
1017
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1018
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);
1019
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(1337, 69, 69, 31337));
1020
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1021 {
1022
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 42, 42, 42, 1337, 69, 69, 31337};
1023
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input)
1024
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .skip(99)
1025
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .skip(1)
1026
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1027
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(), 0);
1028
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1029 {
1030
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 42, 42, 42, 1337, 69, 69, 31337};
1031
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input)
1032
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .skip(1)
1033
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .skip(99)
1034
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1035
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(), 0);
1036
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1037 {
1038
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 42, 42, 42, 1337, 69, 69, 31337};
1039
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input)
1040
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .skip(8)
1041
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1042
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(), 0);
1043
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1044 }
1045
1046 8 TEST(CXXIter, skipWhile) {
1047 { // sizeHint
1048
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 42, 42, 42, 1337, 42};
1049
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
1050
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .skipWhile([](const int value) { return (value == 42); })
1051
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1052
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
1053
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(sizeHint.upperBound.value(), input.size());
1054
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
1055 {
1056
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 42, 42, 42, 1337, 42};
1057
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input)
1058
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
7 .skipWhile([](const int value) { return (value == 42); }) // skip leading 42s
1059
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1060
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);
1061
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(1337, 42));
1062
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(1337, 42));
1063
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1064 }
1065
1066 8 TEST(CXXIter, take) {
1067 { // sizeHint
1068 {
1069
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 57, 64, 128, 1337, 10};
1070
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
1071
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .take(3)
1072
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1073
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 3);
1074
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(sizeHint.upperBound.value(), 3);
1075
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
1076 {
1077
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 57, 64, 128, 1337, 10};
1078
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
1079
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .take(32)
1080
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1081
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(sizeHint.lowerBound, input.size());
1082
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(sizeHint.upperBound.value(), input.size());
1083
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
1084 {
1085
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 57, 64, 128, 1337, 10};
1086
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
1087
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .take(0)
1088
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1089
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
1090
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(sizeHint.upperBound.value(), 0);
1091
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
1092 }
1093 {
1094
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 57, 64, 128, 1337, 10};
1095
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input)
1096
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .take(3) // take first 3 values
1097
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1098
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(), 3);
1099
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(42, 57, 64));
1100
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1101 {
1102
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::string input = "test";
1103
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::string output = CXXIter::from(input)
1104
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .take(3)
1105
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::basic_string>();
1106
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(), 3);
1107
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(output, "tes");
1108
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1109 {
1110
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::string input = "test";
1111
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::string output = CXXIter::from(input)
1112
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .take(0)
1113
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::basic_string>();
1114
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(), 0);
1115
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1116 }
1117
1118 8 TEST(CXXIter, takeWhile) {
1119 { // sizeHint
1120
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 42, 42, 42, 1337, 42};
1121
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
1122
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .takeWhile([](const int value) { return (value < 1000); })
1123
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1124
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
1125
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(sizeHint.upperBound.value(), input.size());
1126
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
1127 {
1128
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {42, 57, 64, 128, 1337, 10};
1129
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input)
1130
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
7 .takeWhile([](const int value) { return (value < 1000); }) // take until first item > 1000
1131
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1132
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);
1133
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(42, 57, 64, 128));
1134
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1135 }
1136
1137 8 TEST(CXXIter, flatMap) {
1138 { // sizeHint
1139
5/10
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 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.
10 std::vector<std::pair<std::string, std::vector<int>>> input = {{"first pair", {1337, 42}}, {"second pair", {6, 123, 7888}}};
1140
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 SizeHint sizeHint = CXXIter::from(std::move(input))
1141
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .flatMap([](auto&& item) { return std::get<1>(item); })
1142
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1143
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
1144
2/12
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ 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 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_FALSE(sizeHint.upperBound.has_value());
1145
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
1146 {
1147
5/10
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 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.
10 std::vector<std::pair<std::string, std::vector<int>>> input = {{"first pair", {1337, 42}}, {"second pair", {6, 123, 7888}}};
1148
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> output = CXXIter::from(std::move(input))
1149
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
6 .flatMap([](auto&& item) { return std::get<1>(item); }) // flatten the std::vector<int> from the pair
1150
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>(); // collect into vector containing {1337, 42, 6, 123, 7888}
1151
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(), 5);
1152
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(1337, 42, 6, 123, 7888));
1153
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1154 {
1155
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::vector<int>> input = {{1337, 42}, {6, 123, 7888}};
1156
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> output = CXXIter::from(std::move(input))
1157
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .flatMap()
1158
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>(); // collect into vector containing {1337, 42, 6, 123, 7888}
1159
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(), 5);
1160
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(1337, 42, 6, 123, 7888));
1161
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1162 }
1163
1164 #ifdef CXXITER_HAS_COROUTINE
1165 8 TEST(CXXIter, generateFrom) {
1166 {
1167
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {1337, 42};
1168
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input)
1169
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
4 .generateFrom([](const int& item) -> CXXIter::Generator<int> {
1170 for(int i = -2; i <= 2; ++i) {
1171 co_yield (item + i);
1172 }
1173
1/6
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
4 })
1174
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1175
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(1335, 1336, 1337, 1338, 1339, 40, 41, 42, 43, 44));
1176
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1177 { // cloning item reference - pass on as copied reference
1178
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> input = {"1337", "42"};
1179
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<std::string> output = CXXIter::from(input)
1180
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
4 .generateFrom([](const std::string& item) -> CXXIter::Generator<const std::string&> {
1181 for(size_t i = 0; i < item.size(); ++i) {
1182 co_yield item;
1183 }
1184
1/6
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
4 })
1185
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1186
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("1337", "1337", "1337", "1337", "42", "42"));
1187
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1188 { // cloning item - pass on as owned copy
1189
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> input = {"1337", "42"};
1190
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<std::string> output = CXXIter::from(input)
1191
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
4 .generateFrom([](const std::string& item) -> CXXIter::Generator<std::string> {
1192 for(size_t i = 0; i < item.size(); ++i) {
1193 co_yield item;
1194 }
1195
1/6
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
4 })
1196
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1197
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("1337", "1337", "1337", "1337", "42", "42"));
1198
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1199 {
1200
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> input = {"1337", "42"};
1201
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<std::string> output = CXXIter::from(std::move(input))
1202
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 .generateFrom([](std::string item) -> CXXIter::Generator<std::string> {
1203 for(size_t i = 0; i < item.size(); ++i) {
1204 co_yield item;
1205 }
1206
1/8
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
4 })
1207
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1208
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("1337", "1337", "1337", "1337", "42", "42"));
1209
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1210 { // generate different item type than input type
1211
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<size_t> input = {1, 2, 3, 4};
1212
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<std::string> output = CXXIter::from(std::move(input))
1213
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
8 .generateFrom([](size_t item) -> CXXIter::Generator<std::string> {
1214 for(size_t i = 0; i < item; ++i) {
1215 co_yield std::to_string(i);
1216 }
1217
1/6
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
8 })
1218
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1219
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("0", "0", "1", "0", "1", "2", "0", "1", "2", "3"));
1220
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1221 { // correct exception propagation
1222 try {
1223
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {1337, 42};
1224
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 std::vector<int> output = CXXIter::from(input)
1225
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
5 .generateFrom([](int item) -> CXXIter::Generator<int> {
1226 co_yield (item + 1);
1227 throw std::runtime_error("Exception From GeneratorFn");
1228
1/6
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
2 })
1229
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
2 .collect<std::vector>();
1230 ASSERT_TRUE(false); // unreachable!
1231
1/6
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
4 } catch (std::runtime_error& ex) {
1232
4/14
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_EQ(ex.what(), std::string("Exception From GeneratorFn"));
1233
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
2 }
1234 }
1235 { // empty return
1236
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> input = {"1337", "42"};
1237
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<std::string> output = CXXIter::from(std::move(input))
1238
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
6 .generateFrom([](std::string item) -> CXXIter::Generator<std::string> {
1239 if constexpr(false) {
1240 co_yield item;
1241 }
1242
1/8
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
4 })
1243
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1244
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(), 0);
1245
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());
1246
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1247 }
1248 #endif
1249
1250 8 TEST(CXXIter, stepBy) {
1251 {
1252
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
1253
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input)
1254
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .stepBy(1)
1255
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1256
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(), 11);
1257
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(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
1258
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1259 {
1260
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
1261
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input)
1262
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .stepBy(2)
1263
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1264
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(), 6);
1265
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(0, 2, 4, 6, 8, 10));
1266
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1267 {
1268
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
1269
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input)
1270
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .stepBy(3)
1271
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1272
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);
1273
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(0, 3, 6, 9));
1274
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1275 }
1276
1277 8 TEST(CXXIter, zip) {
1278 { // sizeHint
1279 {
1280
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"};
1281
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {1337, 42, 64, 31337};
1282
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 SizeHint sizeHint = CXXIter::from(input1).copied()
1283
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 .zip(CXXIter::from(input2).copied())
1284
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1285
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(sizeHint.lowerBound, input1.size());
1286
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(sizeHint.upperBound.value(), input1.size());
1287
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1288 {
1289
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"};
1290
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {1337, 42, 64, 31337};
1291
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 SizeHint sizeHint = CXXIter::from(input1).copied()
1292
4/8
✓ 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.
2 .zip(CXXIter::from(input2).copied().filter([](const auto&) { return true; }))
1293
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1294
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
1295
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(sizeHint.upperBound.value(), input1.size());
1296
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1297 {
1298
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"};
1299
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {1337, 42, 64, 31337};
1300
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 SizeHint sizeHint = CXXIter::from(input1).copied().filter([](const auto&) { return true; })
1301
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 .zip(CXXIter::from(input2).copied())
1302
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1303
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
1304
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(sizeHint.upperBound.value(), input1.size());
1305
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1306 }
1307 {
1308
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"};
1309
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {1337, 42};
1310
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<std::string, int>> output = CXXIter::from(input1).copied()
1311
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 .zip(CXXIter::from(input2).copied())
1312
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1313
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(output.size(), input1.size());
1314
7/20
✓ 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 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
2 ASSERT_THAT(output, ElementsAre(Pair("1337", 1337), Pair("42", 42)));
1315
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 }
1316 {
1317
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"};
1318
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {1337, 42, 80};
1319
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<std::string, int>> output = CXXIter::from(input1).copied()
1320
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 .zip(CXXIter::from(input2).copied())
1321
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1322
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);
1323
7/20
✓ 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 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
2 ASSERT_THAT(output, ElementsAre(Pair("1337", 1337), Pair("42", 42)));
1324
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 }
1325 {
1326
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> input1 = {"1337", "42", "80"};
1327
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {1337, 42};
1328
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<std::string, int>> output = CXXIter::from(input1).copied()
1329
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 .zip(CXXIter::from(input2).copied())
1330
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1331
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);
1332
7/20
✓ 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 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
2 ASSERT_THAT(output, ElementsAre(Pair("1337", 1337), Pair("42", 42)));
1333
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 }
1334 {
1335
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> input1 = {"1337", "42", "80"};
1336
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {1337, 42};
1337
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<std::pair<std::string&, int&>> output = CXXIter::from(input1)
1338
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 .zip(CXXIter::from(input2))
1339
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .modify([](std::pair<std::string&, int&> pair) {
1340 2 std::get<1>(pair) += 1;
1341 2 })
1342
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1343
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);
1344
7/20
✓ 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 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
2 ASSERT_THAT(output, ElementsAre(Pair("1337", 1338), Pair("42", 43)));
1345
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(input2, ElementsAre(1338, 43));
1346
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 }
1347 }
1348
1349 8 TEST(CXXIter, zipTuple) {
1350 { // sizeHint
1351 {
1352
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> input1 = {"1337", "42", "80"};
1353
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {1337, 42, 64, 31337};
1354
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input3 = {1337.0f, 42.0f};
1355
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 SizeHint sizeHint = CXXIter::from(input1).copied()
1356
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .zipTuple(
1357
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 CXXIter::from(input2).copied(),
1358
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 CXXIter::from(input3).copied()
1359 )
1360
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1361
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(sizeHint.lowerBound, input3.size());
1362
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(sizeHint.upperBound.value(), input3.size());
1363
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 }
1364 {
1365
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> input1 = {"1337", "42", "80"};
1366
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {1337, 42, 64, 31337};
1367
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input3 = {1337.0f, 42.0f};
1368
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 SizeHint sizeHint = CXXIter::from(input1).copied()
1369
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .zipTuple(
1370
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 CXXIter::from(input2).copied().filter([](const auto&) { return true; }),
1371
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 CXXIter::from(input3).copied()
1372 )
1373
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1374
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
1375
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(sizeHint.upperBound.value(), input3.size());
1376
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 }
1377 {
1378
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> input1 = {"1337", "42", "80"};
1379
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {1337, 42, 64, 31337};
1380
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input3 = {1337.0f, 42.0f};
1381
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 SizeHint sizeHint = CXXIter::from(input1).copied()
1382
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .zipTuple(
1383
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 CXXIter::from(input2).copied(),
1384
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 CXXIter::from(input3).copied().filter([](const auto&) { return true; })
1385 )
1386
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1387
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
1388
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(sizeHint.upperBound.value(), input3.size());
1389
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 }
1390 {
1391
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> input1 = {"1337", "42", "80"};
1392
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {1337, 42, 64, 31337};
1393
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input3 = {1337.0f, 42.0f};
1394
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 SizeHint sizeHint = CXXIter::from(input1).copied().filter([](const auto&) { return true; })
1395
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 13 taken 1 times.
✗ Branch 14 not taken.
2 .zipTuple(CXXIter::from(input2).copied(), CXXIter::from(input3).copied())
1396
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1397
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
1398
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(sizeHint.upperBound.value(), input3.size());
1399
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 }
1400 }
1401 {
1402
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> input1 = {"1337", "42", "31337"};
1403
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {1337, 42};
1404
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input3 = {1337.0f, 42.0f, 64.0f};
1405
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::vector<std::tuple<std::string, int, float>> output = CXXIter::from(input1).copied()
1406
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 13 taken 1 times.
✗ Branch 14 not taken.
2 .zipTuple(CXXIter::from(input2).copied(), CXXIter::from(input3).copied())
1407
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1408
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(output.size(), input2.size());
1409
7/20
✓ 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 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
2 ASSERT_THAT(output, ElementsAre(std::make_tuple("1337", 1337, 1337.0f), std::make_tuple("42", 42, 42.0f)));
1410
4/8
✓ 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.
2 }
1411 {
1412
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"};
1413
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {1337, 42, 80};
1414
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input3 = {1337.0f, 42.0f, 64.0f};
1415
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::vector<std::tuple<std::string, int, float>> output = CXXIter::from(input1).copied()
1416
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 13 taken 1 times.
✗ Branch 14 not taken.
2 .zipTuple(CXXIter::from(input2).copied(), CXXIter::from(input3).copied())
1417
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1418
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(output.size(), input1.size());
1419
7/20
✓ 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 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
2 ASSERT_THAT(output, ElementsAre(std::make_tuple("1337", 1337, 1337.0f), std::make_tuple("42", 42, 42.0f)));
1420
4/8
✓ 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.
2 }
1421 {
1422
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> input1 = {"1337", "42", "80"};
1423
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {1337, 42};
1424
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<float> input3 = {1337.0f};
1425
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::vector<std::tuple<std::string, int, float>> output = CXXIter::from(input1).copied()
1426
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 13 taken 1 times.
✗ Branch 14 not taken.
2 .zipTuple(CXXIter::from(input2).copied(), CXXIter::from(input3).copied())
1427
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1428
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(output.size(), input3.size());
1429
6/18
✓ 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 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
2 ASSERT_THAT(output, ElementsAre(std::make_tuple("1337", 1337, 1337.0f)));
1430
4/8
✓ 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.
2 }
1431 }
1432
1433 8 TEST(CXXIter, chain) {
1434 { // sizeHint
1435 {
1436
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"};
1437
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> input2 = {"31337", "64"};
1438
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 SizeHint sizeHint = CXXIter::from(input1).copied()
1439
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 .chain(CXXIter::from(input2).copied())
1440
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1441
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 4);
1442
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(sizeHint.upperBound.value(), 4);
1443
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1444 {
1445
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"};
1446
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> input2 = {"31337", "64"};
1447
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 SizeHint sizeHint = CXXIter::from(input1).copied()
1448
4/8
✓ 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.
2 .chain(CXXIter::from(input2).copied().filter([](const auto&) { return true; }))
1449
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1450
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 2);
1451
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(sizeHint.upperBound.value(), 4);
1452
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1453 {
1454
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"};
1455
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> input2 = {"31337", "64"};
1456
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 SizeHint sizeHint = CXXIter::from(input1).copied().filter([](const auto&) { return true; })
1457
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 .chain(CXXIter::from(input2).copied())
1458
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1459
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 2);
1460
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(sizeHint.upperBound.value(), 4);
1461
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1462 {
1463
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"};
1464
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
4 auto iter2 = CXXIter::repeat<std::string>("endless");
1465
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 SizeHint sizeHint = CXXIter::from(input1).copied().filter([](const auto&) { return true; })
1466
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
4 .chain(iter2.copied())
1467
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1468
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, SizeHint::INFINITE);
1469
2/12
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ 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 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_FALSE(sizeHint.upperBound.has_value());
1470
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1471 }
1472 {
1473
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"};
1474
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> input2 = {"31337", "64"};
1475
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::vector<std::string> output = CXXIter::from(input1).copied()
1476
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 .chain(CXXIter::from(input2).copied())
1477
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1478
3/12
✓ 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(output.size(), input1.size() + input2.size());
1479
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("1337", "42", "31337", "64"));
1480
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 }
1481 {
1482
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"};
1483 2 std::vector<std::string> input2 = {};
1484
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::vector<std::string> output = CXXIter::from(input1).copied()
1485
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 .chain(CXXIter::from(input2).copied())
1486
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1487
3/12
✓ 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(output.size(), input1.size() + input2.size());
1488
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("1337", "42"));
1489
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 }
1490 {
1491 2 std::vector<std::string> input1 = {};
1492
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", "80"};
1493
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::vector<std::string> output = CXXIter::from(input1).copied()
1494
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 .chain(CXXIter::from(input2).copied())
1495
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1496
3/12
✓ 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(output.size(), input1.size() + input2.size());
1497
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("31337", "64", "80"));
1498
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 }
1499 {
1500
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
8 std::vector<std::string> input1 = {"asdf"};
1501
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", "80"};
1502
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::vector<std::string> output = CXXIter::from(input1).copied()
1503
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)))
1504
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1505
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);
1506
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("asdf", "31337", "64", "80"));
1507
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 }
1508 }
1509
1510 8 TEST(CXXIter, alternate) {
1511 { // sizeHint
1512 {
1513
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input1 = {1, 3, 5, 7, 9};
1514
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {2, 4, 6, 8, 10};
1515
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input3 = {100, 200, 300, 400, 500};
1516
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input1)
1517
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 .alternate(CXXIter::from(input2), CXXIter::from(input3))
1518
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1519
3/12
✓ 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(sizeHint.lowerBound, input1.size() + input2.size() + input3.size());
1520
4/14
✓ 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(sizeHint.upperBound.value(), input1.size() + input2.size() + input3.size());
1521
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 }
1522 {
1523
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input1 = {1, 3, 5, 7};
1524
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {2, 4, 6, 8, 10};
1525
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input3 = {100, 200, 300, 400, 500};
1526
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input1)
1527
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 .alternate(CXXIter::from(input2), CXXIter::from(input3))
1528
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1529
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(sizeHint.lowerBound, input1.size() * 3);
1530
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(sizeHint.upperBound.value(), input1.size() * 3);
1531
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 }
1532 {
1533
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input1 = {1, 3, 5, 7, 9};
1534
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {2, 4, 6, 8};
1535
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input3 = {100, 200, 300, 400, 500};
1536
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input1)
1537
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 .alternate(CXXIter::from(input2), CXXIter::from(input3))
1538
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1539
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(sizeHint.lowerBound, input2.size() * 3 + 1);
1540
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(sizeHint.upperBound.value(), input2.size() * 3 + 1);
1541
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 }
1542 {
1543
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input1 = {1, 3, 5, 7, 9};
1544
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {2, 4, 6, 8, 10};
1545
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input3 = {100, 200, 300, 400};
1546
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input1)
1547
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 .alternate(CXXIter::from(input2), CXXIter::from(input3))
1548
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1549
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(sizeHint.lowerBound, input3.size() * 3 + 2);
1550
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(sizeHint.upperBound.value(), input3.size() * 3 + 2);
1551
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 }
1552 }
1553 {
1554
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input1 = {1, 3, 5, 7, 9};
1555
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {2, 4, 6, 8, 10};
1556
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input3 = {100, 200, 300, 400, 500};
1557
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input1)
1558
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 .alternate(CXXIter::from(input2), CXXIter::from(input3))
1559
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1560
3/12
✓ 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(output.size(), input1.size() + input2.size() + input3.size());
1561
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(1, 2, 100, 3, 4, 200, 5, 6, 300, 7, 8, 400, 9, 10, 500));
1562
4/8
✓ 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.
2 }
1563 {
1564
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input1 = {1, 3, 5, 7};
1565
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {2, 4, 6, 8, 10};
1566
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input3 = {100, 200, 300, 400, 500};
1567
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input1)
1568
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 .alternate(CXXIter::from(input2), CXXIter::from(input3))
1569
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1570
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(output.size(), input1.size() * 3);
1571
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(1, 2, 100, 3, 4, 200, 5, 6, 300, 7, 8, 400));
1572
4/8
✓ 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.
2 }
1573 {
1574
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input1 = {1, 3, 5, 7, 9};
1575
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {2, 4, 6, 8};
1576
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input3 = {100, 200, 300, 400, 500};
1577
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input1)
1578
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 .alternate(CXXIter::from(input2), CXXIter::from(input3))
1579
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1580
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(output.size(), input2.size() * 3 + 1);
1581
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(1, 2, 100, 3, 4, 200, 5, 6, 300, 7, 8, 400, 9));
1582
4/8
✓ 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.
2 }
1583 {
1584
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input1 = {1, 3, 5, 7, 9};
1585
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input2 = {2, 4, 6, 8, 10};
1586
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input3 = {100, 200, 300, 400};
1587
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<int> output = CXXIter::from(input1)
1588
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 .alternate(CXXIter::from(input2), CXXIter::from(input3))
1589
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1590
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(output.size(), input3.size() * 3 + 2);
1591
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(1, 2, 100, 3, 4, 200, 5, 6, 300, 7, 8, 400, 9, 10));
1592
4/8
✓ 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.
2 }
1593 }
1594
1595 8 TEST(CXXIter, intersperse) {
1596 { // sizeHint
1597 {
1598
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = { 1, 2, 3, 4, 5, 6 };
1599
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 SizeHint sizeHint = CXXIter::from(input).copied()
1600
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 .intersperse(CXXIter::repeat(0))
1601
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1602
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(sizeHint.lowerBound, input.size() * 2 - 1);
1603
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(sizeHint.upperBound.value(), input.size() * 2 - 1);
1604
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
1605 {
1606
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> input = { "Apple", "Orange", "Cake" };
1607
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 SizeHint sizeHint = CXXIter::from(input).copied()
1608
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>(", "))
1609
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1610
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(sizeHint.lowerBound, input.size() * 2 - 1);
1611
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(sizeHint.upperBound.value(), input.size() * 2 - 1);
1612
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
1613 { // separator iterator ends too early
1614
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = { 1, 2, 3, 4, 5, 6 };
1615
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 SizeHint sizeHint = CXXIter::from(input).copied()
1616
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 .intersperse(CXXIter::range(100, 102, 1))
1617
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1618
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 4 + 3);
1619
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(sizeHint.upperBound.value(), 4 + 3);
1620
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
1621 { // separator iterator empty
1622
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = { 1, 2, 3, 4, 5, 6 };
1623
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 SizeHint sizeHint = CXXIter::from(input).copied()
1624
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 .intersperse(CXXIter::empty<int>())
1625
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1626
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 1);
1627
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(sizeHint.upperBound.value(), 1);
1628
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
1629 { // input empty
1630 2 SizeHint sizeHint = CXXIter::empty<int>()
1631
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 .intersperse(CXXIter::repeat<int>(0))
1632
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1633
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 0);
1634
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(sizeHint.upperBound.value(), 0);
1635 }
1636 }
1637 {
1638
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = { 1, 2, 3, 4, 5, 6 };
1639
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::vector<int> output = CXXIter::from(input).copied()
1640
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 .intersperse(CXXIter::repeat(0))
1641
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1642
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(output.size(), input.size() * 2 - 1);
1643
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(1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6));
1644
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1645 {
1646
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> input = { "Apple", "Orange", "Cake" };
1647
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::vector<std::string> output = CXXIter::from(input).copied()
1648
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>(", "))
1649
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1650
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(output.size(), input.size() * 2 - 1);
1651
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("Apple", ", ", "Orange", ", ", "Cake"));
1652
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1653 { // separator iterator ends too early
1654
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = { 1, 2, 3, 4, 5, 6 };
1655
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::vector<int> output = CXXIter::from(input).copied()
1656
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 .intersperse(CXXIter::range(100, 102, 1))
1657
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1658
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(), 7);
1659
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(1, 100, 2, 101, 3, 102, 4));
1660
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1661 { // separator iterator empty
1662
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<int> input = { 1, 2, 3, 4, 5, 6 };
1663
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::vector<int> output = CXXIter::from(input).copied()
1664
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 .intersperse(CXXIter::empty<int>())
1665
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1666
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(), 1);
1667
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(1));
1668
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1669 }
1670
1671 8 TEST(CXXIter, groupBy) {
1672 struct CakeMeasurement {
1673 std::string cakeType;
1674 float cakeWeight;
1675 3 bool operator==(const CakeMeasurement& o) const {
1676
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
3 return cakeType == o.cakeType && cakeWeight == o.cakeWeight;
1677 }
1678 };
1679
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<CakeMeasurement> input = { {"ApplePie", 1.3f}, {"Sacher", 0.5f}, {"ApplePie", 1.8f} };
1680
1681 { // sizeHint
1682
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
1683
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .groupBy([](const CakeMeasurement& item) { return item.cakeType; })
1684
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1685
3/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(sizeHint.lowerBound, 1);
1686
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(sizeHint.upperBound.value(), input.size());
1687 }
1688 {
1689
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
1690
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
5 .groupBy([](const CakeMeasurement& item) { return item.cakeType; })
1691
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::unordered_map>();
1692
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);
1693
5/16
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 30 not taken.
2 ASSERT_EQ(output["ApplePie"].size(), 2);
1694
5/16
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 30 not taken.
4 ASSERT_EQ(output["ApplePie"][0], input[0]);
1695
5/16
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 30 not taken.
4 ASSERT_EQ(output["ApplePie"][1], input[2]);
1696
5/16
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 30 not taken.
2 ASSERT_EQ(output["Sacher"].size(), 1);
1697
5/16
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 30 not taken.
4 ASSERT_EQ(output["Sacher"][0], input[1]);
1698
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
1699 { // mapping of groupIdentifier to first value of each group
1700
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto output = CXXIter::from(input)
1701
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
5 .groupBy([](const CakeMeasurement& item) { return item.cakeType; })
1702
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
6 .map([](std::pair<std::string, std::vector<CakeMeasurement>>&& itemGroup) {
1703 2 return std::make_pair(itemGroup.first, itemGroup.second[0]);
1704 })
1705
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::unordered_map>();
1706
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);
1707
5/16
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
4 ASSERT_EQ(output["ApplePie"].cakeType, "ApplePie");
1708
5/16
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
4 ASSERT_EQ(output["ApplePie"].cakeWeight, 1.3f);
1709
5/16
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
4 ASSERT_EQ(output["Sacher"].cakeType, "Sacher");
1710
5/16
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
4 ASSERT_EQ(output["Sacher"].cakeWeight, 0.5f);
1711
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
1712 {
1713
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 auto output = CXXIter::from(std::move(input))
1714
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
7 .groupBy([](const CakeMeasurement& item) { return item.cakeType; })
1715
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::unordered_map>();
1716
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);
1717
5/16
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 30 not taken.
2 ASSERT_EQ(output["ApplePie"].size(), 2);
1718
5/16
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
4 ASSERT_EQ(output["ApplePie"][0].cakeType, "ApplePie");
1719
5/16
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
4 ASSERT_EQ(output["ApplePie"][0].cakeWeight, 1.3f);
1720
5/16
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
4 ASSERT_EQ(output["ApplePie"][1].cakeType, "ApplePie");
1721
5/16
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
4 ASSERT_EQ(output["ApplePie"][1].cakeWeight, 1.8f);
1722
5/16
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 30 not taken.
2 ASSERT_EQ(output["Sacher"].size(), 1);
1723
5/16
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
4 ASSERT_EQ(output["Sacher"][0].cakeType, "Sacher");
1724
5/16
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
4 ASSERT_EQ(output["Sacher"][0].cakeWeight, 0.5f);
1725
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
1726 {
1727 2 std::vector<CakeMeasurement> emptyInput;
1728
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 auto output = CXXIter::from(std::move(emptyInput))
1729
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .groupBy([](const CakeMeasurement& item) { return item.cakeType; })
1730
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::unordered_map>();
1731
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(), 0);
1732
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1733
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
1734
1735 8 TEST(CXXIter, sort) {
1736 { // sizeHint
1737
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};
1738
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 SizeHint sizeHint = CXXIter::from(input)
1739
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 .sort<false>([](const float& a, const float& b) {
1740 return (a < b);
1741 })
1742
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sizeHint();
1743
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(sizeHint.lowerBound, input.size());
1744
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(sizeHint.upperBound.value(), input.size());
1745
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
1746 { // ASCENDING
1747
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};
1748
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<float> output = CXXIter::from(input)
1749
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
8 .sort<false>([](const float& a, const float& b) {
1750 6 return (a < b);
1751 })
1752
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1753
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(output.size(), input.size());
1754
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(-42.0f, 0.5f, 1.0f, 2.0f, 3.0f));
1755
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1756 { // DESCENDING
1757
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};
1758
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<float> output = CXXIter::from(input)
1759
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
8 .sort<false>([](const float& a, const float& b) {
1760 6 return (a > b);
1761 })
1762
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1763
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(output.size(), input.size());
1764
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(3.0f, 2.0f, 1.0f, 0.5f, -42.0f));
1765
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1766 { // ASCENDING
1767
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};
1768
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<float> output = CXXIter::from(input)
1769
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sort<CXXIter::ASCENDING, false>()
1770
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1771
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(output.size(), input.size());
1772
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(-42.0f, 0.5f, 1.0f, 2.0f, 3.0f));
1773
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1774 { // DESCENDING
1775
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};
1776
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::vector<float> output = CXXIter::from(input)
1777
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .sort<CXXIter::DESCENDING, false>()
1778
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 .collect<std::vector>();
1779
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(output.size(), input.size());
1780
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(3.0f, 2.0f, 1.0f, 0.5f, -42.0f));
1781
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
1782 }
1783
1784 4 TEST(CXXIter, sortBy) {
1785 { // sizeHint
1786 8 std::vector<std::string> input = {"test1", "test2", "test23", "test", "tes"};
1787 1 SizeHint sizeHint = CXXIter::from(input)
1788 2 .sortBy<CXXIter::ASCENDING, true>([](const std::string& item) { return item.size(); })
1789 1 .sizeHint();
1790 1 ASSERT_EQ(sizeHint.lowerBound, input.size());
1791 1 ASSERT_EQ(sizeHint.upperBound.value(), input.size());
1792 1 }
1793 { // ASCENDING
1794 8 std::vector<std::string> input = {"test1", "test2", "test23", "test", "tes"};
1795 1 std::vector<std::string> output = CXXIter::from(input)
1796 17 .sortBy<CXXIter::ASCENDING, true>([](const std::string& item) { return item.size(); })
1797 1 .collect<std::vector>();
1798 1 ASSERT_EQ(output.size(), input.size());
1799 1 ASSERT_THAT(output, ElementsAre("tes", "test", "test1", "test2", "test23"));
1800 1 }
1801 { // DESCENDING
1802 8 std::vector<std::string> input = {"test1", "test2", "test23", "test", "tes"};
1803 1 std::vector<std::string> output = CXXIter::from(input)
1804 15 .sortBy<CXXIter::DESCENDING, true>([](const std::string& item) { return item.size(); })
1805 1 .collect<std::vector>();
1806 1 ASSERT_EQ(output.size(), input.size());
1807 1 ASSERT_THAT(output, ElementsAre("test23", "test1", "test2", "test", "tes"));
1808 1 }
1809
1810 { // Lambda capture
1811 1 float ref = 600.0;
1812 7 std::vector<std::string> input = {"1337", "55", "500", "10000"};
1813 1 auto output = CXXIter::from(input)
1814 9 .sortBy([&](const std::string& val) { return std::abs(std::stof(val) - ref); })
1815 1 .collect<std::vector>();
1816 1 ASSERT_EQ(output.size(), input.size());
1817 1 ASSERT_THAT(output, ElementsAre("500", "55", "1337", "10000"));
1818 1 }
1819 }
1820