From d47eeea719448f649e93b6a9ec7593b4cb2fb40e Mon Sep 17 00:00:00 2001 From: Douglas Rumbaugh Date: Mon, 5 Jun 2023 14:25:19 -0400 Subject: Added TrieSpline and PGM Range queries + tests and bugfixes --- tests/pgm_tests.cpp | 59 ++++++++++++++++++++++++++++++++++++++++ tests/testing.h | 21 +++++++++++++++ tests/triespline_tests.cpp | 67 +++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 144 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/pgm_tests.cpp b/tests/pgm_tests.cpp index 33979ae..254de03 100644 --- a/tests/pgm_tests.cpp +++ b/tests/pgm_tests.cpp @@ -139,6 +139,60 @@ START_TEST(t_point_lookup_miss) } +START_TEST(t_range_query) +{ + auto buffer = create_sequential_mbuffer(100, 1000); + auto shard = Shard(buffer); + + pgm_range_query_parms parms; + parms.lower_bound = 300; + parms.upper_bound = 500; + + auto state = PGMRangeQuery::get_query_state(&shard, &parms); + auto result = PGMRangeQuery::query(&shard, state, &parms); + PGMRangeQuery::delete_query_state(state); + + ck_assert_int_eq(result.size(), parms.upper_bound - parms.lower_bound + 1); + for (size_t i=0; i(100, 1000); + + pgm_range_query_parms parms; + parms.lower_bound = 300; + parms.upper_bound = 500; + + auto state = PGMRangeQuery::get_buffer_query_state(buffer, &parms); + auto result = PGMRangeQuery::buffer_query(buffer, state, &parms); + PGMRangeQuery::delete_buffer_query_state(state); + + ck_assert_int_eq(result.size(), parms.upper_bound - parms.lower_bound + 1); + for (size_t i=0; i *create_test_mbuffer(size_t cnt) return buffer; } +template +static de::MutableBuffer *create_sequential_mbuffer(decltype(R::key) start, decltype(R::key) stop) +{ + size_t cnt = stop - start; + auto buffer = new de::MutableBuffer(cnt, true, cnt); + + for (size_t i=start; i) { + rec.weight = 1; + } + + buffer->append(rec); + } + + return buffer; +} + template static de::MutableBuffer *create_test_mbuffer_tombstones(size_t cnt, size_t ts_cnt) { diff --git a/tests/triespline_tests.cpp b/tests/triespline_tests.cpp index 982be79..d88d4b1 100644 --- a/tests/triespline_tests.cpp +++ b/tests/triespline_tests.cpp @@ -1,5 +1,5 @@ /* - * tests/irs_tests.cpp + * tests/triespline_tests.cpp * * Unit tests for TrieSpline (Augmented B+Tree) shard * @@ -45,7 +45,7 @@ START_TEST(t_mbuffer_init) } -START_TEST(t_irs_init) +START_TEST(t_init) { size_t n = 512; auto mbuffer1 = create_test_mbuffer(n); @@ -169,13 +169,67 @@ START_TEST(t_full_cancelation) END_TEST +START_TEST(t_range_query) +{ + auto buffer = create_sequential_mbuffer(100, 1000); + auto shard = Shard(buffer); + + ts_range_query_parms parms; + parms.lower_bound = 300; + parms.upper_bound = 500; + + auto state = TrieSplineRangeQuery::get_query_state(&shard, &parms); + auto result = TrieSplineRangeQuery::query(&shard, state, &parms); + TrieSplineRangeQuery::delete_query_state(state); + + ck_assert_int_eq(result.size(), parms.upper_bound - parms.lower_bound + 1); + for (size_t i=0; i(100, 1000); + + ts_range_query_parms parms; + parms.lower_bound = 300; + parms.upper_bound = 500; + + auto state = TrieSplineRangeQuery::get_buffer_query_state(buffer, &parms); + auto result = TrieSplineRangeQuery::buffer_query(buffer, state, &parms); + TrieSplineRangeQuery::delete_buffer_query_state(state); + + ck_assert_int_eq(result.size(), parms.upper_bound - parms.lower_bound + 1); + for (size_t i=0; i