xref: /aosp_15_r20/external/pdfium/core/fxcodec/jbig2/JBig2_BitStream_unittest.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1 // Copyright 2017 The PDFium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "core/fxcodec/jbig2/JBig2_BitStream.h"
6 
7 #include "testing/gtest/include/gtest/gtest.h"
8 
TEST(JBig2_BitStream,ReadNBits)9 TEST(JBig2_BitStream, ReadNBits) {
10   const uint8_t kData[] = {0xb1};  // 10110001
11   CJBig2_BitStream stream(kData, 0);
12 
13   uint32_t val1;
14   EXPECT_EQ(0, stream.readNBits(1, &val1));
15   EXPECT_EQ(1U, val1);
16 
17   int32_t val2;
18   EXPECT_EQ(0, stream.readNBits(1, &val2));
19   EXPECT_EQ(0, val2);
20 
21   EXPECT_EQ(0, stream.readNBits(2, &val2));
22   EXPECT_EQ(3, val2);
23 
24   EXPECT_EQ(0, stream.readNBits(4, &val2));
25   EXPECT_EQ(1, val2);
26 }
27 
TEST(JBig2_BitStream,ReadNBitsLargerThenData)28 TEST(JBig2_BitStream, ReadNBitsLargerThenData) {
29   const uint8_t kData[] = {0xb1};  // 10110001
30   CJBig2_BitStream stream(kData, 42);
31 
32   uint32_t val1;
33   EXPECT_EQ(0, stream.readNBits(10, &val1));
34   EXPECT_EQ(0xb1U, val1);
35 }
36 
TEST(JBig2_BitStream,ReadNBitsNullStream)37 TEST(JBig2_BitStream, ReadNBitsNullStream) {
38   CJBig2_BitStream stream({}, 0);
39 
40   uint32_t val1;
41   EXPECT_EQ(-1, stream.readNBits(1, &val1));
42 
43   int32_t val2;
44   EXPECT_EQ(-1, stream.readNBits(2, &val2));
45 }
46 
TEST(JBig2_BitStream,ReadNBitsOutOfBounds)47 TEST(JBig2_BitStream, ReadNBitsOutOfBounds) {
48   const uint8_t kData[] = {0xb1};  // 10110001
49   CJBig2_BitStream stream(kData, 42);
50 
51   uint32_t val1;
52   EXPECT_EQ(0, stream.readNBits(8, &val1));
53 
54   int32_t val2;
55   EXPECT_EQ(-1, stream.readNBits(2, &val2));
56 }
57 
TEST(JBig2_BitStream,ReadNBitsWhereNIs36)58 TEST(JBig2_BitStream, ReadNBitsWhereNIs36) {
59   const uint8_t kData[] = {0xb0, 0x01, 0x00, 0x00, 0x40};
60   CJBig2_BitStream stream(kData, 42);
61 
62   // This will shift off the top two bits and they end up lost.
63   uint32_t val1;
64   EXPECT_EQ(0, stream.readNBits(34, &val1));
65   EXPECT_EQ(0xc0040001U, val1);
66 }
67