Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(234)

Unified Diff: webrtc/base/copyonwritebuffer_unittest.cc

Issue 2328553002: Make CopyOnWriteBuffer keep capacity (Closed)
Patch Set: heap_allocation -> original_allocation Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/base/copyonwritebuffer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/base/copyonwritebuffer_unittest.cc
diff --git a/webrtc/base/copyonwritebuffer_unittest.cc b/webrtc/base/copyonwritebuffer_unittest.cc
index dbf59f7718f2779f0dff9bc0c3c26d79918a00c5..fefd0c7cdb9634a86be6255cbcf2834df3a0d7d3 100644
--- a/webrtc/base/copyonwritebuffer_unittest.cc
+++ b/webrtc/base/copyonwritebuffer_unittest.cc
@@ -116,37 +116,57 @@ TEST(CopyOnWriteBufferTest, TestAppendData) {
EXPECT_EQ(buf2, CopyOnWriteBuffer(exp));
}
-TEST(CopyOnWriteBufferTest, TestSetData) {
+TEST(CopyOnWriteBufferTest, SetEmptyData) {
+ CopyOnWriteBuffer buf(10);
+
+ buf.SetData<uint8_t>(nullptr, 0);
+
+ EXPECT_EQ(0u, buf.size());
+}
+
+TEST(CopyOnWriteBufferTest, SetDataNoMoreThanCapacityDoesntCauseReallocation) {
+ CopyOnWriteBuffer buf1(3, 10);
+ const uint8_t* const original_allocation = buf1.cdata();
+
+ buf1.SetData(kTestData, 10);
+
+ EXPECT_EQ(original_allocation, buf1.cdata());
+ EXPECT_EQ(buf1, CopyOnWriteBuffer(kTestData, 10));
+}
+
+TEST(CopyOnWriteBufferTest, SetDataMakeReferenceCopy) {
CopyOnWriteBuffer buf1(kTestData, 3, 10);
CopyOnWriteBuffer buf2;
buf2.SetData(buf1);
- // buf2 shares the same data as buf1 now.
- EnsureBuffersShareData(buf1, buf2);
- CopyOnWriteBuffer buf3(buf1);
- // buf3 is re-allocated with new data, existing buffers are not modified.
- buf3.SetData("foo");
- EXPECT_EQ(buf1, CopyOnWriteBuffer(kTestData, 3));
EnsureBuffersShareData(buf1, buf2);
- EnsureBuffersDontShareData(buf1, buf3);
- const int8_t exp[] = {'f', 'o', 'o', 0x0};
- EXPECT_EQ(buf3, CopyOnWriteBuffer(exp));
+}
+
+TEST(CopyOnWriteBufferTest, SetDataOnSharedKeepsOriginal) {
+ const uint8_t data[] = "foo";
+ CopyOnWriteBuffer buf1(kTestData, 3, 10);
+ const uint8_t* const original_allocation = buf1.cdata();
+ CopyOnWriteBuffer buf2(buf1);
+
+ buf2.SetData(data);
- buf2.SetData(static_cast<const uint8_t*>(nullptr), 0u);
EnsureBuffersDontShareData(buf1, buf2);
- EXPECT_EQ(buf1.size(), 3u);
- EXPECT_EQ(buf1.capacity(), 10u);
- EXPECT_EQ(buf2.size(), 0u);
- EXPECT_EQ(buf2.capacity(), 0u);
+ EXPECT_EQ(original_allocation, buf1.cdata());
+ EXPECT_EQ(buf1, CopyOnWriteBuffer(kTestData, 3));
+ EXPECT_EQ(buf2, CopyOnWriteBuffer(data));
}
-TEST(CopyOnWriteBufferTest, TestSetDataEmpty) {
- CopyOnWriteBuffer buf;
- buf.SetData(static_cast<const uint8_t*>(nullptr), 0u);
- EXPECT_EQ(buf.size(), 0u);
- EXPECT_EQ(buf.capacity(), 0u);
- EXPECT_EQ(buf.data(), nullptr);
+TEST(CopyOnWriteBufferTest, SetDataOnSharedKeepsCapacity) {
+ CopyOnWriteBuffer buf1(kTestData, 3, 10);
+ CopyOnWriteBuffer buf2(buf1);
+ EnsureBuffersShareData(buf1, buf2);
+
+ buf2.SetData(kTestData, 2);
+
+ EnsureBuffersDontShareData(buf1, buf2);
+ EXPECT_EQ(2u, buf2.size());
+ EXPECT_EQ(10u, buf2.capacity());
}
TEST(CopyOnWriteBufferTest, TestEnsureCapacity) {
@@ -172,31 +192,70 @@ TEST(CopyOnWriteBufferTest, TestEnsureCapacity) {
EXPECT_EQ(buf1, buf2);
}
-TEST(CopyOnWriteBufferTest, TestSetSize) {
+TEST(CopyOnWriteBufferTest, SetSizeDoesntChangeOriginal) {
CopyOnWriteBuffer buf1(kTestData, 3, 10);
+ const uint8_t* const original_allocation = buf1.cdata();
CopyOnWriteBuffer buf2(buf1);
buf2.SetSize(16);
+
EnsureBuffersDontShareData(buf1, buf2);
- EXPECT_EQ(buf1.size(), 3u);
- EXPECT_EQ(buf1.capacity(), 10u);
+ EXPECT_EQ(original_allocation, buf1.cdata());
+ EXPECT_EQ(3u, buf1.size());
+ EXPECT_EQ(10u, buf1.capacity());
+}
+
+TEST(CopyOnWriteBufferTest, SetSizeCloneContent) {
+ CopyOnWriteBuffer buf1(kTestData, 3, 10);
+ CopyOnWriteBuffer buf2(buf1);
+
+ buf2.SetSize(16);
+
EXPECT_EQ(buf2.size(), 16u);
- EXPECT_EQ(buf2.capacity(), 16u);
- // The contents got cloned.
EXPECT_EQ(0, memcmp(buf2.data(), kTestData, 3));
}
-TEST(CopyOnWriteBufferTest, TestClear) {
+TEST(CopyOnWriteBufferTest, SetSizeMayIncreaseCapacity) {
+ CopyOnWriteBuffer buf(kTestData, 3, 10);
+
+ buf.SetSize(16);
+
+ EXPECT_EQ(16u, buf.size());
+ EXPECT_EQ(16u, buf.capacity());
+}
+
+TEST(CopyOnWriteBufferTest, SetSizeDoesntDecreaseCapacity) {
+ CopyOnWriteBuffer buf1(kTestData, 5, 10);
+ CopyOnWriteBuffer buf2(buf1);
+
+ buf2.SetSize(2);
+
+ EXPECT_EQ(2u, buf2.size());
+ EXPECT_EQ(10u, buf2.capacity());
+}
+
+TEST(CopyOnWriteBufferTest, ClearDoesntChangeOriginal) {
CopyOnWriteBuffer buf1(kTestData, 3, 10);
+ const uint8_t* const original_allocation = buf1.cdata();
CopyOnWriteBuffer buf2(buf1);
buf2.Clear();
+
EnsureBuffersDontShareData(buf1, buf2);
- EXPECT_EQ(buf1.size(), 3u);
- EXPECT_EQ(buf1.capacity(), 10u);
- EXPECT_EQ(0, memcmp(buf1.data(), kTestData, 3));
- EXPECT_EQ(buf2.size(), 0u);
- EXPECT_EQ(buf2.capacity(), 0u);
+ EXPECT_EQ(3u, buf1.size());
+ EXPECT_EQ(10u, buf1.capacity());
+ EXPECT_EQ(original_allocation, buf1.cdata());
+ EXPECT_EQ(0u, buf2.size());
+}
+
+TEST(CopyOnWriteBufferTest, ClearDoesntChangeCapacity) {
+ CopyOnWriteBuffer buf1(kTestData, 3, 10);
+ CopyOnWriteBuffer buf2(buf1);
+
+ buf2.Clear();
+
+ EXPECT_EQ(0u, buf2.size());
+ EXPECT_EQ(10u, buf2.capacity());
}
TEST(CopyOnWriteBufferTest, TestConstDataAccessor) {
« no previous file with comments | « webrtc/base/copyonwritebuffer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698