1/* 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11#include "webrtc/base/buffer.h" 12#include "webrtc/base/gunit.h" 13 14namespace rtc { 15 16static const char kTestData[] = { 17 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF 18}; 19 20TEST(BufferTest, TestConstructDefault) { 21 Buffer buf; 22 EXPECT_EQ(0U, buf.length()); 23 EXPECT_EQ(0U, buf.capacity()); 24 EXPECT_EQ(Buffer(), buf); 25} 26 27TEST(BufferTest, TestConstructEmptyWithCapacity) { 28 Buffer buf(NULL, 0, 256U); 29 EXPECT_EQ(0U, buf.length()); 30 EXPECT_EQ(256U, buf.capacity()); 31 EXPECT_EQ(Buffer(), buf); 32} 33 34TEST(BufferTest, TestConstructData) { 35 Buffer buf(kTestData, sizeof(kTestData)); 36 EXPECT_EQ(sizeof(kTestData), buf.length()); 37 EXPECT_EQ(sizeof(kTestData), buf.capacity()); 38 EXPECT_EQ(0, memcmp(buf.data(), kTestData, sizeof(kTestData))); 39 EXPECT_EQ(Buffer(kTestData, sizeof(kTestData)), buf); 40} 41 42TEST(BufferTest, TestConstructDataWithCapacity) { 43 Buffer buf(kTestData, sizeof(kTestData), 256U); 44 EXPECT_EQ(sizeof(kTestData), buf.length()); 45 EXPECT_EQ(256U, buf.capacity()); 46 EXPECT_EQ(0, memcmp(buf.data(), kTestData, sizeof(kTestData))); 47 EXPECT_EQ(Buffer(kTestData, sizeof(kTestData)), buf); 48} 49 50TEST(BufferTest, TestConstructCopy) { 51 Buffer buf1(kTestData, sizeof(kTestData), 256), buf2(buf1); 52 EXPECT_EQ(sizeof(kTestData), buf2.length()); 53 EXPECT_EQ(sizeof(kTestData), buf2.capacity()); // capacity isn't copied 54 EXPECT_EQ(0, memcmp(buf2.data(), kTestData, sizeof(kTestData))); 55 EXPECT_EQ(buf1, buf2); 56} 57 58TEST(BufferTest, TestAssign) { 59 Buffer buf1, buf2(kTestData, sizeof(kTestData), 256); 60 EXPECT_NE(buf1, buf2); 61 buf1 = buf2; 62 EXPECT_EQ(sizeof(kTestData), buf1.length()); 63 EXPECT_EQ(sizeof(kTestData), buf1.capacity()); // capacity isn't copied 64 EXPECT_EQ(0, memcmp(buf1.data(), kTestData, sizeof(kTestData))); 65 EXPECT_EQ(buf1, buf2); 66} 67 68TEST(BufferTest, TestSetData) { 69 Buffer buf; 70 buf.SetData(kTestData, sizeof(kTestData)); 71 EXPECT_EQ(sizeof(kTestData), buf.length()); 72 EXPECT_EQ(sizeof(kTestData), buf.capacity()); 73 EXPECT_EQ(0, memcmp(buf.data(), kTestData, sizeof(kTestData))); 74} 75 76TEST(BufferTest, TestAppendData) { 77 Buffer buf(kTestData, sizeof(kTestData)); 78 buf.AppendData(kTestData, sizeof(kTestData)); 79 EXPECT_EQ(2 * sizeof(kTestData), buf.length()); 80 EXPECT_EQ(2 * sizeof(kTestData), buf.capacity()); 81 EXPECT_EQ(0, memcmp(buf.data(), kTestData, sizeof(kTestData))); 82 EXPECT_EQ(0, memcmp(buf.data() + sizeof(kTestData), 83 kTestData, sizeof(kTestData))); 84} 85 86TEST(BufferTest, TestSetLengthSmaller) { 87 Buffer buf; 88 buf.SetData(kTestData, sizeof(kTestData)); 89 buf.SetLength(sizeof(kTestData) / 2); 90 EXPECT_EQ(sizeof(kTestData) / 2, buf.length()); 91 EXPECT_EQ(sizeof(kTestData), buf.capacity()); 92 EXPECT_EQ(0, memcmp(buf.data(), kTestData, sizeof(kTestData) / 2)); 93} 94 95TEST(BufferTest, TestSetLengthLarger) { 96 Buffer buf; 97 buf.SetData(kTestData, sizeof(kTestData)); 98 buf.SetLength(sizeof(kTestData) * 2); 99 EXPECT_EQ(sizeof(kTestData) * 2, buf.length()); 100 EXPECT_EQ(sizeof(kTestData) * 2, buf.capacity()); 101 EXPECT_EQ(0, memcmp(buf.data(), kTestData, sizeof(kTestData))); 102} 103 104TEST(BufferTest, TestSetCapacitySmaller) { 105 Buffer buf; 106 buf.SetData(kTestData, sizeof(kTestData)); 107 buf.SetCapacity(sizeof(kTestData) / 2); // should be ignored 108 EXPECT_EQ(sizeof(kTestData), buf.length()); 109 EXPECT_EQ(sizeof(kTestData), buf.capacity()); 110 EXPECT_EQ(0, memcmp(buf.data(), kTestData, sizeof(kTestData))); 111} 112 113TEST(BufferTest, TestSetCapacityLarger) { 114 Buffer buf(kTestData, sizeof(kTestData)); 115 buf.SetCapacity(sizeof(kTestData) * 2); 116 EXPECT_EQ(sizeof(kTestData), buf.length()); 117 EXPECT_EQ(sizeof(kTestData) * 2, buf.capacity()); 118 EXPECT_EQ(0, memcmp(buf.data(), kTestData, sizeof(kTestData))); 119} 120 121TEST(BufferTest, TestSetCapacityThenSetLength) { 122 Buffer buf(kTestData, sizeof(kTestData)); 123 buf.SetCapacity(sizeof(kTestData) * 4); 124 memcpy(buf.data() + sizeof(kTestData), kTestData, sizeof(kTestData)); 125 buf.SetLength(sizeof(kTestData) * 2); 126 EXPECT_EQ(sizeof(kTestData) * 2, buf.length()); 127 EXPECT_EQ(sizeof(kTestData) * 4, buf.capacity()); 128 EXPECT_EQ(0, memcmp(buf.data(), kTestData, sizeof(kTestData))); 129 EXPECT_EQ(0, memcmp(buf.data() + sizeof(kTestData), 130 kTestData, sizeof(kTestData))); 131} 132 133TEST(BufferTest, TestTransfer) { 134 Buffer buf1(kTestData, sizeof(kTestData), 256U), buf2; 135 buf1.TransferTo(&buf2); 136 EXPECT_EQ(0U, buf1.length()); 137 EXPECT_EQ(0U, buf1.capacity()); 138 EXPECT_EQ(sizeof(kTestData), buf2.length()); 139 EXPECT_EQ(256U, buf2.capacity()); // capacity does transfer 140 EXPECT_EQ(0, memcmp(buf2.data(), kTestData, sizeof(kTestData))); 141} 142 143} // namespace rtc 144