blob: 71b3f89e3f05e3195fd7bb0ab4ec33d486424c0f [file] [log] [blame]
henrike@webrtc.orgf7795df2014-05-13 18:00:26 +00001/*
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