diff options
author | Björn Terelius <terelius@webrtc.org> | 2021-05-11 15:30:12 +0200 |
---|---|---|
committer | WebRTC LUCI CQ <webrtc-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2021-05-12 14:24:46 +0000 |
commit | 39284360b084efd4aa956fcf498300ca5a850d88 (patch) | |
tree | a4a617ec85505026f08424a6d936c41b97450223 /rtc_base/bit_buffer_unittest.cc | |
parent | bd09a46aa1b649ed5c58a9544fe1a400b60acc6b (diff) | |
download | webrtc-39284360b084efd4aa956fcf498300ca5a850d88.tar.gz |
Add 64-bit version of BitBuffer::ReadBits
Bug: webrtc:11933
Change-Id: Ie935192d2c81d7c24b83561711d59a7eff53db04
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/215966
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Björn Terelius <terelius@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33997}
Diffstat (limited to 'rtc_base/bit_buffer_unittest.cc')
-rw-r--r-- | rtc_base/bit_buffer_unittest.cc | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/rtc_base/bit_buffer_unittest.cc b/rtc_base/bit_buffer_unittest.cc index 656682c2ef..86c4f7fa5c 100644 --- a/rtc_base/bit_buffer_unittest.cc +++ b/rtc_base/bit_buffer_unittest.cc @@ -142,6 +142,38 @@ TEST(BitBufferTest, ReadBits) { EXPECT_FALSE(buffer.ReadBits(&val, 1)); } +TEST(BitBufferTest, ReadBits64) { + const uint8_t bytes[] = {0x4D, 0x32, 0xAB, 0x54, 0x00, 0xFF, 0xFE, 0x01, + 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89}; + BitBuffer buffer(bytes, 16); + uint64_t val; + + // Peek and read first 33 bits. + EXPECT_TRUE(buffer.PeekBits(&val, 33)); + EXPECT_EQ(0x4D32AB5400FFFE01ull >> (64 - 33), val); + val = 0; + EXPECT_TRUE(buffer.ReadBits(&val, 33)); + EXPECT_EQ(0x4D32AB5400FFFE01ull >> (64 - 33), val); + + // Peek and read next 31 bits. + constexpr uint64_t kMask31Bits = (1ull << 32) - 1; + EXPECT_TRUE(buffer.PeekBits(&val, 31)); + EXPECT_EQ(0x4D32AB5400FFFE01ull & kMask31Bits, val); + val = 0; + EXPECT_TRUE(buffer.ReadBits(&val, 31)); + EXPECT_EQ(0x4D32AB5400FFFE01ull & kMask31Bits, val); + + // Peek and read remaining 64 bits. + EXPECT_TRUE(buffer.PeekBits(&val, 64)); + EXPECT_EQ(0xABCDEF0123456789ull, val); + val = 0; + EXPECT_TRUE(buffer.ReadBits(&val, 64)); + EXPECT_EQ(0xABCDEF0123456789ull, val); + + // Nothing more to read. + EXPECT_FALSE(buffer.ReadBits(&val, 1)); +} + TEST(BitBufferDeathTest, SetOffsetValues) { uint8_t bytes[4] = {0}; BitBufferWriter buffer(bytes, 4); |