GCC Code Coverage Report


Directory: ./
File: tests/TestContiguousMemory.cpp
Date: 2023-01-04 16:32:12
Exec Total Coverage
Lines: 29 29 100.0%
Functions: 9 9 100.0%
Branches: 36 96 37.5%

Line Branch Exec Source
1 #include <iostream>
2 #include <vector>
3 #include <functional>
4 #include <string>
5 #include <optional>
6 #include <set>
7 #include <map>
8 #include <list>
9 #include <deque>
10 #include <unordered_set>
11 #include <unordered_map>
12
13 #include "TestCommon.h"
14
15 using namespace CXXIter;
16
17
18 8 TEST(CXXIter, ContiguousMemoryCompile) {
19
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<uint32_t> src = {1, 3, 3, 7};
20
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto rawIter = CXXIter::from(src);
21
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 auto skipIter = CXXIter::from(src).skip(1);
22
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 auto filterIter = CXXIter::from(src).filter([](uint32_t val) { return (val > 3); });
23
24 static_assert(CXXIterContiguousMemoryIterator<decltype(rawIter)>);
25 static_assert(CXXIterContiguousMemoryIterator<decltype(skipIter)>);
26 static_assert(!CXXIterContiguousMemoryIterator<decltype(filterIter)>);
27 2 }
28
29 8 TEST(CXXIter, ContiguousSource) {
30 { // SrcCRef
31
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 const std::vector<uint32_t> src = {1, 3, 3, 7};
32
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto iter = CXXIter::from(src);
33 using ContiguousTrait = trait::ContiguousMemoryIterator<decltype(iter)>;
34
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ContiguousTrait::ItemPtr itemPtr = ContiguousTrait::currentPtr(iter);
35
3/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(itemPtr, &src[0]);
36
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
37 { // SrcRef
38
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<uint32_t> src = {1, 3, 3, 7};
39
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto iter = CXXIter::from(src);
40 using ContiguousTrait = trait::ContiguousMemoryIterator<decltype(iter)>;
41
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ContiguousTrait::ItemPtr itemPtr = ContiguousTrait::currentPtr(iter);
42
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(itemPtr, &src[0]);
43
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
44 { // SrcMov
45
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<uint32_t> src = {1, 3, 3, 7};
46 // The src will be moved into the iterator, but the heap memory region for the
47 // actual vector elements will stay the same, so we take the pointer before
48 // constructing an iterator here.
49 2 uint32_t* firstElementPtr = &src[0];
50
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 auto iter = CXXIter::from(std::move(src));
51 using ContiguousTrait = trait::ContiguousMemoryIterator<decltype(iter)>;
52
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ContiguousTrait::ItemPtr itemPtr = ContiguousTrait::currentPtr(iter);
53
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(itemPtr, firstElementPtr);
54
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 }
55 }
56
57 8 TEST(CXXIter, ContiguousSkipN) {
58
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::vector<uint32_t> src = {1, 3, 3, 7};
59
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(src).skip(1);
60 using ContiguousTrait = trait::ContiguousMemoryIterator<decltype(iter)>;
61
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ContiguousTrait::ItemPtr itemPtr = ContiguousTrait::currentPtr(iter);
62
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(itemPtr, &src[1]);
63
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 }
64