5 #include <gtest/gtest.h>
15 ASSERT_EQ(
"", bs.toString());
16 ASSERT_EQ(
"", bs.toString());
22 ASSERT_EQ(1, bs.
write(data, 8));
23 ASSERT_EQ(
"10101101", bs.toString());
26 const uint8_t data[] = {0xad, 0xbe};
29 ASSERT_EQ(1, bs.
write(data, 16));
30 ASSERT_EQ(
"10101101 10111110", bs.toString());
33 const uint8_t data[] = {0xad, 0xbe, 0xfc};
36 ASSERT_EQ(1, bs.
write(data, 20));
37 ASSERT_EQ(
"10101101 10111110 11110000", bs.toString());
42 TEST(BitStream, BitOrderSimple)
54 const uint8_t data[] = {0xad, 0xbe};
56 ASSERT_EQ(1, bs.
write(data, 12));
57 ASSERT_EQ(
"10101101 10110000", bs.toString());
61 ASSERT_EQ(
"10101101 10110000", bs.toString());
63 ASSERT_EQ(1, bs.
read(data, 12));
64 ASSERT_EQ(0xad, data[0]);
65 ASSERT_EQ(0xb0, data[1]);
70 TEST(BitStream, BitOrderComplex)
72 static const std::string REFERENCE =
73 "10101101 10111111 11101111 01010110 11011111 01000100 10001101 00010101 10011110 00100110 10101111 00110111 10111100 00000100";
77 const uint8_t data1[] = {0xad, 0xbe};
79 const uint8_t data3[] = {0xde, 0xad, 0xbe, 0xef};
80 const uint8_t data4[] = {0x12, 0x34, 0x56, 0x78,
81 0x9a, 0xbc, 0xde, 0xf0};
84 ASSERT_EQ(1, bs.
write(data1, 11));
85 std::cout << bs.toString() << std::endl;
86 ASSERT_EQ(1, bs.
write(data2, 6));
87 std::cout << bs.toString() << std::endl;
88 ASSERT_EQ(1, bs.
write(data3, 25));
89 std::cout << bs.toString() << std::endl;
90 ASSERT_EQ(1, bs.
write(data4, 64));
91 std::cout << bs.toString() << std::endl;
92 ASSERT_EQ(1, bs.
write(data4, 4));
93 std::cout << bs.toString() << std::endl;
95 std::cout <<
"Reference:\n" << REFERENCE << std::endl;
97 ASSERT_EQ(REFERENCE, bs.toString());
101 std::fill(data, data +
sizeof(data), 0xA5);
103 ASSERT_EQ(REFERENCE, bs.toString());
105 ASSERT_EQ(1, bs.
read(data, 11));
106 ASSERT_EQ(0xad, data[0]);
107 ASSERT_EQ(0xa0, data[1]);
109 ASSERT_EQ(1, bs.
read(data, 6));
110 ASSERT_EQ(0xfc, data[0]);
112 ASSERT_EQ(1, bs.
read(data, 25));
113 ASSERT_EQ(0xde, data[0]);
114 ASSERT_EQ(0xad, data[1]);
115 ASSERT_EQ(0xbe, data[2]);
116 ASSERT_EQ(0x80, data[3]);
118 ASSERT_EQ(1, bs.
read(data, 64));
119 ASSERT_EQ(0x12, data[0]);
120 ASSERT_EQ(0x34, data[1]);
121 ASSERT_EQ(0x56, data[2]);
122 ASSERT_EQ(0x78, data[3]);
123 ASSERT_EQ(0x9a, data[4]);
124 ASSERT_EQ(0xbc, data[5]);
125 ASSERT_EQ(0xde, data[6]);
126 ASSERT_EQ(0xf0, data[7]);
137 std::string binary_string;
138 unsigned counter = 0;
139 for (
int byte = 0;
byte <
NUM_BYTES;
byte++)
141 for (
int bit = 0; bit < 8; bit++, counter++)
143 const bool value = counter % 3 == 0;
144 binary_string.push_back(value ?
'1' :
'0');
146 ASSERT_EQ(1, bs_wr.
write(data, 1));
148 binary_string.push_back(
' ');
150 binary_string.erase(binary_string.length() - 1, 1);
155 const uint8_t dummy_data_wr[] = { 0xFF };
156 ASSERT_EQ(0, bs_wr.
write(dummy_data_wr, 1));
163 ASSERT_EQ(binary_string, bs_wr.toString());
170 for (
int byte = 0;
byte <
NUM_BYTES;
byte++)
172 for (
int bit = 0; bit < 8; bit++, counter++)
174 const bool value = counter % 3 == 0;
176 ASSERT_EQ(1, bs_rd.
read(data, 1));
179 ASSERT_EQ(0x80, data[0]);
183 ASSERT_EQ(0, data[0]);
191 uint8_t dummy_data_rd[] = { 0xFF };
192 ASSERT_EQ(0, bs_wr.
read(dummy_data_rd, 1));
193 ASSERT_EQ(0xFF, dummy_data_rd[0]);