OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 using std::swap; | 170 using std::swap; |
171 swap(buf1, buf2); | 171 swap(buf1, buf2); |
172 EXPECT_EQ(buf1.size(), 6u); | 172 EXPECT_EQ(buf1.size(), 6u); |
173 EXPECT_EQ(buf1.capacity(), 40u); | 173 EXPECT_EQ(buf1.capacity(), 40u); |
174 EXPECT_EQ(buf1.data(), data2); | 174 EXPECT_EQ(buf1.data(), data2); |
175 EXPECT_EQ(buf2.size(), 3u); | 175 EXPECT_EQ(buf2.size(), 3u); |
176 EXPECT_EQ(buf2.capacity(), 3u); | 176 EXPECT_EQ(buf2.capacity(), 3u); |
177 EXPECT_EQ(buf2.data(), data1); | 177 EXPECT_EQ(buf2.data(), data1); |
178 } | 178 } |
179 | 179 |
| 180 void EnsureBuffersEqual(const Buffer& buf1, const Buffer& buf2) { |
| 181 // Data is shared between buffers. |
| 182 EXPECT_EQ(buf1.size(), buf2.size()); |
| 183 EXPECT_EQ(buf1.capacity(), buf2.capacity()); |
| 184 const uint8_t* data1 = buf1.data(); |
| 185 const uint8_t* data2 = buf2.data(); |
| 186 EXPECT_EQ(data1, data2); |
| 187 EXPECT_EQ(buf1, buf2); |
| 188 } |
| 189 |
| 190 // Move comparison to own function to have const buffers and prevent cloning |
| 191 // from calling non-const "data()". |
| 192 void EnsureBufferDataNotEqual(const Buffer& buf1, const Buffer& buf2) { |
| 193 // Data is not shared between buffers. |
| 194 const uint8_t* data1 = buf1.data(); |
| 195 const uint8_t* data2 = buf2.data(); |
| 196 EXPECT_NE(data1, data2); |
| 197 } |
| 198 |
| 199 TEST(BufferTest, TestSharedAppendData) { |
| 200 Buffer buf1(kTestData, 3, 10); |
| 201 Buffer buf2(buf1); |
| 202 |
| 203 EnsureBuffersEqual(buf1, buf2); |
| 204 |
| 205 // AppendData copies the underlying buffer. |
| 206 buf2.AppendData("foo"); |
| 207 EXPECT_EQ(buf2.size(), buf1.size() + 4); // "foo" + trailing 0x00 |
| 208 EXPECT_EQ(buf2.capacity(), buf1.capacity()); |
| 209 EXPECT_NE(buf2.data(), buf1.data()); |
| 210 |
| 211 EXPECT_EQ(buf1, Buffer(kTestData, 3)); |
| 212 const int8_t exp[] = {0x0, 0x1, 0x2, 'f', 'o', 'o', 0x0}; |
| 213 EXPECT_EQ(buf2, Buffer(exp)); |
| 214 } |
| 215 |
| 216 TEST(BufferTest, TestSharedSetData) { |
| 217 Buffer buf1(kTestData, 3, 10); |
| 218 Buffer buf2; |
| 219 |
| 220 buf2.SetData(buf1); |
| 221 // buf2 shares the same data as buf1 now. |
| 222 EnsureBuffersEqual(buf1, buf2); |
| 223 |
| 224 Buffer buf3(buf1); |
| 225 // buf3 is re-allocated with new data, existing buffers are not modified. |
| 226 buf3.SetData("foo"); |
| 227 EXPECT_EQ(buf1, Buffer(kTestData, 3)); |
| 228 EnsureBuffersEqual(buf1, buf2); |
| 229 EnsureBufferDataNotEqual(buf1, buf3); |
| 230 const int8_t exp[] = {'f', 'o', 'o', 0x0}; |
| 231 EXPECT_EQ(buf3, Buffer(exp)); |
| 232 } |
| 233 |
| 234 TEST(BufferTest, TestSharedEnsureCapacity) { |
| 235 Buffer buf1(kTestData, 3, 10); |
| 236 Buffer buf2(buf1); |
| 237 |
| 238 // Smaller than existing capacity -> no change and still same contents. |
| 239 buf2.EnsureCapacity(8); |
| 240 EnsureBuffersEqual(buf1, buf2); |
| 241 EXPECT_EQ(buf1.size(), 3u); |
| 242 EXPECT_EQ(buf1.capacity(), 10u); |
| 243 EXPECT_EQ(buf2.size(), 3u); |
| 244 EXPECT_EQ(buf2.capacity(), 10u); |
| 245 |
| 246 // Lager than existing capacity -> data is cloned. |
| 247 buf2.EnsureCapacity(16); |
| 248 EnsureBufferDataNotEqual(buf1, buf2); |
| 249 EXPECT_EQ(buf1.size(), 3u); |
| 250 EXPECT_EQ(buf1.capacity(), 10u); |
| 251 EXPECT_EQ(buf2.size(), 3u); |
| 252 EXPECT_EQ(buf2.capacity(), 16u); |
| 253 // The size and contents are still the same. |
| 254 EXPECT_EQ(buf1, buf2); |
| 255 } |
| 256 |
| 257 TEST(BufferTest, TestSharedSetSize) { |
| 258 Buffer buf1(kTestData, 3, 10); |
| 259 Buffer buf2(buf1); |
| 260 |
| 261 buf2.SetSize(16); |
| 262 EnsureBufferDataNotEqual(buf1, buf2); |
| 263 EXPECT_EQ(buf1.size(), 3u); |
| 264 EXPECT_EQ(buf1.capacity(), 10u); |
| 265 EXPECT_EQ(buf2.size(), 16u); |
| 266 EXPECT_EQ(buf2.capacity(), 16u); |
| 267 // The contents got cloned. |
| 268 EXPECT_EQ(0, memcmp(buf2.data(), kTestData, 3)); |
| 269 } |
| 270 |
| 271 TEST(BufferTest, TestSharedClear) { |
| 272 Buffer buf1(kTestData, 3, 10); |
| 273 Buffer buf2(buf1); |
| 274 |
| 275 buf2.Clear(); |
| 276 EnsureBufferDataNotEqual(buf1, buf2); |
| 277 EXPECT_EQ(buf1.size(), 3u); |
| 278 EXPECT_EQ(buf1.capacity(), 10u); |
| 279 EXPECT_EQ(0, memcmp(buf1.data(), kTestData, 3)); |
| 280 EXPECT_EQ(buf2.size(), 0u); |
| 281 EXPECT_EQ(buf2.capacity(), 0u); |
| 282 } |
| 283 |
180 } // namespace rtc | 284 } // namespace rtc |
OLD | NEW |