diff options
author | Tor Egge <Tor.Egge@online.no> | 2023-06-22 18:32:17 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2023-06-22 18:32:17 +0200 |
commit | 3bef09482a1fcc1a55ff09c778921ea921028e24 (patch) | |
tree | 6e4dd47797c192350b0178fb88fd8255bbe3bcb1 /vespalib/src/tests | |
parent | fec5b4b5837826129e9e06bd68c1488dd93766df (diff) |
Allocate space for allowed buffer underflow.
Diffstat (limited to 'vespalib/src/tests')
-rw-r--r-- | vespalib/src/tests/datastore/array_store/array_store_test.cpp | 8 | ||||
-rw-r--r-- | vespalib/src/tests/datastore/dynamic_array_buffer_type/dynamic_array_buffer_type_test.cpp | 52 |
2 files changed, 32 insertions, 28 deletions
diff --git a/vespalib/src/tests/datastore/array_store/array_store_test.cpp b/vespalib/src/tests/datastore/array_store/array_store_test.cpp index a259fcaa4dc..2674acf1ce9 100644 --- a/vespalib/src/tests/datastore/array_store/array_store_test.cpp +++ b/vespalib/src/tests/datastore/array_store/array_store_test.cpp @@ -280,7 +280,7 @@ TYPED_TEST(NumberStoreTest, control_static_sizes) { EXPECT_EQ(202140u, usage.allocatedBytes()); EXPECT_EQ(197680u, usage.usedBytes()); } else { - EXPECT_EQ(202388u, usage.allocatedBytes()); + EXPECT_EQ(202328u, usage.allocatedBytes()); EXPECT_EQ(197568u, usage.usedBytes()); } } @@ -564,10 +564,10 @@ TYPED_TEST(NumberStoreTest, address_space_usage_is_ratio_between_used_arrays_and * allocated elements = 256 / sizeof(int) = 64. * limit = 64 / 3 = 21. * - * For dynamic buffer 3, we have 16 * 5 * sizeof(int) => 320 -> 512 - * limit = 512 / (5 * 4) = 25 + * For dynamic buffer 3, we have 16 * 5 * sizeof(int) => 320 -> 512 - 64 + * limit = (512 -64) / (5 * 4) = 22 */ - size_t type_id_3_entries = this->simple_buffers() ? 21 : 25; + size_t type_id_3_entries = this->simple_buffers() ? 21 : 22; size_t expLimit = fourgig - 4 * TestFixture::EntryRefType::offsetSize() + 3 * 16 + type_id_3_entries; EXPECT_EQ(static_cast<double>(2)/ expLimit, this->store.addressSpaceUsage().usage()); EXPECT_EQ(expLimit, this->store.addressSpaceUsage().limit()); diff --git a/vespalib/src/tests/datastore/dynamic_array_buffer_type/dynamic_array_buffer_type_test.cpp b/vespalib/src/tests/datastore/dynamic_array_buffer_type/dynamic_array_buffer_type_test.cpp index a703d9b18eb..9c0432a7780 100644 --- a/vespalib/src/tests/datastore/dynamic_array_buffer_type/dynamic_array_buffer_type_test.cpp +++ b/vespalib/src/tests/datastore/dynamic_array_buffer_type/dynamic_array_buffer_type_test.cpp @@ -120,20 +120,23 @@ protected: BufferType _buffer_type; size_t _entry_size; + size_t _buffer_underflow_size; size_t _buf_size; - std::unique_ptr<char[]> _buf; + std::unique_ptr<char[]> _buf_alloc; + char* _buf; }; DynamicArrayBufferTypeTest::DynamicArrayBufferTypeTest() : testing::Test(), _buffer_type(3, ArrayStoreConfig::AllocSpec(0, 10, 0, 0.2), {}), _entry_size(_buffer_type.entry_size()), + _buffer_underflow_size(BufferType::buffer_underflow_size), _buf_size(2 * _entry_size), - _buf(std::make_unique<char[]>(_buf_size)) + _buf_alloc(std::make_unique<char[]>(_buf_size + _buffer_underflow_size)), + _buf(_buf_alloc.get() + _buffer_underflow_size) { // Call initialize_reserved_entries to force construction of empty element - _buffer_type.initialize_reserved_entries(_buf.get(), 1); - memset(_buf.get(), 55, _buf_size); + _buffer_type.initialize_reserved_entries(_buf, 1); // Reset counts after empty element has been constructed counts = Counts(); } @@ -178,7 +181,7 @@ DynamicArrayBufferTypeTest::get_max_vector(const void* buffer, uint32_t offset) void DynamicArrayBufferTypeTest::write_entry1() { - auto e1 = BufferType::get_entry(_buf.get(), 1, _entry_size); + auto e1 = BufferType::get_entry(_buf, 1, _entry_size); BufferType::set_dynamic_array_size(e1, 2); new (static_cast<void *>(e1)) WrapInt32(42); new (static_cast<void *>(e1 + 1)) WrapInt32(47); @@ -204,46 +207,47 @@ TEST_F(DynamicArrayBufferTypeTest, entry_size_is_calculated) TEST_F(DynamicArrayBufferTypeTest, initialize_reserved_entries) { - _buffer_type.initialize_reserved_entries(_buf.get(), 2); - EXPECT_EQ((std::vector<int>{}), get_vector(_buf.get(), 0)); - EXPECT_EQ((std::vector<int>{}), get_vector(_buf.get(), 1)); - EXPECT_EQ((std::vector<int>{0, 0, 0}), get_max_vector(_buf.get(), 0)); - EXPECT_EQ((std::vector<int>{0, 0, 0}), get_max_vector(_buf.get(), 1)); + _buffer_type.initialize_reserved_entries(_buf, 2); + EXPECT_EQ((std::vector<int>{}), get_vector(_buf, 0)); + EXPECT_EQ((std::vector<int>{}), get_vector(_buf, 1)); + EXPECT_EQ((std::vector<int>{0, 0, 0}), get_max_vector(_buf, 0)); + EXPECT_EQ((std::vector<int>{0, 0, 0}), get_max_vector(_buf, 1)); EXPECT_EQ(Counts(0, 0, 6, 0, 0), counts); } TEST_F(DynamicArrayBufferTypeTest, fallback_copy) { - _buffer_type.initialize_reserved_entries(_buf.get(), 1); + _buffer_type.initialize_reserved_entries(_buf, 1); write_entry1(); EXPECT_EQ(Counts(0, 3, 3, 0, 0), counts); - auto buf2 = std::make_unique<char[]>(_buf_size); - _buffer_type.fallback_copy(buf2.get(), _buf.get(), 2); - EXPECT_EQ((std::vector<int>{}), get_vector(buf2.get(), 0)); - EXPECT_EQ((std::vector<int>{42, 47}), get_vector(buf2.get(), 1)); - EXPECT_EQ((std::vector<int>{0, 0, 0}), get_max_vector(buf2.get(), 0)); - EXPECT_EQ((std::vector<int>{42, 47, 49}), get_max_vector(buf2.get(), 1)); + auto buf2_alloc = std::make_unique<char[]>(_buf_size + _buffer_underflow_size); + char* buf2 = buf2_alloc.get() + _buffer_underflow_size; + _buffer_type.fallback_copy(buf2, _buf, 2); + EXPECT_EQ((std::vector<int>{}), get_vector(buf2, 0)); + EXPECT_EQ((std::vector<int>{42, 47}), get_vector(buf2, 1)); + EXPECT_EQ((std::vector<int>{0, 0, 0}), get_max_vector(buf2, 0)); + EXPECT_EQ((std::vector<int>{42, 47, 49}), get_max_vector(buf2, 1)); EXPECT_EQ(Counts(0, 3, 9, 0, 0), counts); } TEST_F(DynamicArrayBufferTypeTest, destroy_entries) { - _buffer_type.initialize_reserved_entries(_buf.get(), 2); + _buffer_type.initialize_reserved_entries(_buf, 2); write_entry1(); - _buffer_type.destroy_entries(_buf.get(), 2); + _buffer_type.destroy_entries(_buf, 2); EXPECT_EQ(Counts(0, 3, 6, 6, 0), counts); } TEST_F(DynamicArrayBufferTypeTest, clean_hold) { - _buffer_type.initialize_reserved_entries(_buf.get(), 1); + _buffer_type.initialize_reserved_entries(_buf, 1); write_entry1(); MyCleanContext clean_context; - _buffer_type.clean_hold(_buf.get(), 1, 1, clean_context); - EXPECT_EQ((std::vector<int>{0, 0}), get_vector(_buf.get(), 1)); - EXPECT_EQ((std::vector<int>{0, 0, 49}), get_max_vector(_buf.get(), 1)); + _buffer_type.clean_hold(_buf, 1, 1, clean_context); + EXPECT_EQ((std::vector<int>{0, 0}), get_vector(_buf, 1)); + EXPECT_EQ((std::vector<int>{0, 0, 49}), get_max_vector(_buf, 1)); EXPECT_EQ(Counts(0, 3, 3, 0, 2), counts); - _buffer_type.clean_hold(_buf.get(), 0, 2, clean_context); + _buffer_type.clean_hold(_buf, 0, 2, clean_context); EXPECT_EQ(Counts(0, 3, 3, 0, 4), counts); } |