Blender
V4.3
source
blender
blenlib
tests
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
"
8
#include "
BLI_exception_safety_test_utils.hh
"
9
10
#include "
BLI_strict_flags.h
"
/* Keep last. */
11
12
namespace
blender::bits::tests
{
13
14
TEST
(bit_vector, DefaultConstructor)
15
{
16
BitVector
vec;
17
EXPECT_EQ
(vec.
size
(), 0);
18
}
19
20
TEST
(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
38
TEST
(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
56
TEST
(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
71
TEST
(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
88
TEST
(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
110
TEST
(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
126
TEST
(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
141
TEST
(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
160
TEST
(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
175
TEST
(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
BLI_bit_vector.hh
BLI_exception_safety_test_utils.hh
EXPECT_EQ
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
BLI_strict_flags.h
ELEM
#define ELEM(...)
Definition
BLI_utildefines.h:144
blender::IndexRange
Definition
BLI_index_range.hh:50
blender::bits::BitRef
Definition
BLI_bit_ref.hh:85
blender::bits::BitVector
Definition
BLI_bit_vector.hh:57
blender::bits::BitVector::size
int64_t size() const
Definition
BLI_bit_vector.hh:196
blender::bits::BitVector::append
void append(const bool value)
Definition
BLI_bit_vector.hh:252
blender::bits::MutableBitRef
Definition
BLI_bit_ref.hh:126
blender::bits::tests
Definition
BLI_bit_group_vector_test.cc:11
blender::bits::tests::TEST
TEST(bit_group_vector, DefaultConstruct)
Definition
BLI_bit_group_vector_test.cc:13
int64_t
__int64 int64_t
Definition
stdint.h:89
Generated on Thu Feb 6 2025 07:36:39 for Blender by
doxygen
1.11.0