16f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/* 26f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Copyright (C) 2015 The Android Open Source Project 36f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 46f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 56f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * you may not use this file except in compliance with the License. 66f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * You may obtain a copy of the License at 76f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 86f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 96f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 106f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Unless required by applicable law or agreed to in writing, software 116f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 126f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * See the License for the specific language governing permissions and 146f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * limitations under the License. 156f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 166f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 176f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include "BigBuffer.h" 186f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 196f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <gtest/gtest.h> 206f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 216f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskinamespace aapt { 226f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 236f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(BigBufferTest, AllocateSingleBlock) { 246f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski BigBuffer buffer(4); 256f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 266f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_NE(nullptr, buffer.nextBlock<char>(2)); 276f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_EQ(2u, buffer.size()); 286f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 296f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 306f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(BigBufferTest, ReturnSameBlockIfNextAllocationFits) { 316f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski BigBuffer buffer(16); 326f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 336f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski char* b1 = buffer.nextBlock<char>(8); 346f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_NE(nullptr, b1); 356f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 366f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski char* b2 = buffer.nextBlock<char>(4); 376f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_NE(nullptr, b2); 386f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 396f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_EQ(b1 + 8, b2); 406f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 416f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 426f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(BigBufferTest, AllocateExactSizeBlockIfLargerThanBlockSize) { 436f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski BigBuffer buffer(16); 446f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 456f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_NE(nullptr, buffer.nextBlock<char>(32)); 466f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_EQ(32u, buffer.size()); 476f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 486f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 496f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(BigBufferTest, AppendAndMoveBlock) { 506f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski BigBuffer buffer(16); 516f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 526f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski uint32_t* b1 = buffer.nextBlock<uint32_t>(); 536f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ASSERT_NE(nullptr, b1); 546f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *b1 = 33; 556f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 566f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski { 576f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski BigBuffer buffer2(16); 586f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski b1 = buffer2.nextBlock<uint32_t>(); 596f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ASSERT_NE(nullptr, b1); 606f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *b1 = 44; 616f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 626f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski buffer.appendBuffer(std::move(buffer2)); 636f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_EQ(0u, buffer2.size()); 646f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_EQ(buffer2.begin(), buffer2.end()); 656f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski } 666f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 676f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_EQ(2 * sizeof(uint32_t), buffer.size()); 686f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 696f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski auto b = buffer.begin(); 706f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ASSERT_NE(b, buffer.end()); 716f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ASSERT_EQ(sizeof(uint32_t), b->size); 726f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ASSERT_EQ(33u, *reinterpret_cast<uint32_t*>(b->buffer.get())); 736f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ++b; 746f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 756f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ASSERT_NE(b, buffer.end()); 766f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ASSERT_EQ(sizeof(uint32_t), b->size); 776f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ASSERT_EQ(44u, *reinterpret_cast<uint32_t*>(b->buffer.get())); 786f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ++b; 796f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 806f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ASSERT_EQ(b, buffer.end()); 816f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 826f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 836f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(BigBufferTest, PadAndAlignProperly) { 846f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski BigBuffer buffer(16); 856f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 866f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ASSERT_NE(buffer.nextBlock<char>(2), nullptr); 876f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ASSERT_EQ(2u, buffer.size()); 886f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski buffer.pad(2); 896f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ASSERT_EQ(4u, buffer.size()); 906f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski buffer.align4(); 916f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ASSERT_EQ(4u, buffer.size()); 926f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski buffer.pad(2); 936f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ASSERT_EQ(6u, buffer.size()); 946f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski buffer.align4(); 956f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ASSERT_EQ(8u, buffer.size()); 966f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 976f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 986f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} // namespace aapt 99