xref: /aosp_15_r20/external/cronet/base/containers/span_writer_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2024 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "base/containers/span_writer.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include "testing/gmock/include/gmock/gmock.h"
8*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker namespace base {
11*6777b538SAndroid Build Coastguard Worker namespace {
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker using testing::Optional;
14*6777b538SAndroid Build Coastguard Worker 
TEST(SpanWriterTest,Construct)15*6777b538SAndroid Build Coastguard Worker TEST(SpanWriterTest, Construct) {
16*6777b538SAndroid Build Coastguard Worker   std::array<int, 5u> kArray = {1, 2, 3, 4, 5};
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker   auto r = SpanWriter(base::span(kArray));
19*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(r.remaining(), 5u);
20*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(r.remaining_span().data(), &kArray[0u]);
21*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(r.remaining_span().size(), 5u);
22*6777b538SAndroid Build Coastguard Worker }
23*6777b538SAndroid Build Coastguard Worker 
TEST(SpanWriterTest,Write)24*6777b538SAndroid Build Coastguard Worker TEST(SpanWriterTest, Write) {
25*6777b538SAndroid Build Coastguard Worker   // Dynamic size.
26*6777b538SAndroid Build Coastguard Worker   {
27*6777b538SAndroid Build Coastguard Worker     std::array<int, 5u> kArray = {1, 2, 3, 4, 5};
28*6777b538SAndroid Build Coastguard Worker     auto r = SpanWriter(base::span(kArray));
29*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.num_written(), 0u);
30*6777b538SAndroid Build Coastguard Worker 
31*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Write(base::span({9, 8}).subspan(0u)));
32*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 3u);
33*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.num_written(), 2u);
34*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({9, 8, 3, 4, 5}));
35*6777b538SAndroid Build Coastguard Worker 
36*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Write(base::span<int>()));
37*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 3u);
38*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.num_written(), 2u);
39*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({9, 8, 3, 4, 5}));
40*6777b538SAndroid Build Coastguard Worker 
41*6777b538SAndroid Build Coastguard Worker     EXPECT_FALSE(r.Write(base::span({7, 6, -1, -1}).subspan(0u)));
42*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 3u);
43*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.num_written(), 2u);
44*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({9, 8, 3, 4, 5}));
45*6777b538SAndroid Build Coastguard Worker 
46*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Write(base::span({7, 6, -1}).subspan(0u)));
47*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 0u);
48*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.num_written(), 5u);
49*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({9, 8, 7, 6, -1}));
50*6777b538SAndroid Build Coastguard Worker 
51*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Write(base::span<int>()));
52*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 0u);
53*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.num_written(), 5u);
54*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({9, 8, 7, 6, -1}));
55*6777b538SAndroid Build Coastguard Worker   }
56*6777b538SAndroid Build Coastguard Worker 
57*6777b538SAndroid Build Coastguard Worker   // Fixed size with mutable input.
58*6777b538SAndroid Build Coastguard Worker   {
59*6777b538SAndroid Build Coastguard Worker     std::array<int, 5u> kArray = {1, 2, 3, 4, 5};
60*6777b538SAndroid Build Coastguard Worker     auto r = SpanWriter(base::span(kArray));
61*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.num_written(), 0u);
62*6777b538SAndroid Build Coastguard Worker 
63*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Write(base::span({9, 8})));
64*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 3u);
65*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.num_written(), 2u);
66*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({9, 8, 3, 4, 5}));
67*6777b538SAndroid Build Coastguard Worker 
68*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Write(base::span<int, 0u>()));
69*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 3u);
70*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.num_written(), 2u);
71*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({9, 8, 3, 4, 5}));
72*6777b538SAndroid Build Coastguard Worker 
73*6777b538SAndroid Build Coastguard Worker     EXPECT_FALSE(r.Write(base::span({7, 6, -1, -1})));
74*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 3u);
75*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.num_written(), 2u);
76*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({9, 8, 3, 4, 5}));
77*6777b538SAndroid Build Coastguard Worker 
78*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Write(base::span({7, 6, -1})));
79*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 0u);
80*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.num_written(), 5u);
81*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({9, 8, 7, 6, -1}));
82*6777b538SAndroid Build Coastguard Worker 
83*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Write(base::span<int, 0u>()));
84*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 0u);
85*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.num_written(), 5u);
86*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({9, 8, 7, 6, -1}));
87*6777b538SAndroid Build Coastguard Worker   }
88*6777b538SAndroid Build Coastguard Worker 
89*6777b538SAndroid Build Coastguard Worker   // Fixed size with const input.
90*6777b538SAndroid Build Coastguard Worker   {
91*6777b538SAndroid Build Coastguard Worker     std::array<int, 5u> kArray = {1, 2, 3, 4, 5};
92*6777b538SAndroid Build Coastguard Worker     auto r = SpanWriter(base::span(kArray));
93*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.num_written(), 0u);
94*6777b538SAndroid Build Coastguard Worker 
95*6777b538SAndroid Build Coastguard Worker     std::array<const int, 2u> kConstArray = {9, 8};
96*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Write(base::span(kConstArray)));
97*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 3u);
98*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.num_written(), 2u);
99*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({9, 8, 3, 4, 5}));
100*6777b538SAndroid Build Coastguard Worker   }
101*6777b538SAndroid Build Coastguard Worker }
102*6777b538SAndroid Build Coastguard Worker 
TEST(SpanWriterTest,Skip)103*6777b538SAndroid Build Coastguard Worker TEST(SpanWriterTest, Skip) {
104*6777b538SAndroid Build Coastguard Worker   std::array<int, 5u> kArray = {1, 2, 3, 4, 5};
105*6777b538SAndroid Build Coastguard Worker 
106*6777b538SAndroid Build Coastguard Worker   auto r = SpanWriter(base::span(kArray));
107*6777b538SAndroid Build Coastguard Worker   auto s = r.Skip(2u);
108*6777b538SAndroid Build Coastguard Worker   static_assert(std::same_as<decltype(s), std::optional<base::span<int>>>);
109*6777b538SAndroid Build Coastguard Worker   EXPECT_THAT(s, Optional(base::span(kArray).first<2u>()));
110*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(r.remaining(), 3u);
111*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(r.remaining_span(), base::span({3, 4, 5}));
112*6777b538SAndroid Build Coastguard Worker 
113*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(r.Skip(12u));
114*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(r.remaining(), 3u);
115*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(r.remaining_span(), base::span({3, 4, 5}));
116*6777b538SAndroid Build Coastguard Worker }
117*6777b538SAndroid Build Coastguard Worker 
TEST(SpanWriterTest,SkipFixed)118*6777b538SAndroid Build Coastguard Worker TEST(SpanWriterTest, SkipFixed) {
119*6777b538SAndroid Build Coastguard Worker   std::array<int, 5u> kArray = {1, 2, 3, 4, 5};
120*6777b538SAndroid Build Coastguard Worker 
121*6777b538SAndroid Build Coastguard Worker   auto r = SpanWriter(base::span(kArray));
122*6777b538SAndroid Build Coastguard Worker   auto s = r.Skip<2u>();
123*6777b538SAndroid Build Coastguard Worker   static_assert(std::same_as<decltype(s), std::optional<base::span<int, 2>>>);
124*6777b538SAndroid Build Coastguard Worker   EXPECT_THAT(s, Optional(base::span(kArray).first<2u>()));
125*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(r.remaining(), 3u);
126*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(r.remaining_span(), base::span({3, 4, 5}));
127*6777b538SAndroid Build Coastguard Worker 
128*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(r.Skip<12u>());
129*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(r.remaining(), 3u);
130*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(r.remaining_span(), base::span({3, 4, 5}));
131*6777b538SAndroid Build Coastguard Worker }
132*6777b538SAndroid Build Coastguard Worker 
TEST(SpanWriterTest,WriteNativeEndian)133*6777b538SAndroid Build Coastguard Worker TEST(SpanWriterTest, WriteNativeEndian) {
134*6777b538SAndroid Build Coastguard Worker   std::array<uint8_t, 5u> kArray = {uint8_t{1}, uint8_t{2}, uint8_t{3},
135*6777b538SAndroid Build Coastguard Worker                                     uint8_t{4}, uint8_t{5}};
136*6777b538SAndroid Build Coastguard Worker 
137*6777b538SAndroid Build Coastguard Worker   {
138*6777b538SAndroid Build Coastguard Worker     auto r = SpanWriter(base::span(kArray));
139*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Skip(1u));
140*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.WriteU8NativeEndian(uint8_t{0x09}));
141*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 3u);
142*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({uint8_t{1}, uint8_t{9}, uint8_t{3},
143*6777b538SAndroid Build Coastguard Worker                                   uint8_t{4}, uint8_t{5}}));
144*6777b538SAndroid Build Coastguard Worker   }
145*6777b538SAndroid Build Coastguard Worker 
146*6777b538SAndroid Build Coastguard Worker   {
147*6777b538SAndroid Build Coastguard Worker     auto r = SpanWriter(base::span(kArray));
148*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Skip(1u));
149*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.WriteU16NativeEndian(uint16_t{0x0809}));
150*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 2u);
151*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({uint8_t{1}, uint8_t{9}, uint8_t{8},
152*6777b538SAndroid Build Coastguard Worker                                   uint8_t{4}, uint8_t{5}}));
153*6777b538SAndroid Build Coastguard Worker   }
154*6777b538SAndroid Build Coastguard Worker 
155*6777b538SAndroid Build Coastguard Worker   {
156*6777b538SAndroid Build Coastguard Worker     auto r = SpanWriter(base::span(kArray));
157*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Skip(1u));
158*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.WriteU32NativeEndian(0x06070809u));
159*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 0u);
160*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({uint8_t{1}, uint8_t{9}, uint8_t{8},
161*6777b538SAndroid Build Coastguard Worker                                   uint8_t{7}, uint8_t{6}}));
162*6777b538SAndroid Build Coastguard Worker   }
163*6777b538SAndroid Build Coastguard Worker 
164*6777b538SAndroid Build Coastguard Worker   std::array<uint8_t, 9u> kBigArray = {uint8_t{1}, uint8_t{1}, uint8_t{1},
165*6777b538SAndroid Build Coastguard Worker                                        uint8_t{1}, uint8_t{1}, uint8_t{1},
166*6777b538SAndroid Build Coastguard Worker                                        uint8_t{1}, uint8_t{1}, uint8_t{1}};
167*6777b538SAndroid Build Coastguard Worker 
168*6777b538SAndroid Build Coastguard Worker   {
169*6777b538SAndroid Build Coastguard Worker     auto r = SpanWriter(base::span(kBigArray));
170*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Skip(1u));
171*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.WriteU64NativeEndian(0x0203040506070809lu));
172*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 0u);
173*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kBigArray, base::span({uint8_t{1}, uint8_t{9}, uint8_t{8},
174*6777b538SAndroid Build Coastguard Worker                                      uint8_t{7}, uint8_t{6}, uint8_t{5},
175*6777b538SAndroid Build Coastguard Worker                                      uint8_t{4}, uint8_t{3}, uint8_t{2}}));
176*6777b538SAndroid Build Coastguard Worker   }
177*6777b538SAndroid Build Coastguard Worker }
178*6777b538SAndroid Build Coastguard Worker 
TEST(SpanWriterTest,WriteLittleEndian)179*6777b538SAndroid Build Coastguard Worker TEST(SpanWriterTest, WriteLittleEndian) {
180*6777b538SAndroid Build Coastguard Worker   std::array<uint8_t, 5u> kArray = {uint8_t{1}, uint8_t{2}, uint8_t{3},
181*6777b538SAndroid Build Coastguard Worker                                     uint8_t{4}, uint8_t{5}};
182*6777b538SAndroid Build Coastguard Worker 
183*6777b538SAndroid Build Coastguard Worker   {
184*6777b538SAndroid Build Coastguard Worker     auto r = SpanWriter(base::span(kArray));
185*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Skip(1u));
186*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.WriteU8LittleEndian(uint8_t{0x09}));
187*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 3u);
188*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({uint8_t{1}, uint8_t{9}, uint8_t{3},
189*6777b538SAndroid Build Coastguard Worker                                   uint8_t{4}, uint8_t{5}}));
190*6777b538SAndroid Build Coastguard Worker   }
191*6777b538SAndroid Build Coastguard Worker 
192*6777b538SAndroid Build Coastguard Worker   {
193*6777b538SAndroid Build Coastguard Worker     auto r = SpanWriter(base::span(kArray));
194*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Skip(1u));
195*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.WriteU16LittleEndian(uint16_t{0x0809}));
196*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 2u);
197*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({uint8_t{1}, uint8_t{9}, uint8_t{8},
198*6777b538SAndroid Build Coastguard Worker                                   uint8_t{4}, uint8_t{5}}));
199*6777b538SAndroid Build Coastguard Worker   }
200*6777b538SAndroid Build Coastguard Worker 
201*6777b538SAndroid Build Coastguard Worker   {
202*6777b538SAndroid Build Coastguard Worker     auto r = SpanWriter(base::span(kArray));
203*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Skip(1u));
204*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.WriteU32LittleEndian(0x06070809u));
205*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 0u);
206*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({uint8_t{1}, uint8_t{9}, uint8_t{8},
207*6777b538SAndroid Build Coastguard Worker                                   uint8_t{7}, uint8_t{6}}));
208*6777b538SAndroid Build Coastguard Worker   }
209*6777b538SAndroid Build Coastguard Worker 
210*6777b538SAndroid Build Coastguard Worker   std::array<uint8_t, 9u> kBigArray = {uint8_t{1}, uint8_t{1}, uint8_t{1},
211*6777b538SAndroid Build Coastguard Worker                                        uint8_t{1}, uint8_t{1}, uint8_t{1},
212*6777b538SAndroid Build Coastguard Worker                                        uint8_t{1}, uint8_t{1}, uint8_t{1}};
213*6777b538SAndroid Build Coastguard Worker 
214*6777b538SAndroid Build Coastguard Worker   {
215*6777b538SAndroid Build Coastguard Worker     auto r = SpanWriter(base::span(kBigArray));
216*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Skip(1u));
217*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.WriteU64LittleEndian(0x0203040506070809lu));
218*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 0u);
219*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kBigArray, base::span({uint8_t{1}, uint8_t{9}, uint8_t{8},
220*6777b538SAndroid Build Coastguard Worker                                      uint8_t{7}, uint8_t{6}, uint8_t{5},
221*6777b538SAndroid Build Coastguard Worker                                      uint8_t{4}, uint8_t{3}, uint8_t{2}}));
222*6777b538SAndroid Build Coastguard Worker   }
223*6777b538SAndroid Build Coastguard Worker }
224*6777b538SAndroid Build Coastguard Worker 
TEST(SpanWriterTest,WriteBigEndian)225*6777b538SAndroid Build Coastguard Worker TEST(SpanWriterTest, WriteBigEndian) {
226*6777b538SAndroid Build Coastguard Worker   std::array<uint8_t, 5u> kArray = {uint8_t{1}, uint8_t{2}, uint8_t{3},
227*6777b538SAndroid Build Coastguard Worker                                     uint8_t{4}, uint8_t{5}};
228*6777b538SAndroid Build Coastguard Worker 
229*6777b538SAndroid Build Coastguard Worker   {
230*6777b538SAndroid Build Coastguard Worker     auto r = SpanWriter(base::span(kArray));
231*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Skip(1u));
232*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.WriteU8BigEndian(uint8_t{0x09}));
233*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 3u);
234*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({uint8_t{1}, uint8_t{9}, uint8_t{3},
235*6777b538SAndroid Build Coastguard Worker                                   uint8_t{4}, uint8_t{5}}));
236*6777b538SAndroid Build Coastguard Worker   }
237*6777b538SAndroid Build Coastguard Worker 
238*6777b538SAndroid Build Coastguard Worker   {
239*6777b538SAndroid Build Coastguard Worker     auto r = SpanWriter(base::span(kArray));
240*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Skip(1u));
241*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.WriteU16BigEndian(uint16_t{0x0809}));
242*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 2u);
243*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({uint8_t{1}, uint8_t{8}, uint8_t{9},
244*6777b538SAndroid Build Coastguard Worker                                   uint8_t{4}, uint8_t{5}}));
245*6777b538SAndroid Build Coastguard Worker   }
246*6777b538SAndroid Build Coastguard Worker 
247*6777b538SAndroid Build Coastguard Worker   {
248*6777b538SAndroid Build Coastguard Worker     auto r = SpanWriter(base::span(kArray));
249*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Skip(1u));
250*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.WriteU32BigEndian(0x06070809u));
251*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 0u);
252*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kArray, base::span({uint8_t{1}, uint8_t{6}, uint8_t{7},
253*6777b538SAndroid Build Coastguard Worker                                   uint8_t{8}, uint8_t{9}}));
254*6777b538SAndroid Build Coastguard Worker   }
255*6777b538SAndroid Build Coastguard Worker 
256*6777b538SAndroid Build Coastguard Worker   std::array<uint8_t, 9u> kBigArray = {uint8_t{1}, uint8_t{1}, uint8_t{1},
257*6777b538SAndroid Build Coastguard Worker                                        uint8_t{1}, uint8_t{1}, uint8_t{1},
258*6777b538SAndroid Build Coastguard Worker                                        uint8_t{1}, uint8_t{1}, uint8_t{1}};
259*6777b538SAndroid Build Coastguard Worker 
260*6777b538SAndroid Build Coastguard Worker   {
261*6777b538SAndroid Build Coastguard Worker     auto r = SpanWriter(base::span(kBigArray));
262*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.Skip(1u));
263*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(r.WriteU64BigEndian(0x0203040506070809lu));
264*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(r.remaining(), 0u);
265*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(kBigArray, base::span({uint8_t{1}, uint8_t{2}, uint8_t{3},
266*6777b538SAndroid Build Coastguard Worker                                      uint8_t{4}, uint8_t{5}, uint8_t{6},
267*6777b538SAndroid Build Coastguard Worker                                      uint8_t{7}, uint8_t{8}, uint8_t{9}}));
268*6777b538SAndroid Build Coastguard Worker   }
269*6777b538SAndroid Build Coastguard Worker }
270*6777b538SAndroid Build Coastguard Worker 
TEST(SpanWriterTest,Chars)271*6777b538SAndroid Build Coastguard Worker TEST(SpanWriterTest, Chars) {
272*6777b538SAndroid Build Coastguard Worker   std::array<char, 5u> kArray = {'a', 'b', 'c', 'd', 'e'};
273*6777b538SAndroid Build Coastguard Worker 
274*6777b538SAndroid Build Coastguard Worker   auto r = SpanWriter(base::span(kArray));
275*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(r.Skip(1u));
276*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(r.Write(base::span({'f', 'g'})));
277*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(r.remaining(), 2u);
278*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(kArray, base::span({'a', 'f', 'g', 'd', 'e'}));
279*6777b538SAndroid Build Coastguard Worker }
280*6777b538SAndroid Build Coastguard Worker 
281*6777b538SAndroid Build Coastguard Worker }  // namespace
282*6777b538SAndroid Build Coastguard Worker }  // namespace base
283