From e47410d56c667cda9f8070a929df7a955ce13115 Mon Sep 17 00:00:00 2001 From: Douglas Rumbaugh Date: Mon, 29 May 2023 16:49:52 -0400 Subject: Framework-level query testing + fixes --- include/framework/DynamicExtension.h | 20 +++++++++++--------- include/shard/MemISAM.h | 2 +- include/shard/WIRS.h | 8 ++++---- tests/dynamic_extension_tests.cpp | 12 ++++++------ tests/wirs_tests.cpp | 10 +++++++--- 5 files changed, 29 insertions(+), 23 deletions(-) diff --git a/include/framework/DynamicExtension.h b/include/framework/DynamicExtension.h index 91d41f8..2dcbf18 100644 --- a/include/framework/DynamicExtension.h +++ b/include/framework/DynamicExtension.h @@ -142,24 +142,27 @@ public: level->get_query_states(shards, states, parms); } - std::vector*> query_results(shards.size() + 1, nullptr); + std::vector> query_results(shards.size() + 1); // Execute the query for the buffer - query_results[0] = filter_deletes(Q::buffer_query(buffer, buffer_state, parms), {-1, -1}, buffer); + auto buffer_results = Q::buffer_query(buffer, buffer_state, parms); + query_results[0] = filter_deletes(buffer_results, {-1, -1}, buffer); // Execute the query for each shard for (size_t i=0; iappend(rec, ts); } - std::vector filter_deletes(std::vector> *records, ShardID shid, Buffer *buffer) { + std::vector filter_deletes(std::vector> &records, ShardID shid, Buffer *buffer) { std::vector processed_records; - processed_records->reserve(records->size()); + processed_records.reserve(records.size()); // For delete tagging, we just need to check the delete bit on each // record. @@ -297,7 +300,6 @@ private: processed_records.emplace_back(rec.rec); } - delete records; return processed_records; } @@ -327,7 +329,7 @@ private: processed_records.emplace_back(rec.rec); } - delete records; + return processed_records; } /* diff --git a/include/shard/MemISAM.h b/include/shard/MemISAM.h index 8ac17e4..7bfbd3f 100644 --- a/include/shard/MemISAM.h +++ b/include/shard/MemISAM.h @@ -180,7 +180,7 @@ public: return m_tombstone_cnt; } - R *point_lookup(R &rec, bool filter) { + R *point_lookup(const R &rec, bool filter) { if (filter && !m_bf->lookup(rec.key)) { return nullptr; diff --git a/include/shard/WIRS.h b/include/shard/WIRS.h index 7e3f468..020df19 100644 --- a/include/shard/WIRS.h +++ b/include/shard/WIRS.h @@ -203,7 +203,7 @@ public: free_tree(m_root); } - Wrapped *point_lookup(R &rec, bool filter=false) { + Wrapped *point_lookup(const R &rec, bool filter=false) { if (filter && !m_bf->lookup(rec.key)) { return nullptr; } @@ -213,9 +213,9 @@ public: return nullptr; } - while (idx < m_reccnt && m_data[idx] < rec) ++idx; + while (idx < m_reccnt && m_data[idx].rec < rec) ++idx; - if (m_data[idx] == rec) { + if (m_data[idx].rec == rec) { return m_data + idx; } @@ -254,7 +254,7 @@ private: while (min < max) { size_t mid = (min + max) / 2; - if (key > m_data[mid].key) { + if (key > m_data[mid].rec.key) { min = mid + 1; } else { max = mid; diff --git a/tests/dynamic_extension_tests.cpp b/tests/dynamic_extension_tests.cpp index 9fdd5f9..518801a 100644 --- a/tests/dynamic_extension_tests.cpp +++ b/tests/dynamic_extension_tests.cpp @@ -149,7 +149,6 @@ START_TEST(t_range_sample_memlevels) END_TEST */ -/* START_TEST(t_range_sample_weighted) { auto ext_wirs = new DE(100, 2, 1); @@ -196,6 +195,7 @@ START_TEST(t_range_sample_weighted) uint64_t upper_key = 5; size_t cnt[3] = {0}; + size_t total_samples = 0; for (size_t i=0; i<1000; i++) { wirs_query_parms p; p.lower_bound = lower_key; @@ -203,20 +203,20 @@ START_TEST(t_range_sample_weighted) p.sample_size = k; auto result = ext_wirs->query(&p); + total_samples += result.size(); - for (size_t j=0; j parms = {lower_key, upper_key, k}; parms.rng = gsl_rng_alloc(gsl_rng_mt19937); + size_t total_samples = 0; + for (size_t i=0; i<1000; i++) { auto state = WIRSQuery::get_buffer_query_state(buffer, &parms); auto result = WIRSQuery::buffer_query(buffer, state, &parms); + total_samples += result.size(); + for (size_t j=0; j::delete_buffer_query_state(state); } - ck_assert(roughly_equal(cnt[0] / 1000, (double) k/4.0, k, .05)); - ck_assert(roughly_equal(cnt[1] / 1000, (double) k/4.0, k, .05)); - ck_assert(roughly_equal(cnt[2] / 1000, (double) k/2.0, k, .05)); + ck_assert(roughly_equal(cnt[0] / total_samples, (double) k/4.0, k, .05)); + ck_assert(roughly_equal(cnt[1] / total_samples, (double) k/4.0, k, .05)); + ck_assert(roughly_equal(cnt[2] / total_samples, (double) k/2.0, k, .05)); gsl_rng_free(parms.rng); delete buffer; -- cgit v1.2.3