1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
#include <catch.hpp>
#include "FWCore/Utilities/interface/VecArray.h"
template <typename T>
void testIterator(T iter, T end) {
REQUIRE(iter != end);
REQUIRE(*iter == 1);
++iter;
REQUIRE(iter != end);
REQUIRE(*iter == 2);
++iter;
REQUIRE(iter != end);
REQUIRE(*iter == 3);
++iter;
REQUIRE(iter != end);
REQUIRE(*iter == 4);
++iter;
REQUIRE(iter == end);
}
template <typename T>
void testIterators(T& array) {
testIterator(array.begin(), array.end());
testIterator(array.cbegin(), array.cend());
}
TEST_CASE("edm::VecArray", "[VecArray]") {
edm::VecArray<int, 4> array;
REQUIRE(array.empty());
REQUIRE(array.size() == 0);
REQUIRE(array.capacity() == 4);
REQUIRE((edm::VecArray<int, 4>::capacity() == 4));
auto iter = array.begin();
auto end = array.end();
REQUIRE(iter == end);
array.push_back_unchecked(1);
REQUIRE(!array.empty());
REQUIRE(array.size() == 1);
REQUIRE(array.front() == 1);
REQUIRE(array.back() == 1);
iter = array.begin();
end = array.end();
REQUIRE(iter != end);
REQUIRE(*iter == 1);
++iter;
REQUIRE(iter == end);
array.emplace_back_unchecked(2);
REQUIRE(array.size() == 2);
REQUIRE(array.back() == 2);
array.push_back(3);
REQUIRE(array.size() == 3);
REQUIRE(array.back() == 3);
array.emplace_back(4);
REQUIRE(array.size() == 4);
REQUIRE(array.front() == 1);
REQUIRE(array.back() == 4);
REQUIRE((array[0] == 1 && array[1] == 2 && array[2] == 3 && array[3] == 4));
REQUIRE_THROWS_AS(array.push_back(5), std::length_error);
REQUIRE_THROWS_AS(array.emplace_back(5), std::length_error);
auto ptr = array.data();
REQUIRE((ptr[0] == 1 && ptr[1] == 2 && ptr[2] == 3 && ptr[3] == 4));
testIterators(array);
testIterators(const_cast<const decltype(array)&>(array));
edm::VecArray<int, 4> array2;
array2.push_back(11);
array2.push_back(12);
array.swap(array2);
REQUIRE(array.size() == 2);
REQUIRE(array2.size() == 4);
REQUIRE((array[0] == 11 && array[1] == 12));
REQUIRE((array2[0] == 1 && array2[1] == 2 && array2[2] == 3 && array2[3] == 4));
array = array2;
REQUIRE(array.size() == array2.size());
REQUIRE(array.size() == 4);
REQUIRE((array[0] == 1 && array[1] == 2 && array[2] == 3 && array[3] == 4));
REQUIRE((array2[0] == 1 && array2[1] == 2 && array2[2] == 3 && array2[3] == 4));
ptr = array.data();
ptr[1] = 10;
iter = array.begin() + 1;
REQUIRE(*iter == 10);
iter = array.begin() + 2;
*iter = 50;
REQUIRE((array[0] == 1 && array[1] == 10 && array[2] == 50 && array[3] == 4));
REQUIRE(!array.empty());
array.clear();
REQUIRE(array.empty());
REQUIRE(array.size() == 0);
REQUIRE(array2.size() == 4);
array.resize(2);
REQUIRE(array.size() == 2);
array.pop_back();
REQUIRE(array.size() == 1);
REQUIRE_THROWS_AS(array.resize(6), std::length_error);
REQUIRE(array.size() == 1);
array.resize(4);
REQUIRE(array.size() == 4);
array.resize(1);
REQUIRE(array.size() == 1);
}
|