From 377665b6710e6f856f6af48aef8d813ea151c4d6 Mon Sep 17 00:00:00 2001 From: Harpreet Sangar Date: Wed, 31 May 2023 10:19:19 +0530 Subject: [PATCH] Add `MultivalueData` test. --- test/numeric_range_trie_test.cpp | 111 ++++++++++++++++++++++++++++++- 1 file changed, 110 insertions(+), 1 deletion(-) diff --git a/test/numeric_range_trie_test.cpp b/test/numeric_range_trie_test.cpp index 875ed544..ae59589b 100644 --- a/test/numeric_range_trie_test.cpp +++ b/test/numeric_range_trie_test.cpp @@ -357,7 +357,106 @@ TEST_F(NumericRangeTrieTest, SearchLesser) { } } -TEST_F(NumericRangeTrieTest, Validation) { +TEST_F(NumericRangeTrieTest, MultivalueData) { + auto trie = new NumericTrie(); + std::unique_ptr trie_guard(trie); + std::vector> pairs = { + {-0x202020, 32}, + {-32768, 5}, + {-32768, 8}, + {-24576, 32}, + {-16384, 35}, + {-8192, 43}, + {0, 43}, + {0, 49}, + {1, 8}, + {256, 91}, + {8192, 49}, + {16384, 56}, + {24576, 58}, + {32768, 91}, + {0x202020, 35}, + }; + + for (auto const& pair: pairs) { + trie->insert(pair.first, pair.second); + } + + uint32_t* ids = nullptr; + uint32_t ids_length = 0; + + trie->search_lesser(0, false, ids, ids_length); + std::unique_ptr ids_guard(ids); + + std::vector expected = {5, 8, 32, 35, 43}; + + ASSERT_EQ(5, ids_length); + for (uint32_t i = 0; i < ids_length; i++) { + ASSERT_EQ(expected[i], ids[i]); + } + + trie->search_lesser(-16380, false, ids, ids_length); + ids_guard.reset(ids); + + ASSERT_EQ(4, ids_length); + + expected = {5, 8, 32, 35}; + for (uint32_t i = 0; i < ids_length; i++) { + ASSERT_EQ(expected[i], ids[i]); + } + + trie->search_lesser(16384, false, ids, ids_length); + ids_guard.reset(ids); + + ASSERT_EQ(7, ids_length); + + expected = {5, 8, 32, 35, 43, 49, 91}; + for (uint32_t i = 0; i < ids_length; i++) { + ASSERT_EQ(expected[i], ids[i]); + } + + trie->search_greater(0, true, ids, ids_length); + ids_guard.reset(ids); + + ASSERT_EQ(7, ids_length); + + expected = {8, 35, 43, 49, 56, 58, 91}; + for (uint32_t i = 0; i < ids_length; i++) { + ASSERT_EQ(expected[i], ids[i]); + } + + trie->search_greater(256, true, ids, ids_length); + ids_guard.reset(ids); + + ASSERT_EQ(5, ids_length); + + expected = {35, 49, 56, 58, 91}; + for (uint32_t i = 0; i < ids_length; i++) { + ASSERT_EQ(expected[i], ids[i]); + } + + trie->search_greater(-32768, true, ids, ids_length); + ids_guard.reset(ids); + + ASSERT_EQ(9, ids_length); + + expected = {5, 8, 32, 35, 43, 49, 56, 58, 91}; + for (uint32_t i = 0; i < ids_length; i++) { + ASSERT_EQ(expected[i], ids[i]); + } + + trie->search_range(-32768, true, 0, true, ids, ids_length); + ids_guard.reset(ids); + + ASSERT_EQ(6, ids_length); + + expected = {5, 8, 32, 35, 43, 49}; + for (uint32_t i = 0; i < ids_length; i++) { + ASSERT_EQ(expected[i], ids[i]); + } +} + +TEST_F(NumericRangeTrieTest, EmptyTrieOperations) { auto trie = new NumericTrie(); std::unique_ptr trie_guard(trie); @@ -369,6 +468,16 @@ TEST_F(NumericRangeTrieTest, Validation) { ASSERT_EQ(0, ids_length); + trie->search_range(-32768, true, -1, true, ids, ids_length); + ids_guard.reset(ids); + + ASSERT_EQ(0, ids_length); + + trie->search_range(1, true, 32768, true, ids, ids_length); + ids_guard.reset(ids); + + ASSERT_EQ(0, ids_length); + trie->search_greater(0, true, ids, ids_length); ids_guard.reset(ids);