xref: /aosp_15_r20/external/pigweed/pw_bytes/byte_builder_test.cc (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker // Copyright 2020 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker //
3*61c4878aSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker // use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker // the License at
6*61c4878aSAndroid Build Coastguard Worker //
7*61c4878aSAndroid Build Coastguard Worker //     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker //
9*61c4878aSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker // License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker // the License.
14*61c4878aSAndroid Build Coastguard Worker 
15*61c4878aSAndroid Build Coastguard Worker #include "pw_bytes/byte_builder.h"
16*61c4878aSAndroid Build Coastguard Worker 
17*61c4878aSAndroid Build Coastguard Worker #include <array>
18*61c4878aSAndroid Build Coastguard Worker #include <cstddef>
19*61c4878aSAndroid Build Coastguard Worker 
20*61c4878aSAndroid Build Coastguard Worker #include "pw_unit_test/framework.h"
21*61c4878aSAndroid Build Coastguard Worker 
22*61c4878aSAndroid Build Coastguard Worker using std::byte;
23*61c4878aSAndroid Build Coastguard Worker 
24*61c4878aSAndroid Build Coastguard Worker template <typename... Args>
MakeBytes(Args...args)25*61c4878aSAndroid Build Coastguard Worker constexpr std::array<byte, sizeof...(Args)> MakeBytes(Args... args) noexcept {
26*61c4878aSAndroid Build Coastguard Worker   return {static_cast<byte>(args)...};
27*61c4878aSAndroid Build Coastguard Worker }
28*61c4878aSAndroid Build Coastguard Worker 
29*61c4878aSAndroid Build Coastguard Worker namespace pw {
30*61c4878aSAndroid Build Coastguard Worker namespace {
31*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,EmptyBuffer_SizeAndMaxSizeAreCorrect)32*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, EmptyBuffer_SizeAndMaxSizeAreCorrect) {
33*61c4878aSAndroid Build Coastguard Worker   ByteBuilder bb(ByteSpan{});
34*61c4878aSAndroid Build Coastguard Worker 
35*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.empty());
36*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(0u, bb.size());
37*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(0u, bb.max_size());
38*61c4878aSAndroid Build Coastguard Worker }
39*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,NonEmptyBufferOfSize0_SizeAndMaxSizeAreCorrect)40*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, NonEmptyBufferOfSize0_SizeAndMaxSizeAreCorrect) {
41*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
42*61c4878aSAndroid Build Coastguard Worker   ByteBuilder bb(buffer);
43*61c4878aSAndroid Build Coastguard Worker 
44*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.empty());
45*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(0u, bb.size());
46*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(3u, bb.max_size());
47*61c4878aSAndroid Build Coastguard Worker }
48*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,Constructor_InsertsEmptyBuffer)49*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, Constructor_InsertsEmptyBuffer) {
50*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
51*61c4878aSAndroid Build Coastguard Worker   ByteBuilder bb(buffer);
52*61c4878aSAndroid Build Coastguard Worker 
53*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.empty());
54*61c4878aSAndroid Build Coastguard Worker }
55*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,EmptyBuffer_Append)56*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, EmptyBuffer_Append) {
57*61c4878aSAndroid Build Coastguard Worker   ByteBuilder bb(ByteSpan{});
58*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.empty());
59*61c4878aSAndroid Build Coastguard Worker 
60*61c4878aSAndroid Build Coastguard Worker   constexpr auto kBytesTestLiteral = MakeBytes(0x04, 0x05);
61*61c4878aSAndroid Build Coastguard Worker 
62*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(bb.append(kBytesTestLiteral.data(), 2).ok());
63*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(0u, bb.size());
64*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(0u, bb.max_size());
65*61c4878aSAndroid Build Coastguard Worker }
66*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,NonEmptyBufferOfSize0_Append)67*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, NonEmptyBufferOfSize0_Append) {
68*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
69*61c4878aSAndroid Build Coastguard Worker   ByteBuilder bb(buffer);
70*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.empty());
71*61c4878aSAndroid Build Coastguard Worker 
72*61c4878aSAndroid Build Coastguard Worker   constexpr auto kBytesTestLiteral = MakeBytes(0x04, 0x05);
73*61c4878aSAndroid Build Coastguard Worker 
74*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(kBytesTestLiteral.data(), 2).ok());
75*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x04}, bb.data()[0]);
76*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x05}, bb.data()[1]);
77*61c4878aSAndroid Build Coastguard Worker }
78*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,NonEmptyBufferOfSize0_Append_Partial_NotResourceExhausted)79*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, NonEmptyBufferOfSize0_Append_Partial_NotResourceExhausted) {
80*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
81*61c4878aSAndroid Build Coastguard Worker   ByteBuilder bb(buffer);
82*61c4878aSAndroid Build Coastguard Worker 
83*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.empty());
84*61c4878aSAndroid Build Coastguard Worker 
85*61c4878aSAndroid Build Coastguard Worker   constexpr auto kBytesTestLiteral = MakeBytes(0x04, 0x05, 0x06, 0x07);
86*61c4878aSAndroid Build Coastguard Worker 
87*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(kBytesTestLiteral.data(), 3).ok());
88*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x04}, bb.data()[0]);
89*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x05}, bb.data()[1]);
90*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x06}, bb.data()[2]);
91*61c4878aSAndroid Build Coastguard Worker }
92*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,NonEmptyBufferOfSize0_Append_Partial_ResourceExhausted)93*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, NonEmptyBufferOfSize0_Append_Partial_ResourceExhausted) {
94*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
95*61c4878aSAndroid Build Coastguard Worker   ByteBuilder bb(buffer);
96*61c4878aSAndroid Build Coastguard Worker 
97*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.empty());
98*61c4878aSAndroid Build Coastguard Worker 
99*61c4878aSAndroid Build Coastguard Worker   constexpr auto kBytesTestLiteral = MakeBytes(0x04, 0x05, 0x06, 0x07);
100*61c4878aSAndroid Build Coastguard Worker 
101*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(bb.append(kBytesTestLiteral.data(), 4).ok());
102*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(Status::ResourceExhausted(), bb.status());
103*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(0u, bb.size());
104*61c4878aSAndroid Build Coastguard Worker }
105*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,Append_RepeatedBytes)106*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, Append_RepeatedBytes) {
107*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
108*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.empty());
109*61c4878aSAndroid Build Coastguard Worker 
110*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(7, byte{0x04}).ok());
111*61c4878aSAndroid Build Coastguard Worker 
112*61c4878aSAndroid Build Coastguard Worker   for (size_t i = 0; i < 7; i++) {
113*61c4878aSAndroid Build Coastguard Worker     EXPECT_EQ(byte{0x04}, bb.data()[i]);
114*61c4878aSAndroid Build Coastguard Worker   }
115*61c4878aSAndroid Build Coastguard Worker }
116*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,Append_Bytes_Full)117*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, Append_Bytes_Full) {
118*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
119*61c4878aSAndroid Build Coastguard Worker 
120*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(8u, bb.max_size() - bb.size());
121*61c4878aSAndroid Build Coastguard Worker 
122*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(8, byte{0x04}).ok());
123*61c4878aSAndroid Build Coastguard Worker 
124*61c4878aSAndroid Build Coastguard Worker   for (size_t i = 0; i < 8; i++) {
125*61c4878aSAndroid Build Coastguard Worker     EXPECT_EQ(byte{0x04}, bb.data()[i]);
126*61c4878aSAndroid Build Coastguard Worker   }
127*61c4878aSAndroid Build Coastguard Worker }
128*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,Append_Bytes_Exhausted)129*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, Append_Bytes_Exhausted) {
130*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
131*61c4878aSAndroid Build Coastguard Worker 
132*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(Status::ResourceExhausted(), bb.append(9, byte{0x04}).status());
133*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(0u, bb.size());
134*61c4878aSAndroid Build Coastguard Worker }
135*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,Append_Partial)136*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, Append_Partial) {
137*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
138*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<12> bb;
139*61c4878aSAndroid Build Coastguard Worker 
140*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer.data(), 2).ok());
141*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(2u, bb.size());
142*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x01}, bb.data()[0]);
143*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x02}, bb.data()[1]);
144*61c4878aSAndroid Build Coastguard Worker }
145*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,EmptyBuffer_Resize_WritesNothing)146*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, EmptyBuffer_Resize_WritesNothing) {
147*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
148*61c4878aSAndroid Build Coastguard Worker   ByteBuilder bb(buffer);
149*61c4878aSAndroid Build Coastguard Worker 
150*61c4878aSAndroid Build Coastguard Worker   bb.resize(0);
151*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.ok());
152*61c4878aSAndroid Build Coastguard Worker }
153*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,EmptyBuffer_Resize_Larger_Fails)154*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, EmptyBuffer_Resize_Larger_Fails) {
155*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
156*61c4878aSAndroid Build Coastguard Worker   ByteBuilder bb(buffer);
157*61c4878aSAndroid Build Coastguard Worker 
158*61c4878aSAndroid Build Coastguard Worker   bb.resize(1);
159*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(Status::OutOfRange(), bb.append(9, byte{0x04}).status());
160*61c4878aSAndroid Build Coastguard Worker }
161*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,Resize_Smaller)162*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, Resize_Smaller) {
163*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
164*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
165*61c4878aSAndroid Build Coastguard Worker 
166*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
167*61c4878aSAndroid Build Coastguard Worker 
168*61c4878aSAndroid Build Coastguard Worker   bb.resize(1);
169*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.ok());
170*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(1u, bb.size());
171*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x01}, bb.data()[0]);
172*61c4878aSAndroid Build Coastguard Worker }
173*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,Resize_Clear)174*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, Resize_Clear) {
175*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
176*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
177*61c4878aSAndroid Build Coastguard Worker 
178*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
179*61c4878aSAndroid Build Coastguard Worker 
180*61c4878aSAndroid Build Coastguard Worker   bb.resize(0);
181*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.ok());
182*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(0u, bb.size());
183*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.empty());
184*61c4878aSAndroid Build Coastguard Worker }
185*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,Resize_Larger_Fails)186*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, Resize_Larger_Fails) {
187*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
188*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
189*61c4878aSAndroid Build Coastguard Worker 
190*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
191*61c4878aSAndroid Build Coastguard Worker 
192*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(3u, bb.size());
193*61c4878aSAndroid Build Coastguard Worker   bb.resize(5);
194*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(3u, bb.size());
195*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(bb.status(), Status::OutOfRange());
196*61c4878aSAndroid Build Coastguard Worker }
197*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,Status_StartsOk)198*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, Status_StartsOk) {
199*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<16> bb;
200*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(OkStatus(), bb.status());
201*61c4878aSAndroid Build Coastguard Worker }
202*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,Status_StatusUpdate)203*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, Status_StatusUpdate) {
204*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
205*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<2> bb;
206*61c4878aSAndroid Build Coastguard Worker 
207*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(bb.append(buffer).ok());
208*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(Status::ResourceExhausted(), bb.status());
209*61c4878aSAndroid Build Coastguard Worker 
210*61c4878aSAndroid Build Coastguard Worker   bb.resize(4);
211*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(Status::OutOfRange(), bb.status());
212*61c4878aSAndroid Build Coastguard Worker 
213*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(bb.append(buffer.data(), 0).ok());
214*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(Status::OutOfRange(), bb.status());
215*61c4878aSAndroid Build Coastguard Worker }
216*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,Status_ClearStatus_SetsStatusToOk)217*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, Status_ClearStatus_SetsStatusToOk) {
218*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
219*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<2> bb;
220*61c4878aSAndroid Build Coastguard Worker 
221*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(bb.append(buffer).ok());
222*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(Status::ResourceExhausted(), bb.status());
223*61c4878aSAndroid Build Coastguard Worker 
224*61c4878aSAndroid Build Coastguard Worker   bb.clear_status();
225*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(OkStatus(), bb.status());
226*61c4878aSAndroid Build Coastguard Worker }
227*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,PushBack)228*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, PushBack) {
229*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<12> bb;
230*61c4878aSAndroid Build Coastguard Worker   bb.push_back(byte{0x01});
231*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(OkStatus(), bb.status());
232*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(1u, bb.size());
233*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x01}, bb.data()[0]);
234*61c4878aSAndroid Build Coastguard Worker }
235*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,PushBack_Full)236*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, PushBack_Full) {
237*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<1> bb;
238*61c4878aSAndroid Build Coastguard Worker   bb.push_back(byte{0x01});
239*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(OkStatus(), bb.status());
240*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(1u, bb.size());
241*61c4878aSAndroid Build Coastguard Worker }
242*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,PushBack_Full_ResourceExhausted)243*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, PushBack_Full_ResourceExhausted) {
244*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<1> bb;
245*61c4878aSAndroid Build Coastguard Worker   bb.push_back(byte{0x01});
246*61c4878aSAndroid Build Coastguard Worker   bb.push_back(byte{0x01});
247*61c4878aSAndroid Build Coastguard Worker 
248*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(Status::ResourceExhausted(), bb.status());
249*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(1u, bb.size());
250*61c4878aSAndroid Build Coastguard Worker }
251*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,PopBack)252*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, PopBack) {
253*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
254*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<3> bb;
255*61c4878aSAndroid Build Coastguard Worker 
256*61c4878aSAndroid Build Coastguard Worker   bb.append(buffer.data(), 3);
257*61c4878aSAndroid Build Coastguard Worker 
258*61c4878aSAndroid Build Coastguard Worker   bb.pop_back();
259*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(OkStatus(), bb.status());
260*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(2u, bb.size());
261*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x01}, bb.data()[0]);
262*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x02}, bb.data()[1]);
263*61c4878aSAndroid Build Coastguard Worker }
264*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,PopBack_Empty)265*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, PopBack_Empty) {
266*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
267*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<3> bb;
268*61c4878aSAndroid Build Coastguard Worker   bb.append(buffer.data(), 3);
269*61c4878aSAndroid Build Coastguard Worker 
270*61c4878aSAndroid Build Coastguard Worker   bb.pop_back();
271*61c4878aSAndroid Build Coastguard Worker   bb.pop_back();
272*61c4878aSAndroid Build Coastguard Worker   bb.pop_back();
273*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(OkStatus(), bb.status());
274*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(0u, bb.size());
275*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.empty());
276*61c4878aSAndroid Build Coastguard Worker }
277*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Assign)278*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Assign) {
279*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
280*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<10> one;
281*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<10> two;
282*61c4878aSAndroid Build Coastguard Worker 
283*61c4878aSAndroid Build Coastguard Worker   one.append(buffer.data(), 3);
284*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x01}, one.data()[0]);
285*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x02}, one.data()[1]);
286*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x03}, one.data()[2]);
287*61c4878aSAndroid Build Coastguard Worker 
288*61c4878aSAndroid Build Coastguard Worker   two = one;
289*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x01}, two.data()[0]);
290*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x02}, two.data()[1]);
291*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x03}, two.data()[2]);
292*61c4878aSAndroid Build Coastguard Worker 
293*61c4878aSAndroid Build Coastguard Worker   constexpr auto kBytesTestLiteral = MakeBytes(0x04, 0x05, 0x06, 0x07);
294*61c4878aSAndroid Build Coastguard Worker   one.append(kBytesTestLiteral.data(), 2);
295*61c4878aSAndroid Build Coastguard Worker   two.append(kBytesTestLiteral.data(), 4);
296*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(5u, one.size());
297*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(7u, two.size());
298*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x04}, one.data()[3]);
299*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x05}, one.data()[4]);
300*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x04}, two.data()[3]);
301*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x05}, two.data()[4]);
302*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x06}, two.data()[5]);
303*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x07}, two.data()[6]);
304*61c4878aSAndroid Build Coastguard Worker 
305*61c4878aSAndroid Build Coastguard Worker   two.push_back(byte{0x01});
306*61c4878aSAndroid Build Coastguard Worker   two.push_back(byte{0x01});
307*61c4878aSAndroid Build Coastguard Worker   two.push_back(byte{0x01});
308*61c4878aSAndroid Build Coastguard Worker   two.push_back(byte{0x01});
309*61c4878aSAndroid Build Coastguard Worker   ASSERT_EQ(Status::ResourceExhausted(), two.status());
310*61c4878aSAndroid Build Coastguard Worker 
311*61c4878aSAndroid Build Coastguard Worker   one = two;
312*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x01}, two.data()[7]);
313*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x01}, two.data()[8]);
314*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x01}, two.data()[9]);
315*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(Status::ResourceExhausted(), one.status());
316*61c4878aSAndroid Build Coastguard Worker }
317*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,ResizeError_NoDataAddedAfter)318*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, ResizeError_NoDataAddedAfter) {
319*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
320*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
321*61c4878aSAndroid Build Coastguard Worker 
322*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
323*61c4878aSAndroid Build Coastguard Worker 
324*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(3u, bb.size());
325*61c4878aSAndroid Build Coastguard Worker   bb.resize(5);
326*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(3u, bb.size());
327*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(bb.status(), Status::OutOfRange());
328*61c4878aSAndroid Build Coastguard Worker 
329*61c4878aSAndroid Build Coastguard Worker   bb.PutInt8(0xFE);
330*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(3u, bb.size());
331*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(bb.status(), Status::OutOfRange());
332*61c4878aSAndroid Build Coastguard Worker }
333*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuilder,AddingNoBytesToZeroSizedByteBuffer)334*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuilder, AddingNoBytesToZeroSizedByteBuffer) {
335*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
336*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<0> bb;
337*61c4878aSAndroid Build Coastguard Worker 
338*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer.data(), 0).ok());
339*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(0u, bb.size());
340*61c4878aSAndroid Build Coastguard Worker }
341*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Putting8ByteInts_Full)342*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Putting8ByteInts_Full) {
343*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<2> bb;
344*61c4878aSAndroid Build Coastguard Worker   bb.PutInt8(0xFE);
345*61c4878aSAndroid Build Coastguard Worker   bb.PutUint8(0x02);
346*61c4878aSAndroid Build Coastguard Worker 
347*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xFE}, bb.data()[0]);
348*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x02}, bb.data()[1]);
349*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(OkStatus(), bb.status());
350*61c4878aSAndroid Build Coastguard Worker }
351*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Putting8ByteInts_Exhausted)352*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Putting8ByteInts_Exhausted) {
353*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<2> bb;
354*61c4878aSAndroid Build Coastguard Worker   bb.PutInt8(0xFE);
355*61c4878aSAndroid Build Coastguard Worker   bb.PutUint8(0x02);
356*61c4878aSAndroid Build Coastguard Worker   bb.PutUint8(0x05);
357*61c4878aSAndroid Build Coastguard Worker 
358*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xFE}, bb.data()[0]);
359*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x02}, bb.data()[1]);
360*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(Status::ResourceExhausted(), bb.status());
361*61c4878aSAndroid Build Coastguard Worker }
362*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Putting16ByteInts_Full_kLittleEndian)363*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Putting16ByteInts_Full_kLittleEndian) {
364*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<4> bb;
365*61c4878aSAndroid Build Coastguard Worker   bb.PutInt16(0xFFF7);
366*61c4878aSAndroid Build Coastguard Worker   bb.PutUint16(0x0008);
367*61c4878aSAndroid Build Coastguard Worker 
368*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xF7}, bb.data()[0]);
369*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xFF}, bb.data()[1]);
370*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x08}, bb.data()[2]);
371*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x00}, bb.data()[3]);
372*61c4878aSAndroid Build Coastguard Worker 
373*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(OkStatus(), bb.status());
374*61c4878aSAndroid Build Coastguard Worker }
375*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Putting16ByteInts_Exhausted_kBigEndian)376*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Putting16ByteInts_Exhausted_kBigEndian) {
377*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<5> bb;
378*61c4878aSAndroid Build Coastguard Worker   bb.PutInt16(0xFFF7, endian::big);
379*61c4878aSAndroid Build Coastguard Worker   bb.PutUint16(0x0008, endian::big);
380*61c4878aSAndroid Build Coastguard Worker 
381*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xFF}, bb.data()[0]);
382*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xF7}, bb.data()[1]);
383*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x00}, bb.data()[2]);
384*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x08}, bb.data()[3]);
385*61c4878aSAndroid Build Coastguard Worker 
386*61c4878aSAndroid Build Coastguard Worker   bb.PutInt16(0xFAFA, endian::big);
387*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(4u, bb.size());
388*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(Status::ResourceExhausted(), bb.status());
389*61c4878aSAndroid Build Coastguard Worker }
390*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Putting32ByteInts_Full_kLittleEndian)391*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Putting32ByteInts_Full_kLittleEndian) {
392*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
393*61c4878aSAndroid Build Coastguard Worker   bb.PutInt32(0xFFFFFFF1);
394*61c4878aSAndroid Build Coastguard Worker   bb.PutUint32(0x00000014);
395*61c4878aSAndroid Build Coastguard Worker 
396*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xF1}, bb.data()[0]);
397*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xFF}, bb.data()[1]);
398*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xFF}, bb.data()[2]);
399*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xFF}, bb.data()[3]);
400*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x14}, bb.data()[4]);
401*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x00}, bb.data()[5]);
402*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x00}, bb.data()[6]);
403*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x00}, bb.data()[7]);
404*61c4878aSAndroid Build Coastguard Worker 
405*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(OkStatus(), bb.status());
406*61c4878aSAndroid Build Coastguard Worker }
407*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Putting32ByteInts_Exhausted_kBigEndian)408*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Putting32ByteInts_Exhausted_kBigEndian) {
409*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<10> bb;
410*61c4878aSAndroid Build Coastguard Worker   bb.PutInt32(0xF92927B2, endian::big);
411*61c4878aSAndroid Build Coastguard Worker   bb.PutUint32(0x0C90739E, endian::big);
412*61c4878aSAndroid Build Coastguard Worker 
413*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xF9}, bb.data()[0]);
414*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x29}, bb.data()[1]);
415*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x27}, bb.data()[2]);
416*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xB2}, bb.data()[3]);
417*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x0C}, bb.data()[4]);
418*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x90}, bb.data()[5]);
419*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x73}, bb.data()[6]);
420*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x9E}, bb.data()[7]);
421*61c4878aSAndroid Build Coastguard Worker 
422*61c4878aSAndroid Build Coastguard Worker   bb.PutInt32(-114743374, endian::big);
423*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(8u, bb.size());
424*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(Status::ResourceExhausted(), bb.status());
425*61c4878aSAndroid Build Coastguard Worker }
426*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Putting64ByteInts_Full_kLittleEndian)427*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Putting64ByteInts_Full_kLittleEndian) {
428*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<16> bb;
429*61c4878aSAndroid Build Coastguard Worker   bb.PutInt64(0x000001E8A7A0D569);
430*61c4878aSAndroid Build Coastguard Worker   bb.PutUint64(0xFFFFFE17585F2A97);
431*61c4878aSAndroid Build Coastguard Worker 
432*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x69}, bb.data()[0]);
433*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xD5}, bb.data()[1]);
434*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xA0}, bb.data()[2]);
435*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xA7}, bb.data()[3]);
436*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xE8}, bb.data()[4]);
437*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x01}, bb.data()[5]);
438*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x00}, bb.data()[6]);
439*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x00}, bb.data()[7]);
440*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x97}, bb.data()[8]);
441*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x2A}, bb.data()[9]);
442*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x5F}, bb.data()[10]);
443*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x58}, bb.data()[11]);
444*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x17}, bb.data()[12]);
445*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xFE}, bb.data()[13]);
446*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xFF}, bb.data()[14]);
447*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xFF}, bb.data()[15]);
448*61c4878aSAndroid Build Coastguard Worker 
449*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(OkStatus(), bb.status());
450*61c4878aSAndroid Build Coastguard Worker }
451*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Putting64ByteInts_Exhausted_kBigEndian)452*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Putting64ByteInts_Exhausted_kBigEndian) {
453*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<20> bb;
454*61c4878aSAndroid Build Coastguard Worker   bb.PutUint64(0x000001E8A7A0D569, endian::big);
455*61c4878aSAndroid Build Coastguard Worker   bb.PutInt64(0xFFFFFE17585F2A97, endian::big);
456*61c4878aSAndroid Build Coastguard Worker 
457*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x00}, bb.data()[0]);
458*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x00}, bb.data()[1]);
459*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x01}, bb.data()[2]);
460*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xE8}, bb.data()[3]);
461*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xA7}, bb.data()[4]);
462*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xA0}, bb.data()[5]);
463*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xD5}, bb.data()[6]);
464*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x69}, bb.data()[7]);
465*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xFF}, bb.data()[8]);
466*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xFF}, bb.data()[9]);
467*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xFE}, bb.data()[10]);
468*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x17}, bb.data()[11]);
469*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x58}, bb.data()[12]);
470*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x5F}, bb.data()[13]);
471*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x2A}, bb.data()[14]);
472*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x97}, bb.data()[15]);
473*61c4878aSAndroid Build Coastguard Worker 
474*61c4878aSAndroid Build Coastguard Worker   bb.PutInt64(-6099875637501324530, endian::big);
475*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(16u, bb.size());
476*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(Status::ResourceExhausted(), bb.status());
477*61c4878aSAndroid Build Coastguard Worker }
478*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,PuttingInts_MixedTypes_MixedEndian)479*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, PuttingInts_MixedTypes_MixedEndian) {
480*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<16> bb;
481*61c4878aSAndroid Build Coastguard Worker   bb.PutUint8(0x03);
482*61c4878aSAndroid Build Coastguard Worker   bb.PutInt16(0xFD6D, endian::big);
483*61c4878aSAndroid Build Coastguard Worker   bb.PutUint32(0x482B3D9E);
484*61c4878aSAndroid Build Coastguard Worker   bb.PutInt64(0x9A1C3641843DF317, endian::big);
485*61c4878aSAndroid Build Coastguard Worker   bb.PutInt8(0xFB);
486*61c4878aSAndroid Build Coastguard Worker 
487*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x03}, bb.data()[0]);
488*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xFD}, bb.data()[1]);
489*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x6D}, bb.data()[2]);
490*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x9E}, bb.data()[3]);
491*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x3D}, bb.data()[4]);
492*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x2B}, bb.data()[5]);
493*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x48}, bb.data()[6]);
494*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x9A}, bb.data()[7]);
495*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x1C}, bb.data()[8]);
496*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x36}, bb.data()[9]);
497*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x41}, bb.data()[10]);
498*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x84}, bb.data()[11]);
499*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x3D}, bb.data()[12]);
500*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xF3}, bb.data()[13]);
501*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0x17}, bb.data()[14]);
502*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte{0xFB}, bb.data()[15]);
503*61c4878aSAndroid Build Coastguard Worker 
504*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(OkStatus(), bb.status());
505*61c4878aSAndroid Build Coastguard Worker }
506*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator)507*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator) {
508*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
509*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
510*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
511*61c4878aSAndroid Build Coastguard Worker 
512*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
513*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x01});
514*61c4878aSAndroid Build Coastguard Worker 
515*61c4878aSAndroid Build Coastguard Worker   ++it;
516*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x02});
517*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it - bb.begin(), 1);
518*61c4878aSAndroid Build Coastguard Worker 
519*61c4878aSAndroid Build Coastguard Worker   ++it;
520*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x03});
521*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it - bb.begin(), 2);
522*61c4878aSAndroid Build Coastguard Worker 
523*61c4878aSAndroid Build Coastguard Worker   ++it;
524*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it, bb.end());
525*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(static_cast<size_t>(it - bb.begin()), bb.size());
526*61c4878aSAndroid Build Coastguard Worker }
527*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_PreIncrement)528*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_PreIncrement) {
529*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
530*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
531*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
532*61c4878aSAndroid Build Coastguard Worker 
533*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
534*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*(++it), byte{0x02});
535*61c4878aSAndroid Build Coastguard Worker }
536*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_PostIncrement)537*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_PostIncrement) {
538*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
539*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
540*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
541*61c4878aSAndroid Build Coastguard Worker 
542*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
543*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*(it++), byte{0x01});
544*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x02});
545*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*(it++), byte{0x02});
546*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x03});
547*61c4878aSAndroid Build Coastguard Worker }
548*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_PreDecrement)549*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_PreDecrement) {
550*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
551*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
552*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
553*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
554*61c4878aSAndroid Build Coastguard Worker 
555*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x01});
556*61c4878aSAndroid Build Coastguard Worker   ++it;
557*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x02});
558*61c4878aSAndroid Build Coastguard Worker   ++it;
559*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x03});
560*61c4878aSAndroid Build Coastguard Worker   ++it;
561*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it, bb.end());
562*61c4878aSAndroid Build Coastguard Worker 
563*61c4878aSAndroid Build Coastguard Worker   --it;
564*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x03});
565*61c4878aSAndroid Build Coastguard Worker   --it;
566*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x02});
567*61c4878aSAndroid Build Coastguard Worker   --it;
568*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x01});
569*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it, bb.begin());
570*61c4878aSAndroid Build Coastguard Worker }
571*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_PostDecrement)572*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_PostDecrement) {
573*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
574*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
575*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
576*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
577*61c4878aSAndroid Build Coastguard Worker 
578*61c4878aSAndroid Build Coastguard Worker   it += 2;
579*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x03});
580*61c4878aSAndroid Build Coastguard Worker 
581*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*(it--), byte{0x03});
582*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x02});
583*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*(it--), byte{0x02});
584*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x01});
585*61c4878aSAndroid Build Coastguard Worker }
586*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_PlusEquals)587*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_PlusEquals) {
588*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
589*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
590*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
591*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
592*61c4878aSAndroid Build Coastguard Worker 
593*61c4878aSAndroid Build Coastguard Worker   it += 2;
594*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x03});
595*61c4878aSAndroid Build Coastguard Worker 
596*61c4878aSAndroid Build Coastguard Worker   it += -1;
597*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x02});
598*61c4878aSAndroid Build Coastguard Worker 
599*61c4878aSAndroid Build Coastguard Worker   it += 1;
600*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x03});
601*61c4878aSAndroid Build Coastguard Worker 
602*61c4878aSAndroid Build Coastguard Worker   it += -2;
603*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x01});
604*61c4878aSAndroid Build Coastguard Worker }
605*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_MinusEquals)606*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_MinusEquals) {
607*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
608*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
609*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
610*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
611*61c4878aSAndroid Build Coastguard Worker 
612*61c4878aSAndroid Build Coastguard Worker   it -= -2;
613*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x03});
614*61c4878aSAndroid Build Coastguard Worker 
615*61c4878aSAndroid Build Coastguard Worker   it -= +1;
616*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x02});
617*61c4878aSAndroid Build Coastguard Worker 
618*61c4878aSAndroid Build Coastguard Worker   it -= -1;
619*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x03});
620*61c4878aSAndroid Build Coastguard Worker 
621*61c4878aSAndroid Build Coastguard Worker   it -= +2;
622*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it, byte{0x01});
623*61c4878aSAndroid Build Coastguard Worker }
624*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_Plus)625*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_Plus) {
626*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
627*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
628*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
629*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
630*61c4878aSAndroid Build Coastguard Worker 
631*61c4878aSAndroid Build Coastguard Worker   auto test = it + 2;
632*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*test, byte{0x03});
633*61c4878aSAndroid Build Coastguard Worker 
634*61c4878aSAndroid Build Coastguard Worker   test = test + -1;
635*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*test, byte{0x02});
636*61c4878aSAndroid Build Coastguard Worker 
637*61c4878aSAndroid Build Coastguard Worker   test = test + 1;
638*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*test, byte{0x03});
639*61c4878aSAndroid Build Coastguard Worker 
640*61c4878aSAndroid Build Coastguard Worker   test = test + (-2);
641*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*test, byte{0x01});
642*61c4878aSAndroid Build Coastguard Worker }
643*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_Minus)644*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_Minus) {
645*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
646*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
647*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
648*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
649*61c4878aSAndroid Build Coastguard Worker 
650*61c4878aSAndroid Build Coastguard Worker   auto test = it - (-2);
651*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*test, byte{0x03});
652*61c4878aSAndroid Build Coastguard Worker 
653*61c4878aSAndroid Build Coastguard Worker   test = test - 1;
654*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*test, byte{0x02});
655*61c4878aSAndroid Build Coastguard Worker 
656*61c4878aSAndroid Build Coastguard Worker   test = test - (-1);
657*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*test, byte{0x03});
658*61c4878aSAndroid Build Coastguard Worker 
659*61c4878aSAndroid Build Coastguard Worker   test = test - 2;
660*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*test, byte{0x01});
661*61c4878aSAndroid Build Coastguard Worker }
662*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_LessThan)663*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_LessThan) {
664*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
665*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
666*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
667*61c4878aSAndroid Build Coastguard Worker 
668*61c4878aSAndroid Build Coastguard Worker   auto it_1 = bb.begin();
669*61c4878aSAndroid Build Coastguard Worker   auto it_2 = it_1 + 2;
670*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_1, byte{0x01});
671*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_2, byte{0x03});
672*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(it_1 < it_2);
673*61c4878aSAndroid Build Coastguard Worker 
674*61c4878aSAndroid Build Coastguard Worker   it_1++;
675*61c4878aSAndroid Build Coastguard Worker   it_2--;
676*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_1, byte{0x02});
677*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_2, byte{0x02});
678*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(it_1 < it_2);
679*61c4878aSAndroid Build Coastguard Worker 
680*61c4878aSAndroid Build Coastguard Worker   it_1++;
681*61c4878aSAndroid Build Coastguard Worker   it_2--;
682*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_1, byte{0x03});
683*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_2, byte{0x01});
684*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(it_1 < it_2);
685*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(it_2 < it_1);
686*61c4878aSAndroid Build Coastguard Worker }
687*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_GreaterThan)688*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_GreaterThan) {
689*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
690*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
691*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
692*61c4878aSAndroid Build Coastguard Worker 
693*61c4878aSAndroid Build Coastguard Worker   auto it_1 = bb.begin();
694*61c4878aSAndroid Build Coastguard Worker   auto it_2 = it_1 + 2;
695*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_1, byte{0x01});
696*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_2, byte{0x03});
697*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(it_1 > it_2);
698*61c4878aSAndroid Build Coastguard Worker 
699*61c4878aSAndroid Build Coastguard Worker   it_1++;
700*61c4878aSAndroid Build Coastguard Worker   it_2--;
701*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_1, byte{0x02});
702*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_2, byte{0x02});
703*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(it_1 > it_2);
704*61c4878aSAndroid Build Coastguard Worker 
705*61c4878aSAndroid Build Coastguard Worker   it_1++;
706*61c4878aSAndroid Build Coastguard Worker   it_2--;
707*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_1, byte{0x03});
708*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_2, byte{0x01});
709*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(it_1 > it_2);
710*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(it_2 > it_1);
711*61c4878aSAndroid Build Coastguard Worker }
712*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_LessThanEqual_GreaterThanEqual)713*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_LessThanEqual_GreaterThanEqual) {
714*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
715*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
716*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
717*61c4878aSAndroid Build Coastguard Worker 
718*61c4878aSAndroid Build Coastguard Worker   auto it_1 = bb.begin();
719*61c4878aSAndroid Build Coastguard Worker   auto it_2 = it_1 + 2;
720*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_1, byte{0x01});
721*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_2, byte{0x03});
722*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(it_1 >= it_2);
723*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(it_1 <= it_2);
724*61c4878aSAndroid Build Coastguard Worker 
725*61c4878aSAndroid Build Coastguard Worker   it_1++;
726*61c4878aSAndroid Build Coastguard Worker   it_2--;
727*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_1, byte{0x02});
728*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_2, byte{0x02});
729*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(it_1 >= it_2);
730*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(it_1 <= it_2);
731*61c4878aSAndroid Build Coastguard Worker 
732*61c4878aSAndroid Build Coastguard Worker   it_1++;
733*61c4878aSAndroid Build Coastguard Worker   it_2--;
734*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_1, byte{0x03});
735*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(*it_2, byte{0x01});
736*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(it_1 <= it_2);
737*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(it_1 >= it_2);
738*61c4878aSAndroid Build Coastguard Worker }
739*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_Indexing)740*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_Indexing) {
741*61c4878aSAndroid Build Coastguard Worker   std::array<byte, 3> buffer = MakeBytes(0x01, 0x02, 0x03);
742*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
743*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(bb.append(buffer).ok());
744*61c4878aSAndroid Build Coastguard Worker 
745*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
746*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it[0], byte{0x01});
747*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it[1], byte{0x02});
748*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it[2], byte{0x03});
749*61c4878aSAndroid Build Coastguard Worker }
750*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_PeekValues_1Byte)751*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_PeekValues_1Byte) {
752*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<3> bb;
753*61c4878aSAndroid Build Coastguard Worker   bb.PutInt8(0xF2);
754*61c4878aSAndroid Build Coastguard Worker   bb.PutUint8(0xE5);
755*61c4878aSAndroid Build Coastguard Worker   bb.PutInt8(0x5F);
756*61c4878aSAndroid Build Coastguard Worker 
757*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
758*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.PeekInt8(), int8_t(0xF2));
759*61c4878aSAndroid Build Coastguard Worker   it = it + 1;
760*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.PeekUint8(), uint8_t(0xE5));
761*61c4878aSAndroid Build Coastguard Worker   it = it + 1;
762*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.PeekInt8(), int8_t(0x5F));
763*61c4878aSAndroid Build Coastguard Worker }
764*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_PeekValues_2Bytes)765*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_PeekValues_2Bytes) {
766*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<4> bb;
767*61c4878aSAndroid Build Coastguard Worker   bb.PutInt16(0xA7F1);
768*61c4878aSAndroid Build Coastguard Worker   bb.PutUint16(0xF929, endian::big);
769*61c4878aSAndroid Build Coastguard Worker 
770*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
771*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.PeekInt16(), int16_t(0xA7F1));
772*61c4878aSAndroid Build Coastguard Worker   it = it + 2;
773*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.PeekUint16(endian::big), uint16_t(0xF929));
774*61c4878aSAndroid Build Coastguard Worker }
775*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_PeekValues_4Bytes)776*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_PeekValues_4Bytes) {
777*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
778*61c4878aSAndroid Build Coastguard Worker   bb.PutInt32(0xFFFFFFF1);
779*61c4878aSAndroid Build Coastguard Worker   bb.PutUint32(0xF92927B2, endian::big);
780*61c4878aSAndroid Build Coastguard Worker 
781*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
782*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.PeekInt32(), int32_t(0xFFFFFFF1));
783*61c4878aSAndroid Build Coastguard Worker   it = it + 4;
784*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.PeekUint32(endian::big), uint32_t(0xF92927B2));
785*61c4878aSAndroid Build Coastguard Worker }
786*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_PeekValues_8Bytes)787*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_PeekValues_8Bytes) {
788*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<16> bb;
789*61c4878aSAndroid Build Coastguard Worker   bb.PutUint64(0x000001E8A7A0D569);
790*61c4878aSAndroid Build Coastguard Worker   bb.PutInt64(0xFFFFFE17585F2A97, endian::big);
791*61c4878aSAndroid Build Coastguard Worker 
792*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
793*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.PeekUint64(), uint64_t(0x000001E8A7A0D569));
794*61c4878aSAndroid Build Coastguard Worker   it = it + 8;
795*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.PeekInt64(endian::big), int64_t(0xFFFFFE17585F2A97));
796*61c4878aSAndroid Build Coastguard Worker }
797*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_ReadValues_1Byte)798*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_ReadValues_1Byte) {
799*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<3> bb;
800*61c4878aSAndroid Build Coastguard Worker   bb.PutInt8(0xF2);
801*61c4878aSAndroid Build Coastguard Worker   bb.PutUint8(0xE5);
802*61c4878aSAndroid Build Coastguard Worker   bb.PutInt8(0x5F);
803*61c4878aSAndroid Build Coastguard Worker 
804*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
805*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.ReadInt8(), int8_t(0xF2));
806*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.ReadUint8(), uint8_t(0xE5));
807*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.ReadInt8(), int8_t(0x5F));
808*61c4878aSAndroid Build Coastguard Worker }
809*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_ReadValues_2Bytes)810*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_ReadValues_2Bytes) {
811*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<4> bb;
812*61c4878aSAndroid Build Coastguard Worker   bb.PutInt16(0xA7F1);
813*61c4878aSAndroid Build Coastguard Worker   bb.PutUint16(0xF929, endian::big);
814*61c4878aSAndroid Build Coastguard Worker 
815*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
816*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.ReadInt16(), int16_t(0xA7F1));
817*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.ReadUint16(endian::big), uint16_t(0xF929));
818*61c4878aSAndroid Build Coastguard Worker }
819*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_ReadValues_4Bytes)820*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_ReadValues_4Bytes) {
821*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<8> bb;
822*61c4878aSAndroid Build Coastguard Worker   bb.PutInt32(0xFFFFFFF1);
823*61c4878aSAndroid Build Coastguard Worker   bb.PutUint32(0xF92927B2, endian::big);
824*61c4878aSAndroid Build Coastguard Worker 
825*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
826*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.ReadInt32(), int32_t(0xFFFFFFF1));
827*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.ReadUint32(endian::big), uint32_t(0xF92927B2));
828*61c4878aSAndroid Build Coastguard Worker }
829*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,Iterator_ReadValues_8Bytes)830*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, Iterator_ReadValues_8Bytes) {
831*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<16> bb;
832*61c4878aSAndroid Build Coastguard Worker   bb.PutUint64(0x000001E8A7A0D569);
833*61c4878aSAndroid Build Coastguard Worker   bb.PutInt64(0xFFFFFE17585F2A97, endian::big);
834*61c4878aSAndroid Build Coastguard Worker 
835*61c4878aSAndroid Build Coastguard Worker   auto it = bb.begin();
836*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.ReadUint64(), uint64_t(0x000001E8A7A0D569));
837*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(it.ReadInt64(endian::big), int64_t(0xFFFFFE17585F2A97));
838*61c4878aSAndroid Build Coastguard Worker }
839*61c4878aSAndroid Build Coastguard Worker 
TEST(ByteBuffer,ConvertsToSpan)840*61c4878aSAndroid Build Coastguard Worker TEST(ByteBuffer, ConvertsToSpan) {
841*61c4878aSAndroid Build Coastguard Worker   ByteBuffer<16> bb;
842*61c4878aSAndroid Build Coastguard Worker   bb.push_back(std::byte{210});
843*61c4878aSAndroid Build Coastguard Worker 
844*61c4878aSAndroid Build Coastguard Worker   span<const std::byte> byte_span(bb);
845*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte_span.data(), bb.data());
846*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte_span.size(), bb.size());
847*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(byte_span[0], std::byte{210});
848*61c4878aSAndroid Build Coastguard Worker }
849*61c4878aSAndroid Build Coastguard Worker 
850*61c4878aSAndroid Build Coastguard Worker }  // namespace
851*61c4878aSAndroid Build Coastguard Worker }  // namespace pw
852