padded_bytes_test.cc (2147B)
1 // Copyright (c) the JPEG XL Project Authors. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file. 5 6 #include "lib/jxl/padded_bytes.h" 7 8 #include <jxl/memory_manager.h> 9 10 #include <cstddef> 11 12 #include "lib/jxl/test_memory_manager.h" 13 #include "lib/jxl/test_utils.h" 14 #include "lib/jxl/testing.h" 15 16 namespace jxl { 17 namespace { 18 19 TEST(PaddedBytesTest, TestNonEmptyFirstByteZero) { 20 JxlMemoryManager* memory_manager = jxl::test::MemoryManager(); 21 JXL_TEST_ASSIGN_OR_DIE(PaddedBytes pb, 22 PaddedBytes::WithInitialSpace(memory_manager, 1)); 23 EXPECT_EQ(0, pb[0]); 24 // Even after resizing.. 25 EXPECT_TRUE(pb.resize(20)); 26 EXPECT_EQ(0, pb[0]); 27 // And reserving. 28 EXPECT_TRUE(pb.reserve(200)); 29 EXPECT_EQ(0, pb[0]); 30 } 31 32 TEST(PaddedBytesTest, TestEmptyFirstByteZero) { 33 JxlMemoryManager* memory_manager = jxl::test::MemoryManager(); 34 JXL_TEST_ASSIGN_OR_DIE(PaddedBytes pb, 35 PaddedBytes::WithInitialSpace(memory_manager, 0)); 36 // After resizing - new zero is written despite there being nothing to copy. 37 ASSERT_TRUE(pb.resize(20)); 38 EXPECT_EQ(0, pb[0]); 39 } 40 41 TEST(PaddedBytesTest, TestFillWithoutReserve) { 42 JxlMemoryManager* memory_manager = jxl::test::MemoryManager(); 43 PaddedBytes pb{memory_manager}; 44 for (size_t i = 0; i < 170u; ++i) { 45 EXPECT_TRUE(pb.push_back(i)); 46 } 47 EXPECT_EQ(170u, pb.size()); 48 EXPECT_GE(pb.capacity(), 170u); 49 } 50 51 TEST(PaddedBytesTest, TestFillWithExactReserve) { 52 JxlMemoryManager* memory_manager = jxl::test::MemoryManager(); 53 PaddedBytes pb{memory_manager}; 54 EXPECT_TRUE(pb.reserve(170)); 55 for (size_t i = 0; i < 170u; ++i) { 56 EXPECT_TRUE(pb.push_back(i)); 57 } 58 EXPECT_EQ(170u, pb.size()); 59 EXPECT_EQ(pb.capacity(), 170u); 60 } 61 62 TEST(PaddedBytesTest, TestFillWithMoreReserve) { 63 JxlMemoryManager* memory_manager = jxl::test::MemoryManager(); 64 PaddedBytes pb{memory_manager}; 65 EXPECT_TRUE(pb.reserve(171)); 66 for (size_t i = 0; i < 170u; ++i) { 67 EXPECT_TRUE(pb.push_back(i)); 68 } 69 EXPECT_EQ(170u, pb.size()); 70 EXPECT_GT(pb.capacity(), 170u); 71 } 72 73 } // namespace 74 } // namespace jxl