14#include "testing/testing.h"
18TEST(bit_span, DefaultConstructor)
22 memset(buffer, 0xff,
sizeof(
BitSpan));
42 for (
const BitRef bit : span) {
48TEST(bit_span, MutableIteration)
55 bit.set(index % 4 == 0);
59 0b0000'0000'0000'0000'0000'0000'0001'0001'0001'0001'0001'0001'0001'0001'0001'0001);
62TEST(bit_span, SubscriptOperator)
73 EXPECT_FALSE(mutable_span[5].test());
74 EXPECT_FALSE(span[5].test());
75 mutable_span[5].set(
true);
76 EXPECT_TRUE(mutable_span[5].test());
77 EXPECT_TRUE(span[5].test());
79 EXPECT_FALSE(mutable_span[120].test());
80 EXPECT_FALSE(span[120].test());
81 mutable_span[120].set(
true);
82 EXPECT_TRUE(mutable_span[120].test());
83 EXPECT_TRUE(span[120].test());
86 0b0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0010'0000);
88 0b0000'0001'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000);
91TEST(bit_span, RangeConstructor)
97 EXPECT_FALSE(mutable_span[1].test());
98 EXPECT_FALSE(span[1].test());
99 mutable_span[0].set(
true);
100 mutable_span[1].set(
true);
101 mutable_span[2].set(
true);
102 mutable_span[0].set(
false);
103 mutable_span[2].set(
false);
104 EXPECT_TRUE(mutable_span[1].test());
105 EXPECT_TRUE(span[1].test());
108 0b0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0010'0000);
121 0b0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'1111'1111'0000);
125 0b0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'1111'0000);
136 std::array<uint64_t, 10>
data;
137 memset(
data.data(), 0,
sizeof(
data));
154 std::array<uint64_t, 10>
data;
181 std::array<uint64_t, 30> src_data;
189 std::array<uint64_t, 4> dst_data;
195 EXPECT_TRUE(dst[
i].test() == src[401 +
i].test());
201 std::array<uint64_t, 100> data_1;
204 span_1[
i].set(
i % 2 == 0);
207 std::array<uint64_t, 100> data_2;
210 span_2[
i].set(
i % 2 != 0);
215 EXPECT_TRUE(span_1[
i].test());
221 std::array<uint64_t, 100> data_1{};
224 span_1[
i].set(
i % 2 == 0);
227 std::array<uint64_t, 100> data_2{};
230 span_2[
i].set(
i % 2 != 0);
235 EXPECT_FALSE(span_1[
i].test());
241 std::array<uint64_t, 2>
data{};
243 for (
const int i : {1, 28, 37, 86}) {
329 [](
const BitInt a,
const BitInt b) {
return a ^
b; }, vec_a, vec_b),
364 EXPECT_TRUE(
bits[0]);
365 EXPECT_FALSE(
bits[1]);
366 EXPECT_TRUE(
bits[2]);
367 EXPECT_FALSE(
bits[3]);
368 EXPECT_FALSE(
bits[4]);
375 EXPECT_FALSE(
bits[99]);
376 EXPECT_TRUE(
bits[100]);
377 EXPECT_TRUE(
bits[101]);
378 EXPECT_TRUE(
bits[199]);
379 EXPECT_FALSE(
bits[200]);
383TEST(bit_span, to_index_ranges_small)
401TEST(bit_span, to_index_ranges_all_ones)
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
BMesh const char void * data
unsigned long long int uint64_t
static constexpr IndexRange from_begin_size(const int64_t begin, const int64_t size)
static constexpr IndexRange from_begin_end_inclusive(const int64_t begin, const int64_t last)
Span< T > as_span() const
const BitInt * data() const
BitSpan slice(const IndexRange range) const
const IndexRange & bit_range() const
MutableBitSpan slice(const IndexRange range) const
const IndexRange & bit_range() const
IndexRange index_range() const
void copy_from(const BitSpan other)
TEST(bit_group_vector, DefaultConstruct)
bool or_bools_into_bits(Span< bool > bools, MutableBitSpan r_bits, int64_t allowed_overshoot=0)
std::optional< int64_t > find_first_1_index_expr(ExprFn &&Expr, const FirstBitSpanT &first_arg, const BitSpanT &...args)
static constexpr int64_t BitsPerInt
void bits_to_index_ranges(const BitSpan bits, IndexRangesBuilder< IntT > &builder)
bool is_bounded_span(const BitSpan span)
std::optional< int64_t > find_first_0_index(const BitSpanT &data)
void foreach_1_index(const BitSpanT &data, Fn &&fn)
std::optional< int64_t > find_first_1_index(const BitSpanT &data)