| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 TEST(SharedBufferTest, getAsBytes) | 43 TEST(SharedBufferTest, getAsBytes) |
| 44 { | 44 { |
| 45 char testData0[] = "Hello"; | 45 char testData0[] = "Hello"; |
| 46 char testData1[] = "World"; | 46 char testData1[] = "World"; |
| 47 char testData2[] = "Goodbye"; | 47 char testData2[] = "Goodbye"; |
| 48 | 48 |
| 49 RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create(testData0, strlen(t
estData0)); | 49 RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create(testData0, strlen(t
estData0)); |
| 50 sharedBuffer->append(testData1, strlen(testData1)); | 50 sharedBuffer->append(testData1, strlen(testData1)); |
| 51 sharedBuffer->append(testData2, strlen(testData2)); | 51 sharedBuffer->append(testData2, strlen(testData2)); |
| 52 | 52 |
| 53 const unsigned size = sharedBuffer->size(); | 53 const size_t size = sharedBuffer->size(); |
| 54 OwnPtr<char[]> data = adoptArrayPtr(new char[size]); | 54 OwnPtr<char[]> data = adoptArrayPtr(new char[size]); |
| 55 ASSERT_TRUE(sharedBuffer->getAsBytes(data.get(), size)); | 55 ASSERT_TRUE(sharedBuffer->getAsBytes(data.get(), size)); |
| 56 | 56 |
| 57 char expectedConcatenation[] = "HelloWorldGoodbye"; | 57 char expectedConcatenation[] = "HelloWorldGoodbye"; |
| 58 ASSERT_EQ(strlen(expectedConcatenation), size); | 58 ASSERT_EQ(strlen(expectedConcatenation), size); |
| 59 EXPECT_EQ(0, memcmp(expectedConcatenation, data.get(), strlen(expectedConcat
enation))); | 59 EXPECT_EQ(0, memcmp(expectedConcatenation, data.get(), strlen(expectedConcat
enation))); |
| 60 } | 60 } |
| 61 | 61 |
| 62 TEST(SharedBufferTest, getAsBytesLargeSegments) | 62 TEST(SharedBufferTest, getAsBytesLargeSegments) |
| 63 { | 63 { |
| 64 Vector<char> vector0(0x4000); | 64 Vector<char> vector0(0x4000); |
| 65 for (size_t i = 0; i < vector0.size(); ++i) | 65 for (size_t i = 0; i < vector0.size(); ++i) |
| 66 vector0[i] = 'a'; | 66 vector0[i] = 'a'; |
| 67 Vector<char> vector1(0x4000); | 67 Vector<char> vector1(0x4000); |
| 68 for (size_t i = 0; i < vector1.size(); ++i) | 68 for (size_t i = 0; i < vector1.size(); ++i) |
| 69 vector1[i] = 'b'; | 69 vector1[i] = 'b'; |
| 70 Vector<char> vector2(0x4000); | 70 Vector<char> vector2(0x4000); |
| 71 for (size_t i = 0; i < vector2.size(); ++i) | 71 for (size_t i = 0; i < vector2.size(); ++i) |
| 72 vector2[i] = 'c'; | 72 vector2[i] = 'c'; |
| 73 | 73 |
| 74 RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::adoptVector(vector0); | 74 RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::adoptVector(vector0); |
| 75 sharedBuffer->append(vector1); | 75 sharedBuffer->append(vector1); |
| 76 sharedBuffer->append(vector2); | 76 sharedBuffer->append(vector2); |
| 77 | 77 |
| 78 const unsigned size = sharedBuffer->size(); | 78 const size_t size = sharedBuffer->size(); |
| 79 OwnPtr<char[]> data = adoptArrayPtr(new char[size]); | 79 OwnPtr<char[]> data = adoptArrayPtr(new char[size]); |
| 80 ASSERT_TRUE(sharedBuffer->getAsBytes(data.get(), size)); | 80 ASSERT_TRUE(sharedBuffer->getAsBytes(data.get(), size)); |
| 81 | 81 |
| 82 ASSERT_EQ(0x4000U + 0x4000U + 0x4000U, size); | 82 ASSERT_EQ(0x4000U + 0x4000U + 0x4000U, size); |
| 83 int position = 0; | 83 int position = 0; |
| 84 for (int i = 0; i < 0x4000; ++i) { | 84 for (int i = 0; i < 0x4000; ++i) { |
| 85 EXPECT_EQ('a', data[position]); | 85 EXPECT_EQ('a', data[position]); |
| 86 ++position; | 86 ++position; |
| 87 } | 87 } |
| 88 for (int i = 0; i < 0x4000; ++i) { | 88 for (int i = 0; i < 0x4000; ++i) { |
| 89 EXPECT_EQ('b', data[position]); | 89 EXPECT_EQ('b', data[position]); |
| 90 ++position; | 90 ++position; |
| 91 } | 91 } |
| 92 for (int i = 0; i < 0x4000; ++i) { | 92 for (int i = 0; i < 0x4000; ++i) { |
| 93 EXPECT_EQ('c', data[position]); | 93 EXPECT_EQ('c', data[position]); |
| 94 ++position; | 94 ++position; |
| 95 } | 95 } |
| 96 } | 96 } |
| 97 | 97 |
| 98 TEST(SharedBufferTest, copy) | 98 TEST(SharedBufferTest, copy) |
| 99 { | 99 { |
| 100 Vector<char> testData(10000); | 100 Vector<char> testData(10000); |
| 101 std::generate(testData.begin(), testData.end(), &std::rand); | 101 std::generate(testData.begin(), testData.end(), &std::rand); |
| 102 | 102 |
| 103 unsigned length = testData.size(); | 103 size_t length = testData.size(); |
| 104 RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create(testData.data(), le
ngth); | 104 RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create(testData.data(), le
ngth); |
| 105 sharedBuffer->append(testData.data(), length); | 105 sharedBuffer->append(testData.data(), length); |
| 106 sharedBuffer->append(testData.data(), length); | 106 sharedBuffer->append(testData.data(), length); |
| 107 sharedBuffer->append(testData.data(), length); | 107 sharedBuffer->append(testData.data(), length); |
| 108 // sharedBuffer must contain data more than segmentSize (= 0x1000) to check
copy(). | 108 // sharedBuffer must contain data more than segmentSize (= 0x1000) to check
copy(). |
| 109 ASSERT_EQ(length * 4, sharedBuffer->size()); | 109 ASSERT_EQ(length * 4, sharedBuffer->size()); |
| 110 | 110 |
| 111 RefPtr<SharedBuffer> clone = sharedBuffer->copy(); | 111 RefPtr<SharedBuffer> clone = sharedBuffer->copy(); |
| 112 ASSERT_EQ(length * 4, clone->size()); | 112 ASSERT_EQ(length * 4, clone->size()); |
| 113 ASSERT_EQ(0, memcmp(clone->data(), sharedBuffer->data(), clone->size())); | 113 ASSERT_EQ(0, memcmp(clone->data(), sharedBuffer->data(), clone->size())); |
| 114 | 114 |
| 115 clone->append(testData.data(), length); | 115 clone->append(testData.data(), length); |
| 116 ASSERT_EQ(length * 5, clone->size()); | 116 ASSERT_EQ(length * 5, clone->size()); |
| 117 } | 117 } |
| 118 | 118 |
| 119 TEST(SharedBufferTest, constructorWithSizeOnly) | 119 TEST(SharedBufferTest, constructorWithSizeOnly) |
| 120 { | 120 { |
| 121 unsigned length = 10000; | 121 size_t length = 10000; |
| 122 RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create(length); | 122 RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create(length); |
| 123 ASSERT_EQ(length, sharedBuffer->size()); | 123 ASSERT_EQ(length, sharedBuffer->size()); |
| 124 | 124 |
| 125 // The internal flat buffer should have been resized to |length| therefore g
etSomeData() should | 125 // The internal flat buffer should have been resized to |length| therefore g
etSomeData() should |
| 126 // directly return the full size. | 126 // directly return the full size. |
| 127 const char* data; | 127 const char* data; |
| 128 ASSERT_EQ(length, sharedBuffer->getSomeData(data, 0)); | 128 ASSERT_EQ(length, sharedBuffer->getSomeData(data, static_cast<size_t>(0u))); |
| 129 } | 129 } |
| 130 | 130 |
| 131 TEST(SharedBufferTest, createPurgeable) | 131 TEST(SharedBufferTest, createPurgeable) |
| 132 { | 132 { |
| 133 Vector<char> testData(30000); | 133 Vector<char> testData(30000); |
| 134 std::generate(testData.begin(), testData.end(), &std::rand); | 134 std::generate(testData.begin(), testData.end(), &std::rand); |
| 135 | 135 |
| 136 TestingPlatformSupport::Config config; | 136 TestingPlatformSupport::Config config; |
| 137 config.hasDiscardableMemorySupport = true; | 137 config.hasDiscardableMemorySupport = true; |
| 138 TestingPlatformSupport platformWithDiscardableMemorySupport(config); | 138 TestingPlatformSupport platformWithDiscardableMemorySupport(config); |
| 139 | 139 |
| 140 unsigned length = testData.size(); | 140 size_t length = testData.size(); |
| 141 RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::createPurgeable(testData.d
ata(), length); | 141 RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::createPurgeable(testData.d
ata(), length); |
| 142 ASSERT_EQ(length, sharedBuffer->size()); | 142 ASSERT_EQ(length, sharedBuffer->size()); |
| 143 // Merge the segments into a single vector. | 143 // Merge the segments into a single vector. |
| 144 const char* data = sharedBuffer->data(); | 144 const char* data = sharedBuffer->data(); |
| 145 ASSERT_EQ(0, memcmp(data, testData.data(), length)); | 145 ASSERT_EQ(0, memcmp(data, testData.data(), length)); |
| 146 | 146 |
| 147 // Do another append + merge the segments again. | 147 // Do another append + merge the segments again. |
| 148 size_t previousTestDataSize = testData.size(); | 148 size_t previousTestDataSize = testData.size(); |
| 149 testData.resize(2 * previousTestDataSize); | 149 testData.resize(2 * previousTestDataSize); |
| 150 std::generate(testData.begin() + previousTestDataSize, testData.end(), &std:
:rand); | 150 std::generate(testData.begin() + previousTestDataSize, testData.end(), &std:
:rand); |
| 151 sharedBuffer->append(testData.data() + previousTestDataSize, previousTestDat
aSize); | 151 sharedBuffer->append(testData.data() + previousTestDataSize, previousTestDat
aSize); |
| 152 ASSERT_EQ(0, memcmp(data, testData.data(), length)); | 152 ASSERT_EQ(0, memcmp(data, testData.data(), length)); |
| 153 } | 153 } |
| 154 | 154 |
| 155 } // namespace blink | 155 } // namespace blink |
| OLD | NEW |