Dev: options for clang-tidy extended, fixed warning.
[marnav.git] / test / utils / Test_utils_bitset.cpp
blobe78a3e2737d11cdcd5a6231759e2d28e4b151dce
1 #include <gtest/gtest.h>
2 #include <marnav/utils/bitset.hpp>
4 namespace
7 using namespace marnav::utils;
9 class Test_utils_bitset : public ::testing::Test
11 public:
12 template <class T> std::string to_string(const bitset<T> & bits)
14 std::string result;
15 result.reserve(bits.size());
16 for (auto const & b : bits)
17 result += '0' + b;
18 return result;
22 TEST_F(Test_utils_bitset, uint8__construction_bit_size)
24 bitset<uint8_t> b{16};
26 // 0 8 16 24 32 40 48 56
27 // +-------+-------+-------+-------+-------+-------+-------+-------
28 EXPECT_STREQ("0000000000000000", to_string(b).c_str());
31 TEST_F(Test_utils_bitset, uint8__construction_container_iterator)
33 using namespace std;
35 vector<uint8_t> v{0xaa, 0x55};
36 bitset<uint8_t> b(begin(v), end(v));
38 // 0 8 16 24 32 40 48 56
39 // +-------+-------+-------+-------+-------+-------+-------+-------
40 EXPECT_STREQ("1010101001010101", to_string(b).c_str());
43 TEST_F(Test_utils_bitset, uint8__construction_container_move)
45 bitset<uint8_t> b(std::vector<uint8_t>{0xaa, 0x55});
47 // 0 8 16 24 32 40 48 56
48 // +-------+-------+-------+-------+-------+-------+-------+-------
49 EXPECT_STREQ("1010101001010101", to_string(b).c_str());
52 TEST_F(Test_utils_bitset, const_iterator_comparison_less)
54 bitset<uint8_t> b{16};
56 auto i = b.begin();
57 auto j = b.begin();
58 auto k = b.begin();
59 ++k;
61 EXPECT_FALSE(i < j);
62 EXPECT_TRUE(i < k);
65 TEST_F(Test_utils_bitset, const_iterator_comparison_greater)
67 bitset<uint8_t> b{16};
69 auto i = b.begin();
70 auto j = b.begin();
71 auto k = b.begin();
72 ++k;
74 EXPECT_FALSE(i > j);
75 EXPECT_TRUE(k > i);
78 TEST_F(Test_utils_bitset, uint8__append_single_bits)
81 bitset<uint8_t> bits;
82 bits.append(1, 1);
83 // 0 8 16 24 32 40 48 56
84 // +-------+-------+-------+-------+-------+-------+-------+-------
85 EXPECT_STREQ("1", to_string(bits).c_str());
88 bitset<uint8_t> bits;
89 bits.append(1, 1);
90 bits.append(0, 1);
91 bits.append(0, 1);
92 bits.append(1, 1);
93 // 0 8 16 24 32 40 48 56
94 // +-------+-------+-------+-------+-------+-------+-------+-------
95 EXPECT_STREQ("1001", to_string(bits).c_str());
98 bitset<uint8_t> bits{8};
99 bits.append(1, 1);
100 // 0 8 16 24 32 40 48 56
101 // +-------+-------+-------+-------+-------+-------+-------+-------
102 EXPECT_STREQ("000000001", to_string(bits).c_str());
106 TEST_F(Test_utils_bitset, uint8__append_block_size_plus_one)
108 bitset<uint8_t> bits;
109 bits.append(0x00000001, 9);
110 // 0 8 16 24 32 40 48 56
111 // +-------+-------+-------+-------+-------+-------+-------+-------
112 EXPECT_STREQ("000000001", to_string(bits).c_str());
115 TEST_F(Test_utils_bitset, uint8__append_multiple_bits)
118 bitset<uint8_t> bits;
119 bits.append(0x00000001, 2);
120 // 0 8 16 24 32 40 48 56
121 // +-------+-------+-------+-------+-------+-------+-------+-------
122 EXPECT_STREQ("01", to_string(bits).c_str());
125 bitset<uint8_t> bits;
126 bits.append(0x00000001, 1);
127 bits.append(0x00000001, 2);
128 bits.append(0x00000001, 3);
129 bits.append(0x00000001, 4);
130 bits.append(0x00000001, 5);
131 bits.append(0x00000001, 6);
132 bits.append(0x00000001, 7);
133 bits.append(0x00000001, 8);
134 bits.append(0x00000001, 9);
135 bits.append(0x00000001, 10);
136 // 0 8 16 24 32 40 48 56
137 // +-------+-------+-------+-------+-------+-------+-------+-------
138 EXPECT_STREQ(
139 "1010010001000010000010000001000000010000000010000000001", to_string(bits).c_str());
142 bitset<uint8_t> bits;
144 // 0 8 16 24 32 40 48 56
145 // +-------+-------+-------+-------+-------+-------+-------+-------
146 // 111010011110101011001111111111
147 const uint32_t value = 981119999; // 30 bits of information
149 bits.append(value, 32);
151 // 0 8 16 24 32 40 48 56
152 // +-------+-------+-------+-------+-------+-------+-------+-------
153 EXPECT_STREQ("00111010011110101011001111111111", to_string(bits).c_str());
156 bitset<uint8_t> bits;
158 // 0 8 16 24 32 40 48 56
159 // +-------+-------+-------+-------+-------+-------+-------+-------
160 // 111010011110101011001111111111
161 const uint32_t value = 981119999; // 30 bits of information
163 bits.append(value, 30);
165 // 0 8 16 24 32 40 48 56
166 // +-------+-------+-------+-------+-------+-------+-------+-------
167 EXPECT_STREQ("111010011110101011001111111111", to_string(bits).c_str());
171 TEST_F(Test_utils_bitset, uint8__set_single_bits)
174 bitset<uint8_t> bits{64};
175 bits.set(1, 0, 1);
176 // 0 8 16 24 32 40 48 56
177 // +-------+-------+-------+-------+-------+-------+-------+-------
178 EXPECT_STREQ("1000000000000000000000000000000000000000000000000000000000000000",
179 to_string(bits).c_str());
182 bitset<uint8_t> bits{64};
183 bits.set(1, 1, 1);
184 // 0 8 16 24 32 40 48 56
185 // +-------+-------+-------+-------+-------+-------+-------+-------
186 EXPECT_STREQ("0100000000000000000000000000000000000000000000000000000000000000",
187 to_string(bits).c_str());
190 bitset<uint8_t> bits{64};
191 bits.set(1, 15, 1);
192 // 0 8 16 24 32 40 48 56
193 // +-------+-------+-------+-------+-------+-------+-------+-------
194 EXPECT_STREQ("0000000000000001000000000000000000000000000000000000000000000000",
195 to_string(bits).c_str());
198 bitset<uint8_t> bits{64};
199 bits.set(1, 16, 1);
200 // 0 8 16 24 32 40 48 56
201 // +-------+-------+-------+-------+-------+-------+-------+-------
202 EXPECT_STREQ("0000000000000000100000000000000000000000000000000000000000000000",
203 to_string(bits).c_str());
207 TEST_F(Test_utils_bitset, uint8__set_block_size_plus_one)
209 bitset<uint8_t> bits{32};
210 bits.set(0x00000001, 0, 9);
211 // 0 8 16 24 32 40 48 56
212 // +-------+-------+-------+-------+-------+-------+-------+-------
213 EXPECT_STREQ("00000000100000000000000000000000", to_string(bits).c_str());
216 TEST_F(Test_utils_bitset, uint8__set_multiple_bits)
219 bitset<uint8_t> bits{64};
220 bits.set(0x00000001, 0, 2);
221 // 0 8 16 24 32 40 48 56
222 // +-------+-------+-------+-------+-------+-------+-------+-------
223 EXPECT_STREQ("0100000000000000000000000000000000000000000000000000000000000000",
224 to_string(bits).c_str());
227 bitset<uint8_t> bits{64};
228 bits.set(0x00000001, 1, 2);
229 // 0 8 16 24 32 40 48 56
230 // +-------+-------+-------+-------+-------+-------+-------+-------
231 EXPECT_STREQ("0010000000000000000000000000000000000000000000000000000000000000",
232 to_string(bits).c_str());
235 bitset<uint8_t> bits{64};
236 bits.set(0x00000001, 15, 2);
237 // 0 8 16 24 32 40 48 56
238 // +-------+-------+-------+-------+-------+-------+-------+-------
239 EXPECT_STREQ("0000000000000000100000000000000000000000000000000000000000000000",
240 to_string(bits).c_str());
243 bitset<uint8_t> bits{64};
244 bits.set(0x00000001, 16, 2);
245 // 0 8 16 24 32 40 48 56
246 // +-------+-------+-------+-------+-------+-------+-------+-------
247 EXPECT_STREQ("0000000000000000010000000000000000000000000000000000000000000000",
248 to_string(bits).c_str());
251 bitset<uint8_t> bits{64};
253 // 0 8 16 24 32 40 48 56
254 // +-------+-------+-------+-------+-------+-------+-------+-------
255 // 111010011110101011001111111111
256 const uint32_t value = 981119999; // 30 bits of information
258 bits.set(value, 8, 30);
259 // 0 8 16 24 32 40 48 56
260 // +-------+-------+-------+-------+-------+-------+-------+-------
261 EXPECT_STREQ("0000000011101001111010101100111111111100000000000000000000000000",
262 to_string(bits).c_str());
266 TEST_F(Test_utils_bitset, uint8__get_multiple_bits_ending_on_block_boundary)
268 bitset<uint8_t> bits{64};
269 bits.set(0x7, 5, 3);
270 // 0 8 16 24 32 40 48 56
271 // +-------+-------+-------+-------+-------+-------+-------+-------
272 ASSERT_STREQ("0000011100000000000000000000000000000000000000000000000000000000",
273 to_string(bits).c_str());
275 uint32_t value = 0xffffffff;
276 bits.get(value, 0, 6);
277 EXPECT_EQ(1u, value);
280 TEST_F(Test_utils_bitset, uint8__get_multiple_bits_completely_within_block)
282 bitset<uint8_t> bits{64};
283 bits.set(0xff, 4, 3);
284 // 0 8 16 24 32 40 48 56
285 // +-------+-------+-------+-------+-------+-------+-------+-------
286 ASSERT_STREQ("0000111000000000000000000000000000000000000000000000000000000000",
287 to_string(bits).c_str());
289 uint32_t value = 0xffffffff;
290 bits.get(value, 0, 6);
291 EXPECT_EQ(3u, value);
294 TEST_F(Test_utils_bitset, uint8__get_multiple_bits_fractions_of_two_blocks)
296 bitset<uint8_t> bits{64};
297 bits.set(0xff, 4, 6);
298 // 0 8 16 24 32 40 48 56
299 // +-------+-------+-------+-------+-------+-------+-------+-------
300 ASSERT_STREQ("0000111111000000000000000000000000000000000000000000000000000000",
301 to_string(bits).c_str());
303 uint32_t value = 0xffffffff;
304 bits.get(value, 0, 6);
305 EXPECT_EQ(3u, value);
308 TEST_F(Test_utils_bitset, uint8__get_multiple_bits_using_three_blocks)
310 bitset<uint8_t> bits{64};
311 bits.set(0xffff, 4, 14);
312 // 0 8 16 24 32 40 48 56
313 // +-------+-------+-------+-------+-------+-------+-------+-------
314 ASSERT_STREQ("0000111111111111110000000000000000000000000000000000000000000000",
315 to_string(bits).c_str());
317 uint32_t value = 0xffffffff;
318 bits.get(value, 2, 6);
319 EXPECT_EQ(15u, value);
322 TEST_F(Test_utils_bitset, uint8__set_enum)
324 enum class ids : uint8_t { A = 1, B, C };
326 bitset<uint8_t> bits{64};
327 bits.set(ids::A, 4, 6);
328 // 0 8 16 24 32 40 48 56
329 // +-------+-------+-------+-------+-------+-------+-------+-------
330 ASSERT_STREQ("0000000001000000000000000000000000000000000000000000000000000000",
331 to_string(bits).c_str());
334 TEST_F(Test_utils_bitset, uint16__get_multiple_bits_ending_on_block_boundary)
336 bitset<uint16_t> bits{64};
337 bits.set(0xff, 13, 3);
338 // 0 8 16 24 32 40 48 56
339 // +-------+-------+-------+-------+-------+-------+-------+-------
340 ASSERT_STREQ("0000000000000111000000000000000000000000000000000000000000000000",
341 to_string(bits).c_str());
343 uint32_t value = 0xffffffff;
344 bits.get(value, 8, 6);
345 EXPECT_EQ(1u, value);
348 TEST_F(Test_utils_bitset, uint16__get_multiple_bits_completely_within_block)
350 bitset<uint16_t> bits{64};
351 bits.set(0x7, 4, 3);
352 // 0 8 16 24 32 40 48 56
353 // +-------+-------+-------+-------+-------+-------+-------+-------
354 ASSERT_STREQ("0000111000000000000000000000000000000000000000000000000000000000",
355 to_string(bits).c_str());
357 uint32_t value = 0xffffffff;
358 bits.get(value, 0, 6);
359 EXPECT_EQ(3u, value);
362 TEST_F(Test_utils_bitset, uint16__get_multiple_bits_fractions_of_two_blocks)
364 bitset<uint16_t> bits{64};
365 bits.set(0xffff, 4, 6);
366 // 0 8 16 24 32 40 48 56
367 // +-------+-------+-------+-------+-------+-------+-------+-------
368 ASSERT_STREQ("0000111111000000000000000000000000000000000000000000000000000000",
369 to_string(bits).c_str());
371 uint32_t value = 0xffffffff;
372 bits.get(value, 0, 6);
373 EXPECT_EQ(3u, value);
376 TEST_F(Test_utils_bitset, uint16__get_multiple_bits_using_three_blocks)
378 bitset<uint16_t> bits{64};
379 uint64_t val = -1;
380 bits.set(val, 4, 40);
381 // 0 8 16 24 32 40 48 56
382 // +-------+-------+-------+-------+-------+-------+-------+-------
383 ASSERT_STREQ("0000111111111111111111111111111111111111111100000000000000000000",
384 to_string(bits).c_str());
386 uint32_t value = 0xffffffff;
387 bits.get(value, 2, 6);
388 EXPECT_EQ(15u, value);
391 TEST_F(Test_utils_bitset, uint8__copy_constructor)
393 bitset<uint8_t> bits{32};
394 bits.set(1, 0, 6);
396 bitset<uint8_t> copy(bits);
398 // 0 8 16 24 32 40 48 56
399 // +-------+-------+-------+-------+
400 ASSERT_STREQ("00000100000000000000000000000000", to_string(bits).c_str());
401 EXPECT_STREQ("00000100000000000000000000000000", to_string(copy).c_str());
404 TEST_F(Test_utils_bitset, uint8__assignment)
406 bitset<uint8_t> bits{32};
407 bits.set(1, 0, 6);
409 bitset<uint8_t> copy{16};
410 ASSERT_STREQ("0000000000000000", to_string(copy).c_str());
411 copy = bits;
413 // 0 8 16 24 32 40 48 56
414 // +-------+-------+-------+-------+
415 ASSERT_STREQ("00000100000000000000000000000000", to_string(bits).c_str());
416 EXPECT_STREQ("00000100000000000000000000000000", to_string(copy).c_str());
419 template <class T> bitset<uint8_t> get_test_data(unsigned int size)
421 bitset<T> result{size};
423 result.set(1, 0, 6);
425 return result;
428 TEST_F(Test_utils_bitset, uint8__as_return_value_small)
430 auto bits = get_test_data<uint8_t>(32);
432 // 0 8 16 24 32 40 48 56
433 // +-------+-------+-------+-------+
434 ASSERT_STREQ("00000100000000000000000000000000", to_string(bits).c_str());
437 TEST_F(Test_utils_bitset, uint8__as_return_value_medium)
439 auto bits = get_test_data<uint8_t>(168);
441 // 0 8 16 24 32 40 48 56
442 // +-------+-------+-------+-------+
443 ASSERT_STREQ("00000100000000000000000000000000000000000000000000000000000000000000000000000"
444 "00000000000000000000000000000000000000000000000000000000000000000000000000000"
445 "00000000000000",
446 to_string(bits).c_str());
449 TEST_F(Test_utils_bitset, uint8__set_multiple_values)
451 bitset<uint8_t> bits{64};
453 // 0 8 16 24 32 40 48 56
454 // +-------+-------+-------+-------+-------+-------+-------+-------
455 ASSERT_STREQ("0000000000000000000000000000000000000000000000000000000000000000",
456 to_string(bits).c_str());
458 bits.set(1, 0, 6);
460 // 0 8 16 24 32 40 48 56
461 // +-------+-------+-------+-------+-------+-------+-------+-------
462 ASSERT_STREQ("0000010000000000000000000000000000000000000000000000000000000000",
463 to_string(bits).c_str());
465 bits.set(1, 6, 2);
467 // 0 8 16 24 32 40 48 56
468 // +-------+-------+-------+-------+-------+-------+-------+-------
469 ASSERT_STREQ("0000010100000000000000000000000000000000000000000000000000000000",
470 to_string(bits).c_str());
473 TEST_F(Test_utils_bitset, uint8__flip)
475 bitset<uint8_t> bits{64};
477 // 0 8 16 24 32 40 48 56
478 // +-------+-------+-------+-------+-------+-------+-------+-------
479 EXPECT_STREQ("0000000000000000000000000000000000000000000000000000000000000000",
480 to_string(bits).c_str());
482 bits.flip(0);
483 // 0 8 16 24 32 40 48 56
484 // +-------+-------+-------+-------+-------+-------+-------+-------
485 EXPECT_STREQ("1000000000000000000000000000000000000000000000000000000000000000",
486 to_string(bits).c_str());
488 bits.flip(10);
489 // 0 8 16 24 32 40 48 56
490 // +-------+-------+-------+-------+-------+-------+-------+-------
491 EXPECT_STREQ("1000000000100000000000000000000000000000000000000000000000000000",
492 to_string(bits).c_str());
494 bits.flip(32);
495 // 0 8 16 24 32 40 48 56
496 // +-------+-------+-------+-------+-------+-------+-------+-------
497 EXPECT_STREQ("1000000000100000000000000000000010000000000000000000000000000000",
498 to_string(bits).c_str());
501 TEST_F(Test_utils_bitset, uint8__append_bitset_to_empty_bitset)
503 bitset<uint8_t> b0;
504 bitset<uint8_t> b1;
506 b0.append(0x55, 8);
507 b1.append(b0);
509 // 0 8 16 24 32 40 48 56
510 // +-------+
511 EXPECT_STREQ("01010101", to_string(b0).c_str());
512 EXPECT_STREQ("01010101", to_string(b1).c_str());
515 TEST_F(Test_utils_bitset, uint8__append_bitset_to_nonempty_bitset)
517 bitset<uint8_t> b0;
518 bitset<uint8_t> b1;
520 b0.append(0x55, 8);
521 b1.append(0xaa, 8);
522 b1.append(b0);
524 // 0 8 16 24 32 40 48 56
525 // +-------+
526 EXPECT_STREQ("01010101", to_string(b0).c_str());
527 EXPECT_STREQ("1010101001010101", to_string(b1).c_str());
530 TEST_F(Test_utils_bitset, uint8__set_bitset_to_empty_bitset)
532 bitset<uint8_t> b0;
533 bitset<uint8_t> b1;
535 b0.append(0x55, 8);
536 b1.set(b0, 0);
538 // 0 8 16 24 32 40 48 56
539 // +-------+
540 EXPECT_STREQ("01010101", to_string(b0).c_str());
541 EXPECT_STREQ("01010101", to_string(b1).c_str());
544 TEST_F(Test_utils_bitset, uint8__set_bitset_to_empty_bitset_mixed_type_bitsets_8_to_16)
546 bitset<uint8_t> b0;
547 bitset<uint16_t> b1;
549 b0.append(0x55, 8);
550 b1.set(b0, 0);
552 // 0 8 16 24 32 40 48 56
553 // +-------+
554 EXPECT_STREQ("01010101", to_string(b0).c_str());
555 EXPECT_STREQ("01010101", to_string(b1).c_str());
558 TEST_F(Test_utils_bitset, uint8__set_bitset_to_empty_bitset_mixed_type_bitsets_16_to_8)
560 bitset<uint16_t> b0;
561 bitset<uint8_t> b1;
563 b0.append(0x55, 8);
564 b1.set(b0, 0);
566 // 0 8 16 24 32 40 48 56
567 // +-------+
568 EXPECT_STREQ("01010101", to_string(b0).c_str());
569 EXPECT_STREQ("01010101", to_string(b1).c_str());
572 TEST_F(Test_utils_bitset, uint8__set_bitset_to_nonempty_bitset)
574 bitset<uint8_t> b0;
575 bitset<uint8_t> b1;
577 b0.append(0x55, 8);
578 b1.append(0xaa, 8);
579 b1.set(b0, 0);
581 // 0 8 16 24 32 40 48 56
582 // +-------+
583 EXPECT_STREQ("01010101", to_string(b0).c_str());
584 EXPECT_STREQ("01010101", to_string(b1).c_str());
587 TEST_F(Test_utils_bitset, uint8__set_bit)
589 bitset<uint8_t> b{8};
591 EXPECT_STREQ("00000000", to_string(b).c_str());
592 b.set_bit(0, true);
593 EXPECT_STREQ("10000000", to_string(b).c_str());
594 b.set_bit(7, true);
595 EXPECT_STREQ("10000001", to_string(b).c_str());
596 b.set_bit(0, false);
597 EXPECT_STREQ("00000001", to_string(b).c_str());
598 b.set_bit(7, false);
599 EXPECT_STREQ("00000000", to_string(b).c_str());
602 TEST_F(Test_utils_bitset, uint8__reset_all)
604 bitset<uint8_t> b{8};
605 b.set(0xaa, 0, 8);
607 EXPECT_STREQ("10101010", to_string(b).c_str());
608 b.reset();
609 EXPECT_STREQ("00000000", to_string(b).c_str());
612 TEST_F(Test_utils_bitset, uint8__all)
615 bitset<uint8_t> b{8};
616 EXPECT_FALSE(b.all());
619 bitset<uint8_t> b{8};
620 b.set(0xaa, 0, 8);
621 EXPECT_FALSE(b.all());
624 bitset<uint8_t> b{8};
625 b.set(1, 0, 8);
626 EXPECT_FALSE(b.all());
629 bitset<uint8_t> b{8};
630 b.set(0xff, 0, 8);
631 EXPECT_TRUE(b.all());
635 TEST_F(Test_utils_bitset, uint8__any)
638 bitset<uint8_t> b{8};
639 EXPECT_FALSE(b.any());
642 bitset<uint8_t> b{8};
643 b.set(0xaa, 0, 8);
644 EXPECT_TRUE(b.any());
647 bitset<uint8_t> b{8};
648 b.set(1, 0, 8);
649 EXPECT_TRUE(b.any());
652 bitset<uint8_t> b{8};
653 b.set(0xff, 0, 8);
654 EXPECT_TRUE(b.any());
658 TEST_F(Test_utils_bitset, uint8__none)
661 bitset<uint8_t> b{8};
662 EXPECT_TRUE(b.none());
665 bitset<uint8_t> b{8};
666 b.set(0xaa, 0, 8);
667 EXPECT_FALSE(b.none());
670 bitset<uint8_t> b{8};
671 b.set(1, 0, 8);
672 EXPECT_FALSE(b.none());
675 bitset<uint8_t> b{8};
676 b.set(0xff, 0, 8);
677 EXPECT_FALSE(b.none());
681 TEST_F(Test_utils_bitset, uint8__count)
684 bitset<uint8_t> b{8};
685 EXPECT_EQ(0u, b.count());
688 bitset<uint8_t> b{8};
689 b.set(0xaa, 0, 8);
690 EXPECT_EQ(4u, b.count());
693 bitset<uint8_t> b{8};
694 b.set(1, 0, 8);
695 EXPECT_EQ(1u, b.count());
698 bitset<uint8_t> b{8};
699 b.set(0xff, 0, 8);
700 EXPECT_EQ(8u, b.count());
704 TEST_F(Test_utils_bitset, uint8__comparison_equal)
706 bitset<uint8_t> a;
707 bitset<uint8_t> b;
708 bitset<uint8_t> c;
710 a.append(0xaa, 8);
711 b.append(0xaa, 8);
712 c.append(0x55, 8);
714 EXPECT_TRUE(a == a);
715 EXPECT_TRUE(b == b);
716 EXPECT_TRUE(c == c);
718 EXPECT_TRUE(a == b);
719 EXPECT_TRUE(b == a);
721 EXPECT_FALSE(a == c);
722 EXPECT_FALSE(c == a);
723 EXPECT_FALSE(b == c);
724 EXPECT_FALSE(c == b);
727 TEST_F(Test_utils_bitset, uint8__comparison_not_equal)
729 bitset<uint8_t> a;
730 bitset<uint8_t> b;
731 bitset<uint8_t> c;
733 a.append(0xaa, 8);
734 b.append(0xaa, 8);
735 c.append(0x55, 8);
737 EXPECT_FALSE(a != a);
738 EXPECT_FALSE(b != b);
739 EXPECT_FALSE(c != c);
741 EXPECT_FALSE(a != b);
742 EXPECT_FALSE(b != a);
744 EXPECT_TRUE(a != c);
745 EXPECT_TRUE(c != a);
746 EXPECT_TRUE(b != c);
747 EXPECT_TRUE(c != b);
750 TEST_F(Test_utils_bitset, uint8__append_bits_exceeds_type)
752 bitset<uint8_t> b{32};
753 const uint8_t data = 0xff;
754 EXPECT_ANY_THROW(b.append(data, 16));
757 TEST_F(Test_utils_bitset, uint8__set_bits_exceeds_type)
759 bitset<uint8_t> b{32};
760 const uint8_t data = 0xff;
761 EXPECT_ANY_THROW(b.set(data, 0, 16));
764 TEST_F(Test_utils_bitset, uint8__get_bits_out_of_range)
766 bitset<uint8_t> b{32};
767 uint8_t data;
768 EXPECT_ANY_THROW(b.get(data, 0, 16));
769 EXPECT_ANY_THROW(b.get(data, 28, 8));
770 EXPECT_NO_THROW(b.get(data, 0, 0));
773 TEST_F(Test_utils_bitset, uint8__get_uint32)
775 bitset<uint8_t> b{64};
776 b.set(0xaaaaaaaa, 0, 32);
777 b.set(0xaaaaaaaa, 32, 32);
778 const uint32_t expected = 0xaaaaaaaa;
779 uint32_t data = 0;
780 b.get(data, 4);
781 EXPECT_EQ(expected, data);
784 TEST_F(Test_utils_bitset, uint8__get_bit_out_of_range)
786 bitset<uint8_t> b{32};
788 EXPECT_ANY_THROW(b.get_bit(64));
791 TEST_F(Test_utils_bitset, uint8__set_bit_out_of_range)
793 bitset<uint8_t> b{32};
795 EXPECT_ANY_THROW(b.set_bit(64, 1));