diff --git a/ricepp/test/bitstream_test.cpp b/ricepp/test/bitstream_test.cpp index 8d6de9cf..3927e221 100644 --- a/ricepp/test/bitstream_test.cpp +++ b/ricepp/test/bitstream_test.cpp @@ -21,6 +21,9 @@ #include #include +#include +#include +#include #include #include @@ -45,6 +48,9 @@ TEST(ricepp, bitstream_basic_test) { writer.write_bit(true); writer.flush(); } + + static_assert(std::contiguous_iterator); + { ricepp::bitstream_reader reader(data.begin(), data.end()); EXPECT_EQ(0x1234567U, reader.read_bits(28)); @@ -61,6 +67,26 @@ TEST(ricepp, bitstream_basic_test) { EXPECT_THAT([&] { auto v = reader.read_bits(10); }, testing::Throws()); } + + std::list data2{data.begin(), data.end()}; + static_assert(!std::contiguous_iterator); + + { + ricepp::bitstream_reader reader(data2.begin(), data2.end()); + EXPECT_EQ(0x1234567U, reader.read_bits(28)); + EXPECT_EQ(UINT64_C(0x123456789abcdef), reader.read_bits(60)); + EXPECT_EQ(13, reader.find_first_set()); + EXPECT_EQ(UINT64_C(0x000000FFFFFFFFFF), reader.read_bits(40)); + EXPECT_EQ(UINT64_C(0x000000FFFFFFFFFF), reader.read_bits(40)); + EXPECT_EQ(UINT64_C(0x000000FFFFFFFFFF), reader.read_bits(40)); + EXPECT_EQ(UINT64_C(0x000000FFFFFFFFFF), reader.read_bits(40)); + EXPECT_EQ(UINT64_C(0x000000FFFFFFFFFF), reader.read_bits(40)); + EXPECT_EQ(200, reader.find_first_set()); + EXPECT_EQ(136, reader.find_first_set()); + + EXPECT_THAT([&] { auto v = reader.read_bits(10); }, + testing::Throws()); + } } namespace { @@ -1460,6 +1486,8 @@ TEST(ricepp, bitstream_random_test) { EXPECT_EQ(expected_bitstream[i], data[i]) << "at index " << i; } + static_assert(std::contiguous_iterator); + { ricepp::bitstream_reader reader(data.begin(), data.end()); for (const auto& td : testdata) { @@ -1476,4 +1504,24 @@ TEST(ricepp, bitstream_random_test) { } } } + + std::deque data2{data.begin(), data.end()}; + static_assert(!std::contiguous_iterator); + + { + ricepp::bitstream_reader reader(data2.begin(), data2.end()); + for (const auto& td : testdata) { + switch (td.op) { + case oper::single: + EXPECT_EQ(td.value, reader.read_bit()); + break; + case oper::multi: + EXPECT_EQ(td.value, reader.read_bits(td.bits)); + break; + case oper::sequence: + EXPECT_EQ(td.bits, reader.find_first_set()); + break; + } + } + } }