From 846907b511ccf4f2ecdc4d2b12273e6287c08575 Mon Sep 17 00:00:00 2001 From: Geir Storli Date: Mon, 10 Oct 2022 12:52:56 +0000 Subject: Implement a generic hold list for data elements associated with a generation. --- .../tests/util/generation_hold_list/CMakeLists.txt | 9 +++++ .../generation_hold_list_test.cpp | 45 ++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 vespalib/src/tests/util/generation_hold_list/CMakeLists.txt create mode 100644 vespalib/src/tests/util/generation_hold_list/generation_hold_list_test.cpp (limited to 'vespalib/src/tests') diff --git a/vespalib/src/tests/util/generation_hold_list/CMakeLists.txt b/vespalib/src/tests/util/generation_hold_list/CMakeLists.txt new file mode 100644 index 00000000000..c85b2537745 --- /dev/null +++ b/vespalib/src/tests/util/generation_hold_list/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vespalib_generation_hold_list_test_app TEST + SOURCES + generation_hold_list_test.cpp + DEPENDS + vespalib + GTest::GTest +) +vespa_add_test(NAME vespalib_generation_hold_list_test_app COMMAND vespalib_generation_hold_list_test_app) diff --git a/vespalib/src/tests/util/generation_hold_list/generation_hold_list_test.cpp b/vespalib/src/tests/util/generation_hold_list/generation_hold_list_test.cpp new file mode 100644 index 00000000000..0490a99f1e0 --- /dev/null +++ b/vespalib/src/tests/util/generation_hold_list/generation_hold_list_test.cpp @@ -0,0 +1,45 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include +#include +#include + +using vespalib::GenerationHeldBase; +using vespalib::GenerationHoldList; + +using MyElem = GenerationHeldBase; +using MyHoldList = GenerationHoldList; + +TEST(GenerationHoldListTest, holding_of_unique_ptr_elements_with_tracking_of_held_bytes) +{ + MyHoldList h; + h.insert(std::make_unique(3)); + h.assign_generation(0); + h.insert(std::make_unique(5)); + h.assign_generation(1); + h.insert(std::make_unique(7)); + h.assign_generation(2); + h.insert(std::make_unique(11)); + h.assign_generation(4); + EXPECT_EQ(3 + 5 + 7 + 11, h.get_held_bytes()); + + h.reclaim(0); + EXPECT_EQ(3 + 5 + 7 + 11, h.get_held_bytes()); + h.reclaim(1); + EXPECT_EQ(5 + 7 + 11, h.get_held_bytes()); + h.reclaim(2); + EXPECT_EQ(7 + 11, h.get_held_bytes()); + + h.insert(std::make_unique(13)); + h.assign_generation(6); + EXPECT_EQ(7 + 11 + 13, h.get_held_bytes()); + + h.reclaim(6); + EXPECT_EQ(13, h.get_held_bytes()); + h.reclaim(7); + EXPECT_EQ(0, h.get_held_bytes()); + h.reclaim(7); + EXPECT_EQ(0, h.get_held_bytes()); +} + +GTEST_MAIN_RUN_ALL_TESTS() -- cgit v1.2.3