Skip to content

Commit

Permalink
Tests: Add a test to codify BitStream behavior beyond stream limits
Browse files Browse the repository at this point in the history
  • Loading branch information
timschumi authored and awesomekling committed Dec 1, 2023
1 parent de49413 commit 270b117
Showing 1 changed file with 47 additions and 0 deletions.
47 changes: 47 additions & 0 deletions Tests/AK/TestBitStream.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,53 @@ TEST_CASE(big_endian_bit_stream_input_output_match)
}
}

TEST_CASE(bit_reads_beyond_stream_limits)
{
Array<u8, 1> const test_data { 0xFF };

{
// LittleEndianInputBitStream allows reading null bits beyond the original data
// for compatibility purposes.
auto memory_stream = make<FixedMemoryStream>(test_data);
auto bit_stream = make<LittleEndianInputBitStream>(move(memory_stream));

{
auto result = TRY_OR_FAIL(bit_stream->read_bits<u8>(6));
EXPECT_EQ(result, 0b111111);
}

{
auto result = TRY_OR_FAIL(bit_stream->read_bits<u8>(6));
EXPECT_EQ(result, 0b000011);
}

{
auto result = TRY_OR_FAIL(bit_stream->read_bits<u8>(6));
EXPECT_EQ(result, 0b000000);
}
}

{
auto memory_stream = make<FixedMemoryStream>(test_data);
auto bit_stream = make<BigEndianInputBitStream>(move(memory_stream));

{
auto result = TRY_OR_FAIL(bit_stream->read_bits<u8>(6));
EXPECT_EQ(result, 0b111111);
}

{
auto result = bit_stream->read_bits<u8>(6);
EXPECT(result.is_error());
}

{
auto result = bit_stream->read_bits<u8>(6);
EXPECT(result.is_error());
}
}
}

RANDOMIZED_TEST_CASE(roundtrip_u8_little_endian)
{
GEN(n, Gen::unsigned_int(NumericLimits<u8>::max()));
Expand Down

0 comments on commit 270b117

Please sign in to comment.