1bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)/* 2bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved. 3bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * 4bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 5bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * modification, are permitted provided that the following conditions are 6bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * met: 7bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * 8bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 9bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 10bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 11bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 12bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * in the documentation and/or other materials provided with the 13bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * distribution. 14bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 15bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 16bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * this software without specific prior written permission. 17bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * 18bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) */ 30bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 31bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "config.h" 32bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "wtf/ArrayBufferBuilder.h" 33bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 34bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "wtf/Assertions.h" 35bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include <gtest/gtest.h> 3609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include <limits.h> 37bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include <string.h> 38bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 39bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)namespace WTF { 40bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 41f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuTEST(ArrayBufferBuilderTest, Constructor) 42bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 43bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) ArrayBufferBuilder zeroBuilder(0); 44f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(0u, zeroBuilder.byteLength()); 45f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(0u, zeroBuilder.capacity()); 46bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 47bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) ArrayBufferBuilder smallBuilder(1024); 48f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(0u, zeroBuilder.byteLength()); 49f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(1024u, smallBuilder.capacity()); 50bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 51bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) ArrayBufferBuilder bigBuilder(2048); 52f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(0u, zeroBuilder.byteLength()); 53f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(2048u, bigBuilder.capacity()); 54bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 55bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 56f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuTEST(ArrayBufferBuilderTest, Append) 57bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 58bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) const char data[] = "HelloWorld"; 59bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) size_t dataSize = sizeof(data) - 1; 60bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 61bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) ArrayBufferBuilder builder(2 * dataSize); 62bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 63bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.append(data, dataSize)); 64bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.byteLength()); 65bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize * 2, builder.capacity()); 66bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 67bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.append(data, dataSize)); 68bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize * 2, builder.byteLength()); 69bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize * 2, builder.capacity()); 70bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 71bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.append(data, dataSize)); 72bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize * 3, builder.byteLength()); 73bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_GE(builder.capacity(), dataSize * 3); 74bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 75bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 76f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuTEST(ArrayBufferBuilderTest, AppendRepeatedly) 77bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 78bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) const char data[] = "HelloWorld"; 79bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) size_t dataSize = sizeof(data) - 1; 80bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 81bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) ArrayBufferBuilder builder(37); // Some number coprime with dataSize. 82bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 83bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) for (size_t i = 1; i < 1000U; ++i) { 84bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.append(data, dataSize)); 85bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize * i, builder.byteLength()); 86bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_GE(builder.capacity(), dataSize * i); 87bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) } 88bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 89bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 90f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuTEST(ArrayBufferBuilderTest, DefaultConstructorAndAppendRepeatedly) 91bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 92bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) const char data[] = "HelloWorld"; 93bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) size_t dataSize = sizeof(data) - 1; 94bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 95bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) ArrayBufferBuilder builder; 96bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 97bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) for (size_t i = 1; i < 4000U; ++i) { 98bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.append(data, dataSize)); 99bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize * i, builder.byteLength()); 100bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_GE(builder.capacity(), dataSize * i); 101bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) } 102bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 103bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 104f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuTEST(ArrayBufferBuilderTest, AppendFixedCapacity) 105bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 106bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) const char data[] = "HelloWorld"; 107bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) size_t dataSize = sizeof(data) - 1; 108bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 109bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) ArrayBufferBuilder builder(15); 110bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) builder.setVariableCapacity(false); 111bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 112bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.append(data, dataSize)); 113bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.byteLength()); 114f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(15u, builder.capacity()); 115bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 116f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(5u, builder.append(data, dataSize)); 117f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(15u, builder.byteLength()); 118f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(15u, builder.capacity()); 119bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 120f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(0u, builder.append(data, dataSize)); 121f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(15u, builder.byteLength()); 122f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(15u, builder.capacity()); 123bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 124bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 125f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuTEST(ArrayBufferBuilderTest, ToArrayBuffer) 126bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 127bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) const char data1[] = "HelloWorld"; 128bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) size_t data1Size = sizeof(data1) - 1; 129bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 130bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) const char data2[] = "GoodbyeWorld"; 131bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) size_t data2Size = sizeof(data2) - 1; 132bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 133bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) ArrayBufferBuilder builder(1024); 134bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) builder.append(data1, data1Size); 135bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) builder.append(data2, data2Size); 136bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 137bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) const char expected[] = "HelloWorldGoodbyeWorld"; 138f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) size_t expectedSize = sizeof(expected) - 1; 139bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 140bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) RefPtr<ArrayBuffer> result = builder.toArrayBuffer(); 141bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) ASSERT_EQ(data1Size + data2Size, result->byteLength()); 142f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) ASSERT_EQ(expectedSize, result->byteLength()); 143bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(0, memcmp(expected, result->data(), expectedSize)); 144bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 145bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 146f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuTEST(ArrayBufferBuilderTest, ToArrayBufferSameAddressIfExactCapacity) 147bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 148bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) const char data[] = "HelloWorld"; 149bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) size_t dataSize = sizeof(data) - 1; 150bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 151bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) ArrayBufferBuilder builder(dataSize); 152bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) builder.append(data, dataSize); 153bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 154bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) RefPtr<ArrayBuffer> result1 = builder.toArrayBuffer(); 155bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) RefPtr<ArrayBuffer> result2 = builder.toArrayBuffer(); 156bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(result1.get(), result2.get()); 157bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 158bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 159f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuTEST(ArrayBufferBuilderTest, ToString) 160bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 161bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) const char data1[] = "HelloWorld"; 162bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) size_t data1Size = sizeof(data1) - 1; 163bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 164bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) const char data2[] = "GoodbyeWorld"; 165bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) size_t data2Size = sizeof(data2) - 1; 166bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 167bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) ArrayBufferBuilder builder(1024); 168bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) builder.append(data1, data1Size); 169bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) builder.append(data2, data2Size); 170bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 171bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) const char expected[] = "HelloWorldGoodbyeWorld"; 172bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) size_t expectedSize = sizeof(expected) - 1; 173bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 174bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) String result = builder.toString(); 175bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(expectedSize, result.length()); 176bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) for (unsigned i = 0; i < result.length(); ++i) 177bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(expected[i], result[i]); 178bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 179bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 180f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuTEST(ArrayBufferBuilderTest, ShrinkToFitNoAppend) 181bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 182bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) ArrayBufferBuilder builder(1024); 183f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(1024u, builder.capacity()); 184bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) builder.shrinkToFit(); 185f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(0u, builder.byteLength()); 186f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(0u, builder.capacity()); 187bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 188bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 189f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuTEST(ArrayBufferBuilderTest, ShrinkToFit) 190bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 191bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) const char data[] = "HelloWorld"; 192bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) size_t dataSize = sizeof(data) - 1; 193bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 194bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) ArrayBufferBuilder builder(32); 195bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 196bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.append(data, dataSize)); 197bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.byteLength()); 198f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) EXPECT_EQ(32u, builder.capacity()); 199bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 200bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) builder.shrinkToFit(); 201bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.byteLength()); 202bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.capacity()); 203bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 204bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 205f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuTEST(ArrayBufferBuilderTest, ShrinkToFitFullyUsed) 206bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 207bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) const char data[] = "HelloWorld"; 208bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) size_t dataSize = sizeof(data) - 1; 209bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 210bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) ArrayBufferBuilder builder(dataSize); 211bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) const void* internalAddress = builder.data(); 212bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 213bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.append(data, dataSize)); 214bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.byteLength()); 215bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.capacity()); 216bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 217bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) builder.shrinkToFit(); 218bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) // Reallocation should not happen. 219bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(internalAddress, builder.data()); 220bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.byteLength()); 221bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.capacity()); 222bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 223bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 224f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuTEST(ArrayBufferBuilderTest, ShrinkToFitAfterGrowth) 225bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 226bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) const char data[] = "HelloWorld"; 227bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) size_t dataSize = sizeof(data) - 1; 228bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 229bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) ArrayBufferBuilder builder(5); 230bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 231bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.append(data, dataSize)); 232bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_GE(builder.capacity(), dataSize); 233bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) builder.shrinkToFit(); 234bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.byteLength()); 235bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) EXPECT_EQ(dataSize, builder.capacity()); 236bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 237bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 238bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} // namespace WTF 239