1/* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#include "dictionary/utils/buffer_with_extendable_buffer.h" 18 19#include <gtest/gtest.h> 20 21namespace latinime { 22namespace { 23 24const int DEFAULT_MAX_BUFFER_SIZE = 1024; 25 26TEST(BufferWithExtendablebufferTest, TestWriteAndRead) { 27 BufferWithExtendableBuffer buffer(DEFAULT_MAX_BUFFER_SIZE); 28 int pos = 0; 29 // 1 byte 30 const uint32_t data_1 = 0xFF; 31 EXPECT_TRUE(buffer.writeUint(data_1, 1 /* size */, pos)); 32 EXPECT_EQ(data_1, buffer.readUint(1, pos)); 33 pos += 1; 34 // 2 byte 35 const uint32_t data_2 = 0xFFFF; 36 EXPECT_TRUE(buffer.writeUint(data_2, 2 /* size */, pos)); 37 EXPECT_EQ(data_2, buffer.readUint(2, pos)); 38 pos += 2; 39 // 3 byte 40 const uint32_t data_3 = 0xFFFFFF; 41 EXPECT_TRUE(buffer.writeUint(data_3, 3 /* size */, pos)); 42 EXPECT_EQ(data_3, buffer.readUint(3, pos)); 43 pos += 3; 44 // 4 byte 45 const uint32_t data_4 = 0xFFFFFFFF; 46 EXPECT_TRUE(buffer.writeUint(data_4, 4 /* size */, pos)); 47 EXPECT_EQ(data_4, buffer.readUint(4, pos)); 48} 49 50TEST(BufferWithExtendablebufferTest, TestExtend) { 51 BufferWithExtendableBuffer buffer(DEFAULT_MAX_BUFFER_SIZE); 52 EXPECT_EQ(0, buffer.getTailPosition()); 53 EXPECT_TRUE(buffer.writeUint(0xFF /* data */, 4 /* size */, 0 /* pos */)); 54 EXPECT_EQ(4, buffer.getTailPosition()); 55 EXPECT_TRUE(buffer.extend(8 /* size */)); 56 EXPECT_EQ(12, buffer.getTailPosition()); 57 EXPECT_TRUE(buffer.writeUint(0xFFFF /* data */, 4 /* size */, 8 /* pos */)); 58 EXPECT_TRUE(buffer.writeUint(0xFF /* data */, 4 /* size */, 0 /* pos */)); 59} 60 61TEST(BufferWithExtendablebufferTest, TestCopy) { 62 BufferWithExtendableBuffer buffer(DEFAULT_MAX_BUFFER_SIZE); 63 EXPECT_TRUE(buffer.writeUint(0xFF /* data */, 4 /* size */, 0 /* pos */)); 64 EXPECT_TRUE(buffer.writeUint(0xFFFF /* data */, 4 /* size */, 4 /* pos */)); 65 BufferWithExtendableBuffer targetBuffer(DEFAULT_MAX_BUFFER_SIZE); 66 EXPECT_TRUE(targetBuffer.copy(&buffer)); 67 EXPECT_EQ(0xFFu, targetBuffer.readUint(4 /* size */, 0 /* pos */)); 68 EXPECT_EQ(0xFFFFu, targetBuffer.readUint(4 /* size */, 4 /* pos */)); 69} 70 71TEST(BufferWithExtendablebufferTest, TestSizeLimit) { 72 BufferWithExtendableBuffer emptyBuffer(0 /* maxAdditionalBufferSize */); 73 EXPECT_FALSE(emptyBuffer.writeUint(0 /* data */, 1 /* size */, 0 /* pos */)); 74 EXPECT_FALSE(emptyBuffer.extend(1 /* size */)); 75 76 BufferWithExtendableBuffer smallBuffer(4 /* maxAdditionalBufferSize */); 77 EXPECT_TRUE(smallBuffer.writeUint(0 /* data */, 4 /* size */, 0 /* pos */)); 78 EXPECT_FALSE(smallBuffer.writeUint(0 /* data */, 1 /* size */, 4 /* pos */)); 79 80 EXPECT_TRUE(smallBuffer.copy(&emptyBuffer)); 81 EXPECT_FALSE(emptyBuffer.copy(&smallBuffer)); 82 83 BufferWithExtendableBuffer buffer(DEFAULT_MAX_BUFFER_SIZE); 84 EXPECT_FALSE(buffer.isNearSizeLimit()); 85 int pos = 0; 86 while (!buffer.isNearSizeLimit()) { 87 EXPECT_TRUE(buffer.writeUintAndAdvancePosition(0 /* data */, 4 /* size */, &pos)); 88 } 89 EXPECT_GT(pos, 0); 90 EXPECT_LE(pos, DEFAULT_MAX_BUFFER_SIZE); 91} 92 93} // namespace 94} // namespace latinime 95