浏览代码

Tests: Add a test to codify BitStream behavior beyond stream limits

Tim Schumacher 1 年之前
父节点
当前提交
270b1176de
共有 1 个文件被更改,包括 47 次插入0 次删除
  1. 47 0
      Tests/AK/TestBitStream.cpp

+ 47 - 0
Tests/AK/TestBitStream.cpp

@@ -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)
 RANDOMIZED_TEST_CASE(roundtrip_u8_little_endian)
 {
 {
     GEN(n, Gen::unsigned_int(NumericLimits<u8>::max()));
     GEN(n, Gen::unsigned_int(NumericLimits<u8>::max()));