#include "packbits.hpp" #include "compat/assert.hpp" namespace floormat { using namespace floormat::detail_Pack; namespace { static_assert(!Storage{42}.check_zero()); constexpr bool test1() { constexpr size_t bits[] = { 5, 2, 1 }; constexpr size_t vals[] = { 8, 3, 1, 0 }; constexpr auto S0 = Storage{0b10111011}; constexpr auto S1 = Storage{0b00000101}; constexpr auto S2 = Storage{0b00000001}; constexpr auto S3 = Storage{0b00000000}; using P0 = std::decay_t; using P1 = P0::next; using P2 = P1::next; using P3 = P2::next; static_assert(std::is_same_v>); static_assert(std::is_same_v>); static_assert(std::is_same_v>); static_assert(std::is_same_v>); static_assert(S0.advance< 0>() == S0.value); static_assert(S0.advance() == S1.value); static_assert(S1.advance() == S2.value); static_assert(S2.advance() == S3.value); static_assert(S0.get() == (S0.value & (1<() == (S1.value & (1<() == (S2.value & (1< using ibits = Bits_; using foo1 = ibits<2>; using foo2 = ibits<10>; using foo3 = ibits<4>; using bar1 = check_size_overflow; static_assert(bar1::result); static_assert(bar1::size == 12); using bar2 = check_size_overflow; static_assert(bar2::result); static_assert(bar2::size == 10); using bar3 = check_size_overflow; static_assert(bar3::result); static_assert(bar3::size == 16); using foo4 = ibits<1>; using bar4 = check_size_overflow; static_assert(!bar4::result); static_assert(bar4::size == 17); using foo5 = ibits<20>; using bar5 = check_size_overflow; static_assert(!bar5::result); static_assert(bar5::size == 37); using foo6 = ibits<40>; using bar6 = check_size_overflow; static_assert(!bar6::result); static_assert(bar6::size == 57); } // namespace test2 } // namespace } // namespace floormat