aboutsummaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2019-08-15 15:48:43 +0200
committerTor Egge <Tor.Egge@broadpark.no>2019-08-15 15:48:43 +0200
commitf70d4cece53a9d49001656528530747f4a3ba8f3 (patch)
tree9fa8c1be1d05dacdbd2168799fe387bf1baa7ef5 /vespalib
parent4f8faeef83a649be7ccdf61bf13d4d09cd7d622b (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.cpp57
-rw-r--r--vespalib/src/vespa/vespalib/test/datastore/buffer_stats.h52
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;
+ }
+
+};
+
+}