OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/logging.h" | 5 #include "base/logging.h" |
6 #include "base/scoped_ptr.h" | 6 #include "base/scoped_ptr.h" |
7 #include "base/time.h" | 7 #include "base/time.h" |
8 #include "media/base/seekable_buffer.h" | 8 #include "media/base/seekable_buffer.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
11 namespace { | 11 namespace { |
12 | 12 |
13 class SeekableBufferTest : public testing::Test { | 13 class SeekableBufferTest : public testing::Test { |
| 14 public: |
| 15 SeekableBufferTest() : buffer_(kBufferSize, kBufferSize) { |
| 16 } |
| 17 |
14 protected: | 18 protected: |
| 19 static const size_t kDataSize = 409600; |
| 20 static const size_t kBufferSize = 4096; |
| 21 static const size_t kWriteSize = 512; |
| 22 |
15 virtual void SetUp() { | 23 virtual void SetUp() { |
16 // Setup seed. | 24 // Setup seed. |
17 size_t seed = static_cast<int32>(base::Time::Now().ToInternalValue()); | 25 size_t seed = static_cast<int32>(base::Time::Now().ToInternalValue()); |
18 srand(seed); | 26 srand(seed); |
19 LOG(INFO) << "Random seed: " << seed; | 27 LOG(INFO) << "Random seed: " << seed; |
20 | 28 |
21 // Creates a test data. | 29 // Creates a test data. |
22 data_.reset(new uint8[kDataSize]); | |
23 for (size_t i = 0; i < kDataSize; i++) | 30 for (size_t i = 0; i < kDataSize; i++) |
24 data_.get()[i] = static_cast<char>(rand()); | 31 data_[i] = static_cast<char>(rand()); |
25 | |
26 // Creates a temp buffer. | |
27 write_buffer_.reset(new uint8[kDataSize]); | |
28 | |
29 // Setup |buffer_|. | |
30 buffer_.reset(new media::SeekableBuffer(kBufferSize, kBufferSize)); | |
31 } | 32 } |
32 | 33 |
33 size_t GetRandomInt(size_t maximum) { | 34 size_t GetRandomInt(size_t maximum) { |
34 return rand() % maximum + 1; | 35 return rand() % maximum + 1; |
35 } | 36 } |
36 | 37 |
37 static const size_t kDataSize = 409600; | 38 media::SeekableBuffer buffer_; |
38 static const size_t kBufferSize = 4096; | 39 uint8 data_[kDataSize]; |
39 scoped_ptr<media::SeekableBuffer> buffer_; | 40 uint8 write_buffer_[kDataSize]; |
40 scoped_array<uint8> data_; | |
41 scoped_array<uint8> write_buffer_; | |
42 }; | 41 }; |
43 | 42 |
44 TEST_F(SeekableBufferTest, RandomReadWrite) { | 43 TEST_F(SeekableBufferTest, RandomReadWrite) { |
45 size_t write_position = 0; | 44 size_t write_position = 0; |
46 size_t read_position = 0; | 45 size_t read_position = 0; |
47 while (read_position < kDataSize) { | 46 while (read_position < kDataSize) { |
48 // Write a random amount of data. | 47 // Write a random amount of data. |
49 size_t write_size = GetRandomInt(kBufferSize); | 48 size_t write_size = GetRandomInt(kBufferSize); |
50 write_size = std::min(write_size, kDataSize - write_position); | 49 write_size = std::min(write_size, kDataSize - write_position); |
51 bool should_append = | 50 bool should_append = buffer_.Append(write_size, data_ + write_position); |
52 buffer_->Append(write_size, data_.get() + write_position); | |
53 write_position += write_size; | 51 write_position += write_size; |
54 EXPECT_GE(write_position, read_position); | 52 EXPECT_GE(write_position, read_position); |
55 EXPECT_EQ(write_position - read_position, buffer_->forward_bytes()); | 53 EXPECT_EQ(write_position - read_position, buffer_.forward_bytes()); |
56 EXPECT_EQ(should_append, buffer_->forward_bytes() < kBufferSize) | 54 EXPECT_EQ(should_append, buffer_.forward_bytes() < kBufferSize) |
57 << "Incorrect buffer full reported"; | 55 << "Incorrect buffer full reported"; |
58 | 56 |
59 // Read a random amount of data. | 57 // Read a random amount of data. |
60 size_t read_size = GetRandomInt(kBufferSize); | 58 size_t read_size = GetRandomInt(kBufferSize); |
61 size_t bytes_read = buffer_->Read(read_size, write_buffer_.get()); | 59 size_t bytes_read = buffer_.Read(read_size, write_buffer_); |
62 EXPECT_GE(read_size, bytes_read); | 60 EXPECT_GE(read_size, bytes_read); |
63 EXPECT_EQ(0, memcmp(write_buffer_.get(), | 61 EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, bytes_read)); |
64 data_.get() + read_position, | |
65 bytes_read)); | |
66 read_position += bytes_read; | 62 read_position += bytes_read; |
67 EXPECT_GE(write_position, read_position); | 63 EXPECT_GE(write_position, read_position); |
68 EXPECT_EQ(write_position - read_position, buffer_->forward_bytes()); | 64 EXPECT_EQ(write_position - read_position, buffer_.forward_bytes()); |
69 } | 65 } |
70 } | 66 } |
71 | 67 |
72 TEST_F(SeekableBufferTest, ReadWriteSeek) { | 68 TEST_F(SeekableBufferTest, ReadWriteSeek) { |
73 const size_t kWriteSize = 512; | |
74 const size_t kReadSize = kWriteSize / 4; | 69 const size_t kReadSize = kWriteSize / 4; |
75 | 70 |
76 size_t write_position = 0; | |
77 size_t read_position = 0; | |
78 size_t forward_bytes = 0; | |
79 for (int i = 0; i < 10; ++i) { | 71 for (int i = 0; i < 10; ++i) { |
80 // Write until buffer is full. | 72 // Write until buffer is full. |
81 for (int j = kBufferSize / kWriteSize; j > 0; --j) { | 73 for (size_t j = 0; j < kBufferSize; j += kWriteSize) { |
82 bool should_append = | 74 bool should_append = buffer_.Append(kWriteSize, data_ + j); |
83 buffer_->Append(kWriteSize, data_.get() + write_position); | 75 EXPECT_EQ(j < kBufferSize - kWriteSize, should_append) |
84 EXPECT_EQ(j > 1, should_append) << "Incorrect buffer full reported"; | 76 << "Incorrect buffer full reported"; |
85 write_position += kWriteSize; | 77 EXPECT_EQ(j + kWriteSize, buffer_.forward_bytes()); |
86 forward_bytes += kWriteSize; | |
87 EXPECT_EQ(forward_bytes, buffer_->forward_bytes()); | |
88 } | 78 } |
89 | 79 |
90 // Simulate a read and seek pattern. Each loop reads 4 times, each time | 80 // Simulate a read and seek pattern. Each loop reads 4 times, each time |
91 // reading a quarter of |kWriteSize|. | 81 // reading a quarter of |kWriteSize|. |
92 for (size_t j = 0; j < kBufferSize / kWriteSize; ++j) { | 82 size_t read_position = 0; |
| 83 size_t forward_bytes = kBufferSize; |
| 84 for (size_t j = 0; j < kBufferSize; j += kWriteSize) { |
93 // Read. | 85 // Read. |
94 EXPECT_EQ(kReadSize, buffer_->Read(kReadSize, write_buffer_.get())); | 86 EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_)); |
95 forward_bytes -= kReadSize; | 87 forward_bytes -= kReadSize; |
96 EXPECT_EQ(forward_bytes, buffer_->forward_bytes()); | 88 EXPECT_EQ(forward_bytes, buffer_.forward_bytes()); |
97 EXPECT_EQ(0, memcmp(write_buffer_.get(), | 89 EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize)); |
98 data_.get() + read_position, | |
99 kReadSize)); | |
100 read_position += kReadSize; | 90 read_position += kReadSize; |
101 | 91 |
102 // Seek forward. | 92 // Seek forward. |
103 EXPECT_TRUE(buffer_->Seek(2 * kReadSize)); | 93 EXPECT_TRUE(buffer_.Seek(2 * kReadSize)); |
104 forward_bytes -= 2 * kReadSize; | 94 forward_bytes -= 2 * kReadSize; |
105 read_position += 2 * kReadSize; | 95 read_position += 2 * kReadSize; |
106 EXPECT_EQ(forward_bytes, buffer_->forward_bytes()); | 96 EXPECT_EQ(forward_bytes, buffer_.forward_bytes()); |
107 | 97 |
108 // Read. | 98 // Read. |
109 EXPECT_EQ(kReadSize, buffer_->Read(kReadSize, write_buffer_.get())); | 99 EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_)); |
110 forward_bytes -= kReadSize; | 100 forward_bytes -= kReadSize; |
111 EXPECT_EQ(forward_bytes, buffer_->forward_bytes()); | 101 EXPECT_EQ(forward_bytes, buffer_.forward_bytes()); |
112 EXPECT_EQ(0, memcmp(write_buffer_.get(), | 102 EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize)); |
113 data_.get() + read_position, | |
114 kReadSize)); | |
115 read_position += kReadSize; | 103 read_position += kReadSize; |
116 | 104 |
117 // Seek backward. | 105 // Seek backward. |
118 EXPECT_TRUE(buffer_->Seek(-3 * static_cast<int32>(kReadSize))); | 106 EXPECT_TRUE(buffer_.Seek(-3 * static_cast<int32>(kReadSize))); |
119 forward_bytes += 3 * kReadSize; | 107 forward_bytes += 3 * kReadSize; |
120 read_position -= 3 * kReadSize; | 108 read_position -= 3 * kReadSize; |
121 EXPECT_EQ(forward_bytes, buffer_->forward_bytes()); | 109 EXPECT_EQ(forward_bytes, buffer_.forward_bytes()); |
122 | 110 |
123 // Read. | 111 // Read. |
124 EXPECT_EQ(kReadSize, buffer_->Read(kReadSize, write_buffer_.get())); | 112 EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_)); |
125 forward_bytes -= kReadSize; | 113 forward_bytes -= kReadSize; |
126 EXPECT_EQ(forward_bytes, buffer_->forward_bytes()); | 114 EXPECT_EQ(forward_bytes, buffer_.forward_bytes()); |
127 EXPECT_EQ(0, memcmp(write_buffer_.get(), | 115 EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize)); |
128 data_.get() + read_position, | |
129 kReadSize)); | |
130 read_position += kReadSize; | 116 read_position += kReadSize; |
131 | 117 |
132 // Read. | 118 // Read. |
133 EXPECT_EQ(kReadSize, buffer_->Read(kReadSize, write_buffer_.get())); | 119 EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_)); |
134 forward_bytes -= kReadSize; | 120 forward_bytes -= kReadSize; |
135 EXPECT_EQ(forward_bytes, buffer_->forward_bytes()); | 121 EXPECT_EQ(forward_bytes, buffer_.forward_bytes()); |
136 EXPECT_EQ(0, memcmp(write_buffer_.get(), | 122 EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize)); |
137 data_.get() + read_position, | |
138 kReadSize)); | |
139 read_position += kReadSize; | 123 read_position += kReadSize; |
140 | 124 |
141 // Seek forward. | 125 // Seek forward. |
142 EXPECT_TRUE(buffer_->Seek(kReadSize)); | 126 EXPECT_TRUE(buffer_.Seek(kReadSize)); |
143 forward_bytes -= kReadSize; | 127 forward_bytes -= kReadSize; |
144 read_position += kReadSize; | 128 read_position += kReadSize; |
145 EXPECT_EQ(forward_bytes, buffer_->forward_bytes()); | 129 EXPECT_EQ(forward_bytes, buffer_.forward_bytes()); |
146 } | 130 } |
147 } | 131 } |
148 } | 132 } |
149 | 133 |
150 TEST_F(SeekableBufferTest, BufferFull) { | 134 TEST_F(SeekableBufferTest, BufferFull) { |
151 const size_t kWriteSize = 512; | 135 const size_t kMaxWriteSize = 2 * kBufferSize; |
152 | 136 |
153 // Write and expect the buffer to be not full. | 137 // Write and expect the buffer to be not full. |
154 size_t write_position = 0; | 138 for (size_t i = 0; i < kBufferSize - kWriteSize; i += kWriteSize) { |
155 for (size_t i = 0; i < kBufferSize / kWriteSize - 1; ++i) { | 139 EXPECT_TRUE(buffer_.Append(kWriteSize, data_ + i)); |
156 EXPECT_TRUE(buffer_->Append(kWriteSize, data_.get() + write_position)); | 140 EXPECT_EQ(i + kWriteSize, buffer_.forward_bytes()); |
157 write_position += kWriteSize; | |
158 EXPECT_EQ(write_position, buffer_->forward_bytes()); | |
159 } | 141 } |
160 | 142 |
161 // Write 10 more times, the buffer is full. | 143 // Write until we have kMaxWriteSize bytes in the buffer. Buffer is full in |
162 for (int i = 0; i < 10; ++i) { | 144 // these writes. |
163 EXPECT_FALSE(buffer_->Append(kWriteSize, data_.get() + write_position)); | 145 for (size_t i = buffer_.forward_bytes(); i < kMaxWriteSize; i += kWriteSize) { |
164 write_position += kWriteSize; | 146 EXPECT_FALSE(buffer_.Append(kWriteSize, data_ + i)); |
165 EXPECT_EQ(write_position, buffer_->forward_bytes()); | 147 EXPECT_EQ(i + kWriteSize, buffer_.forward_bytes()); |
166 } | 148 } |
167 | 149 |
168 // Read until the buffer is empty. | 150 // Read until the buffer is empty. |
169 size_t read_position = 0; | 151 size_t read_position = 0; |
170 while (buffer_->forward_bytes()) { | 152 while (buffer_.forward_bytes()) { |
171 // Read a random amount of data. | 153 // Read a random amount of data. |
172 size_t read_size = GetRandomInt(kBufferSize); | 154 size_t read_size = GetRandomInt(kBufferSize); |
173 size_t forward_bytes = buffer_->forward_bytes(); | 155 size_t forward_bytes = buffer_.forward_bytes(); |
174 size_t bytes_read = buffer_->Read(read_size, write_buffer_.get()); | 156 size_t bytes_read = buffer_.Read(read_size, write_buffer_); |
175 EXPECT_EQ(0, memcmp(write_buffer_.get(), | 157 EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, bytes_read)); |
176 data_.get() + read_position, | |
177 bytes_read)); | |
178 if (read_size > forward_bytes) | 158 if (read_size > forward_bytes) |
179 EXPECT_EQ(forward_bytes, bytes_read); | 159 EXPECT_EQ(forward_bytes, bytes_read); |
180 else | 160 else |
181 EXPECT_EQ(read_size, bytes_read); | 161 EXPECT_EQ(read_size, bytes_read); |
182 read_position += bytes_read; | 162 read_position += bytes_read; |
183 EXPECT_GE(write_position, read_position); | 163 EXPECT_GE(kMaxWriteSize, read_position); |
184 EXPECT_EQ(write_position - read_position, buffer_->forward_bytes()); | 164 EXPECT_EQ(kMaxWriteSize - read_position, buffer_.forward_bytes()); |
185 } | 165 } |
186 | 166 |
187 // Expect we have no bytes left. | 167 // Expects we have no bytes left. |
188 EXPECT_EQ(0u, buffer_->forward_bytes()); | 168 EXPECT_EQ(0u, buffer_.forward_bytes()); |
189 EXPECT_EQ(0u, buffer_->Read(1, write_buffer_.get())); | 169 EXPECT_EQ(0u, buffer_.Read(1, write_buffer_)); |
190 } | 170 } |
191 | 171 |
192 TEST_F(SeekableBufferTest, SeekBackward) { | 172 TEST_F(SeekableBufferTest, SeekBackward) { |
193 EXPECT_EQ(0u, buffer_->forward_bytes()); | 173 EXPECT_EQ(0u, buffer_.forward_bytes()); |
194 EXPECT_EQ(0u, buffer_->backward_bytes()); | 174 EXPECT_EQ(0u, buffer_.backward_bytes()); |
195 EXPECT_FALSE(buffer_->Seek(1)); | 175 EXPECT_FALSE(buffer_.Seek(1)); |
196 EXPECT_FALSE(buffer_->Seek(-1)); | 176 EXPECT_FALSE(buffer_.Seek(-1)); |
197 | 177 |
198 const size_t kWriteSize = 512; | |
199 const size_t kReadSize = 256; | 178 const size_t kReadSize = 256; |
200 | 179 |
201 // Write into buffer until it's full. | 180 // Write into buffer until it's full. |
202 size_t write_position = 0; | 181 for (size_t i = 0; i < kBufferSize; i += kWriteSize) { |
203 for (size_t i = 0; i < kBufferSize / kWriteSize; ++i) { | |
204 // Write a random amount of data. | 182 // Write a random amount of data. |
205 buffer_->Append(kWriteSize, data_.get() + write_position); | 183 buffer_.Append(kWriteSize, data_ + i); |
206 write_position += kWriteSize; | |
207 } | 184 } |
208 | 185 |
209 // Read until buffer is empty. | 186 // Read until buffer is empty. |
210 size_t read_position = 0; | 187 for (size_t i = 0; i < kBufferSize; i += kReadSize) { |
211 for (size_t i = 0; i < kBufferSize / kReadSize; ++i) { | 188 EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_)); |
212 EXPECT_EQ(kReadSize, buffer_->Read(kReadSize, write_buffer_.get())); | 189 EXPECT_EQ(0, memcmp(write_buffer_, data_ + i, kReadSize)); |
213 EXPECT_EQ(0, memcmp(write_buffer_.get(), | |
214 data_.get() + read_position, | |
215 kReadSize)); | |
216 read_position += kReadSize; | |
217 } | 190 } |
218 | 191 |
219 // Seek backward. | 192 // Seek backward. |
220 EXPECT_TRUE(buffer_->Seek(-static_cast<int32>(kBufferSize))); | 193 EXPECT_TRUE(buffer_.Seek(-static_cast<int32>(kBufferSize))); |
221 EXPECT_FALSE(buffer_->Seek(-1)); | 194 EXPECT_FALSE(buffer_.Seek(-1)); |
222 | 195 |
223 // Read again. | 196 // Read again. |
224 read_position = 0; | 197 for (size_t i = 0; i < kBufferSize; i += kReadSize) { |
225 for (size_t i = 0; i < kBufferSize / kReadSize; ++i) { | 198 EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_)); |
226 EXPECT_EQ(kReadSize, buffer_->Read(kReadSize, write_buffer_.get())); | 199 EXPECT_EQ(0, memcmp(write_buffer_, data_ + i, kReadSize)); |
227 EXPECT_EQ(0, memcmp(write_buffer_.get(), | |
228 data_.get() + read_position, | |
229 kReadSize)); | |
230 read_position += kReadSize; | |
231 } | 200 } |
232 } | 201 } |
233 | 202 |
234 TEST_F(SeekableBufferTest, SeekForward) { | 203 TEST_F(SeekableBufferTest, SeekForward) { |
235 size_t write_position = 0; | 204 size_t write_position = 0; |
236 size_t read_position = 0; | 205 size_t read_position = 0; |
237 while (read_position < kDataSize) { | 206 while (read_position < kDataSize) { |
238 for (int i = 0; i < 10; ++i) { | 207 for (int i = 0; i < 10 && write_position < kDataSize; ++i) { |
239 // Write a random amount of data. | 208 // Write a random amount of data. |
240 size_t write_size = GetRandomInt(kBufferSize); | 209 size_t write_size = GetRandomInt(kBufferSize); |
241 write_size = std::min(write_size, kDataSize - write_position); | 210 write_size = std::min(write_size, kDataSize - write_position); |
242 if (!write_size) | 211 |
243 break; | 212 bool should_append = buffer_.Append(write_size, data_ + write_position); |
244 bool should_append = | |
245 buffer_->Append(write_size, data_.get() + write_position); | |
246 write_position += write_size; | 213 write_position += write_size; |
247 EXPECT_GE(write_position, read_position); | 214 EXPECT_GE(write_position, read_position); |
248 EXPECT_EQ(write_position - read_position, buffer_->forward_bytes()); | 215 EXPECT_EQ(write_position - read_position, buffer_.forward_bytes()); |
249 EXPECT_EQ(should_append, buffer_->forward_bytes() < kBufferSize) | 216 EXPECT_EQ(should_append, buffer_.forward_bytes() < kBufferSize) |
250 << "Incorrect buffer full status reported"; | 217 << "Incorrect buffer full status reported"; |
251 } | 218 } |
252 | 219 |
253 // Read a random amount of data. | 220 // Read a random amount of data. |
254 size_t seek_size = GetRandomInt(kBufferSize); | 221 size_t seek_size = GetRandomInt(kBufferSize); |
255 if (buffer_->Seek(seek_size)) | 222 if (buffer_.Seek(seek_size)) |
256 read_position += seek_size; | 223 read_position += seek_size; |
257 EXPECT_GE(write_position, read_position); | 224 EXPECT_GE(write_position, read_position); |
258 EXPECT_EQ(write_position - read_position, buffer_->forward_bytes()); | 225 EXPECT_EQ(write_position - read_position, buffer_.forward_bytes()); |
259 | 226 |
260 // Read a random amount of data. | 227 // Read a random amount of data. |
261 size_t read_size = GetRandomInt(kBufferSize); | 228 size_t read_size = GetRandomInt(kBufferSize); |
262 size_t bytes_read = buffer_->Read(read_size, write_buffer_.get()); | 229 size_t bytes_read = buffer_.Read(read_size, write_buffer_); |
263 EXPECT_GE(read_size, bytes_read); | 230 EXPECT_GE(read_size, bytes_read); |
264 EXPECT_EQ(0, memcmp(write_buffer_.get(), | 231 EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, bytes_read)); |
265 data_.get() + read_position, | |
266 bytes_read)); | |
267 read_position += bytes_read; | 232 read_position += bytes_read; |
268 EXPECT_GE(write_position, read_position); | 233 EXPECT_GE(write_position, read_position); |
269 EXPECT_EQ(write_position - read_position, buffer_->forward_bytes()); | 234 EXPECT_EQ(write_position - read_position, buffer_.forward_bytes()); |
270 } | 235 } |
271 } | 236 } |
272 | 237 |
273 TEST_F(SeekableBufferTest, AllMethods) { | 238 TEST_F(SeekableBufferTest, AllMethods) { |
274 EXPECT_EQ(0u, buffer_->Read(0, write_buffer_.get())); | 239 EXPECT_EQ(0u, buffer_.Read(0, write_buffer_)); |
275 EXPECT_EQ(0u, buffer_->Read(1, write_buffer_.get())); | 240 EXPECT_EQ(0u, buffer_.Read(1, write_buffer_)); |
276 EXPECT_TRUE(buffer_->Seek(0)); | 241 EXPECT_TRUE(buffer_.Seek(0)); |
277 EXPECT_FALSE(buffer_->Seek(-1)); | 242 EXPECT_FALSE(buffer_.Seek(-1)); |
278 EXPECT_FALSE(buffer_->Seek(1)); | 243 EXPECT_FALSE(buffer_.Seek(1)); |
279 EXPECT_EQ(0u, buffer_->forward_bytes()); | 244 EXPECT_EQ(0u, buffer_.forward_bytes()); |
280 EXPECT_EQ(0u, buffer_->backward_bytes()); | 245 EXPECT_EQ(0u, buffer_.backward_bytes()); |
281 } | 246 } |
282 | 247 |
283 } | 248 } // namespace |
OLD | NEW |