Blender V4.3
BLI_bit_vector_test.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#include "testing/testing.h"
6
7#include "BLI_bit_vector.hh"
9
10#include "BLI_strict_flags.h" /* Keep last. */
11
12namespace blender::bits::tests {
13
14TEST(bit_vector, DefaultConstructor)
15{
16 BitVector vec;
17 EXPECT_EQ(vec.size(), 0);
18}
19
20TEST(bit_vector, CopyConstructorInline)
21{
22 BitVector<> vec({false, false, true, true, false});
23 BitVector<> vec2 = vec;
24
25 EXPECT_EQ(vec.size(), 5);
26 EXPECT_EQ(vec2.size(), 5);
27
28 vec2[1].set();
29 EXPECT_FALSE(vec[1]);
30
31 EXPECT_FALSE(vec2[0]);
32 EXPECT_TRUE(vec2[1]);
33 EXPECT_TRUE(vec2[2]);
34 EXPECT_TRUE(vec2[3]);
35 EXPECT_FALSE(vec2[4]);
36}
37
38TEST(bit_vector, CopyConstructorLarge)
39{
40 BitVector<> vec(500, false);
41 vec[1].set();
42
43 BitVector<> vec2 = vec;
44
45 EXPECT_EQ(vec.size(), 500);
46 EXPECT_EQ(vec2.size(), 500);
47
48 vec2[2].set();
49 EXPECT_FALSE(vec[2]);
50
51 EXPECT_FALSE(vec2[0]);
52 EXPECT_TRUE(vec2[1]);
53 EXPECT_TRUE(vec2[2]);
54}
55
56TEST(bit_vector, MoveConstructorInline)
57{
58 BitVector<> vec({false, false, true, true, false});
59 BitVector<> vec2 = std::move(vec);
60
61 EXPECT_EQ(vec.size(), 0);
62 EXPECT_EQ(vec2.size(), 5);
63
64 EXPECT_FALSE(vec2[0]);
65 EXPECT_FALSE(vec2[1]);
66 EXPECT_TRUE(vec2[2]);
67 EXPECT_TRUE(vec2[3]);
68 EXPECT_FALSE(vec2[4]);
69}
70
71TEST(bit_vector, MoveConstructorLarge)
72{
73 BitVector<> vec(500, false);
74 vec[3].set();
75
76 BitVector<> vec2 = std::move(vec);
77
78 EXPECT_EQ(vec.size(), 0);
79 EXPECT_EQ(vec2.size(), 500);
80
81 EXPECT_FALSE(vec2[0]);
82 EXPECT_FALSE(vec2[1]);
83 EXPECT_FALSE(vec2[2]);
84 EXPECT_TRUE(vec2[3]);
85 EXPECT_FALSE(vec2[4]);
86}
87
88TEST(bit_vector, SizeConstructor)
89{
90 {
91 BitVector<> vec(0);
92 EXPECT_EQ(vec.size(), 0);
93 }
94 {
95 BitVector<> vec(5);
96 EXPECT_EQ(vec.size(), 5);
97 for (BitRef bit : vec) {
98 EXPECT_FALSE(bit);
99 }
100 }
101 {
102 BitVector<> vec(123);
103 EXPECT_EQ(vec.size(), 123);
104 for (BitRef bit : vec) {
105 EXPECT_FALSE(bit);
106 }
107 }
108}
109
110TEST(bit_vector, SizeFillConstructor)
111{
112 {
113 BitVector<> vec(5, false);
114 for (const int64_t i : IndexRange(5)) {
115 EXPECT_FALSE(vec[i]);
116 }
117 }
118 {
119 BitVector<> vec(123, true);
120 for (const int64_t i : IndexRange(123)) {
121 EXPECT_TRUE(vec[i]);
122 }
123 }
124}
125
126TEST(bit_vector, IndexAccess)
127{
128 BitVector<> vec(100, false);
129 vec[55].set();
130 EXPECT_FALSE(vec[50]);
131 EXPECT_FALSE(vec[51]);
132 EXPECT_FALSE(vec[52]);
133 EXPECT_FALSE(vec[53]);
134 EXPECT_FALSE(vec[54]);
135 EXPECT_TRUE(vec[55]);
136 EXPECT_FALSE(vec[56]);
137 EXPECT_FALSE(vec[57]);
138 EXPECT_FALSE(vec[58]);
139}
140
141TEST(bit_vector, Iterator)
142{
143 BitVector<> vec(100, false);
144 {
145 int64_t index = 0;
146 for (MutableBitRef bit : vec) {
147 bit.set(ELEM(index, 0, 4, 7, 10, 11));
148 index++;
149 }
150 }
151 {
152 int64_t index = 0;
153 for (BitRef bit : const_cast<const BitVector<> &>(vec)) {
154 EXPECT_EQ(bit, ELEM(index, 0, 4, 7, 10, 11));
155 index++;
156 }
157 }
158}
159
160TEST(bit_vector, Append)
161{
162 BitVector<> vec;
163 vec.append(false);
164 vec.append(true);
165 vec.append(true);
166 vec.append(false);
167
168 EXPECT_EQ(vec.size(), 4);
169 EXPECT_FALSE(vec[0]);
170 EXPECT_TRUE(vec[1]);
171 EXPECT_TRUE(vec[2]);
172 EXPECT_FALSE(vec[3]);
173}
174
175TEST(bit_vector, AppendMany)
176{
177 BitVector<> vec;
178 for (const int64_t i : IndexRange(1000)) {
179 vec.append(i % 2);
180 }
181 EXPECT_FALSE(vec[0]);
182 EXPECT_TRUE(vec[1]);
183 EXPECT_FALSE(vec[2]);
184 EXPECT_TRUE(vec[3]);
185 EXPECT_FALSE(vec[4]);
186 EXPECT_TRUE(vec[5]);
187}
188
189} // namespace blender::bits::tests
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
#define ELEM(...)
void append(const bool value)
TEST(bit_group_vector, DefaultConstruct)
__int64 int64_t
Definition stdint.h:89