diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2019-08-15 15:48:43 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@broadpark.no> | 2019-08-15 15:48:43 +0200 |
commit | f70d4cece53a9d49001656528530747f4a3ba8f3 (patch) | |
tree | 9fa8c1be1d05dacdbd2168799fe387bf1baa7ef5 /vespalib | |
parent | 4f8faeef83a649be7ccdf61bf13d4d09cd7d622b (diff) |
Add struct BufferStats, used by unit tests.
Diffstat (limited to 'vespalib')
-rw-r--r-- | vespalib/src/tests/datastore/unique_store_string_allocator/unique_store_string_allocator_test.cpp | 57 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/test/datastore/buffer_stats.h | 52 |
2 files changed, 73 insertions, 36 deletions
diff --git a/vespalib/src/tests/datastore/unique_store_string_allocator/unique_store_string_allocator_test.cpp b/vespalib/src/tests/datastore/unique_store_string_allocator/unique_store_string_allocator_test.cpp index 4983f9f42a4..c7659cd6154 100644 --- a/vespalib/src/tests/datastore/unique_store_string_allocator/unique_store_string_allocator_test.cpp +++ b/vespalib/src/tests/datastore/unique_store_string_allocator/unique_store_string_allocator_test.cpp @@ -2,7 +2,7 @@ #include <vespa/vespalib/datastore/unique_store_string_allocator.hpp> #include <vespa/vespalib/gtest/gtest.h> -#include <vespa/vespalib/test/datastore/memstats.h> +#include <vespa/vespalib/test/datastore/buffer_stats.h> #include <vespa/vespalib/test/insertion_operators.h> #include <vespa/vespalib/util/traits.h> #include <vector> @@ -10,7 +10,7 @@ using namespace search::datastore; using vespalib::MemoryUsage; using generation_t = vespalib::GenerationHandler::generation_t; -using MemStats = search::datastore::test::MemStats; +using BufferStats = search::datastore::test::BufferStats; namespace { @@ -53,14 +53,12 @@ struct TestBase : public ::testing::Test { const BufferState &buffer_state(EntryRef ref) const { return allocator.getDataStore().getBufferState(get_buffer_id(ref)); } - void assert_buffer_state(EntryRef ref, const MemStats expStats) const { + void assert_buffer_state(EntryRef ref, const BufferStats expStats) const { EXPECT_EQ(expStats._used, buffer_state(ref).size()); EXPECT_EQ(expStats._hold, buffer_state(ref).getHoldElems()); EXPECT_EQ(expStats._dead, buffer_state(ref).getDeadElems()); - } - void assert_buffer_extra_state(EntryRef ref, size_t exp_extra_used, size_t exp_extra_hold) const { - EXPECT_EQ(exp_extra_used, buffer_state(ref).getExtraUsedBytes()); - EXPECT_EQ(exp_extra_hold, buffer_state(ref).getExtraHoldBytes()); + EXPECT_EQ(expStats._extra_used, buffer_state(ref).getExtraUsedBytes()); + EXPECT_EQ(expStats._extra_hold, buffer_state(ref).getExtraHoldBytes()); } void trim_hold_lists() { allocator.getDataStore().transferHoldLists(generation++); @@ -81,39 +79,32 @@ TEST_F(StringTest, can_add_and_get_values) TEST_F(StringTest, elements_are_put_on_hold_when_value_is_removed) { EntryRef ref = add(small.c_str()); - assert_buffer_state(ref, MemStats().used(16).hold(0).dead(0)); + assert_buffer_state(ref, BufferStats().used(16).hold(0).dead(0)); remove(ref); - assert_buffer_state(ref, MemStats().used(16).hold(16).dead(0)); + assert_buffer_state(ref, BufferStats().used(16).hold(16).dead(0)); trim_hold_lists(); - assert_buffer_state(ref, MemStats().used(16).hold(0).dead(16)); + assert_buffer_state(ref, BufferStats().used(16).hold(0).dead(16)); } TEST_F(StringTest, extra_bytes_used_is_tracked) { EntryRef ref = add(spaces1000.c_str()); // Note: The first buffer have the first element reserved -> we expect 2 elements used here. - assert_buffer_state(ref, MemStats().used(2).hold(0).dead(1)); - assert_buffer_extra_state(ref, 1001, 0); + assert_buffer_state(ref, BufferStats().used(2).hold(0).dead(1).extra_used(1001)); remove(ref); - assert_buffer_state(ref, MemStats().used(2).hold(1).dead(1)); - assert_buffer_extra_state(ref, 1001, 1001); + assert_buffer_state(ref, BufferStats().used(2).hold(1).dead(1).extra_used(1001).extra_hold(1001)); trim_hold_lists(); - assert_buffer_state(ref, MemStats().used(2).hold(0).dead(2)); - assert_buffer_extra_state(ref, 0, 0); + assert_buffer_state(ref, BufferStats().used(2).hold(0).dead(2)); ref = add(spaces1000.c_str()); - assert_buffer_state(ref, MemStats().used(2).hold(0).dead(1)); - assert_buffer_extra_state(ref, 1001, 0); + assert_buffer_state(ref, BufferStats().used(2).hold(0).dead(1).extra_used(1001)); EntryRef ref2 = move(ref); assert_get(ref2, spaces1000.c_str()); - assert_buffer_state(ref, MemStats().used(3).hold(0).dead(1)); - assert_buffer_extra_state(ref, 2002, 0); + assert_buffer_state(ref, BufferStats().used(3).hold(0).dead(1).extra_used(2002)); remove(ref); remove(ref2); - assert_buffer_state(ref, MemStats().used(3).hold(2).dead(1)); - assert_buffer_extra_state(ref, 2002, 2002); + assert_buffer_state(ref, BufferStats().used(3).hold(2).dead(1).extra_used(2002).extra_hold(2002)); trim_hold_lists(); - assert_buffer_state(ref, MemStats().used(3).hold(0).dead(3)); - assert_buffer_extra_state(ref, 0, 0); + assert_buffer_state(ref, BufferStats().used(3).hold(0).dead(3)); } TEST_F(StringTest, string_length_determines_buffer) @@ -141,10 +132,8 @@ TEST_F(StringTest, free_list_is_used_when_enabled) EntryRef ref4 = add(spaces1000.c_str()); EXPECT_EQ(ref1, ref3); EXPECT_EQ(ref2, ref4); - assert_buffer_state(ref1, MemStats().used(16).hold(0).dead(0)); - assert_buffer_extra_state(ref1, 0, 0); - assert_buffer_state(ref2, MemStats().used(2).hold(0).dead(1)); - assert_buffer_extra_state(ref2, 1001, 0); + assert_buffer_state(ref1, BufferStats().used(16).hold(0).dead(0)); + assert_buffer_state(ref2, BufferStats().used(2).hold(0).dead(1).extra_used(1001)); } TEST_F(StringTest, free_list_is_not_used_when_disabled) @@ -159,10 +148,8 @@ TEST_F(StringTest, free_list_is_not_used_when_disabled) EntryRef ref4 = add(spaces1000.c_str()); EXPECT_NE(ref1, ref3); EXPECT_NE(ref2, ref4); - assert_buffer_state(ref1, MemStats().used(32).hold(0).dead(16)); - assert_buffer_extra_state(ref1, 0, 0); - assert_buffer_state(ref2, MemStats().used(3).hold(0).dead(2)); - assert_buffer_extra_state(ref2, 1001, 0); + assert_buffer_state(ref1, BufferStats().used(32).hold(0).dead(16)); + assert_buffer_state(ref2, BufferStats().used(3).hold(0).dead(2).extra_used(1001)); } TEST_F(StringTest, free_list_is_never_used_for_move) @@ -179,10 +166,8 @@ TEST_F(StringTest, free_list_is_never_used_for_move) EntryRef ref6 = move(ref2); EXPECT_NE(ref5, ref3); EXPECT_NE(ref6, ref4); - assert_buffer_state(ref1, MemStats().used(48).hold(0).dead(16)); - assert_buffer_extra_state(ref1, 0, 0); - assert_buffer_state(ref2, MemStats().used(4).hold(0).dead(2)); - assert_buffer_extra_state(ref2, 2002, 0); + assert_buffer_state(ref1, BufferStats().used(48).hold(0).dead(16)); + assert_buffer_state(ref2, BufferStats().used(4).hold(0).dead(2).extra_used(2002)); } TEST_F(SmallOffsetStringTest, new_underlying_buffer_is_allocated_when_current_is_full) diff --git a/vespalib/src/vespa/vespalib/test/datastore/buffer_stats.h b/vespalib/src/vespa/vespalib/test/datastore/buffer_stats.h new file mode 100644 index 00000000000..d39d8e43dcb --- /dev/null +++ b/vespalib/src/vespa/vespalib/test/datastore/buffer_stats.h @@ -0,0 +1,52 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include <cassert> + +namespace search::datastore::test { + +/* + * Class representing expected buffer stats in unit tests. + */ +struct BufferStats +{ + // elements + size_t _used; + size_t _hold; + size_t _dead; + // bytes + size_t _extra_used; + size_t _extra_hold; + BufferStats() : _used(0), _hold(0), _dead(0), _extra_used(0), _extra_hold(0) {} + BufferStats &used(size_t val) { _used += val; return *this; } + BufferStats &hold(size_t val) { _hold += val; return *this; } + BufferStats &dead(size_t val) { _dead += val; return *this; } + BufferStats &extra_used(size_t val) { _extra_used += val; return *this; } + BufferStats &extra_hold(size_t val) { _extra_hold += val; return *this; } + + BufferStats &hold_to_dead(size_t val) { + dec_hold(val); + _dead += val; + return *this; + } + BufferStats &dec_used(size_t val) { + assert(_used >= val); + _used -= val; + return *this; + } + BufferStats &dec_hold(size_t val) { + assert(_hold >= val); + _hold -= val; + return *this; + } + BufferStats &dec_extra(size_t val) { + assert(_extra_used >= val); + assert(_extra_hold >= val); + _extra_used -= val; + _extra_hold -= val; + } + +}; + +} |