summaryrefslogtreecommitdiffstats
path: root/tests/alias_tests.cpp
diff options
context:
space:
mode:
authorDouglas Rumbaugh <dbr4@psu.edu>2024-02-07 17:23:23 -0500
committerDouglas Rumbaugh <dbr4@psu.edu>2024-02-07 17:24:50 -0500
commitbd74e27b28bd95267ce50d2e4b6f12b51d9b6aae (patch)
tree8e40038feaa9c83c4da967ab78564c51fc67a653 /tests/alias_tests.cpp
parent2c5d549b3618b9ea72e6eece4cb4f3da5a6811a8 (diff)
downloaddynamic-extension-bd74e27b28bd95267ce50d2e4b6f12b51d9b6aae.tar.gz
Cleaned up shard files (except VPTree)
Cleaned up shard implementations, fixed a few bugs, and set up some tests. There's still some work to be done in creating tests for the weighted sampling operations for the alias and aug btree shards.
Diffstat (limited to 'tests/alias_tests.cpp')
-rw-r--r--tests/alias_tests.cpp352
1 files changed, 11 insertions, 341 deletions
diff --git a/tests/alias_tests.cpp b/tests/alias_tests.cpp
index e3c736b..98d0c63 100644
--- a/tests/alias_tests.cpp
+++ b/tests/alias_tests.cpp
@@ -12,358 +12,27 @@
#include "shard/Alias.h"
#include "query/wss.h"
-#include "testing.h"
+#include "framework/structure/MutableBuffer.h"
+#include "include/testing.h"
+
#include <check.h>
using namespace de;
-typedef Alias<WRec> Shard;
-
-START_TEST(t_mbuffer_init)
-{
- auto buffer = new MutableBuffer<WRec>(1024, 1024);
- for (uint64_t i = 512; i > 0; i--) {
- uint32_t v = i;
- buffer->append({i,v, 1});
- }
-
- for (uint64_t i = 1; i <= 256; ++i) {
- uint32_t v = i;
- buffer->append({i, v, 1}, true);
- }
-
- for (uint64_t i = 257; i <= 512; ++i) {
- uint32_t v = i + 1;
- buffer->append({i, v, 1});
- }
-
- Shard* shard = new Shard(buffer);
- ck_assert_uint_eq(shard->get_record_count(), 512);
-
- delete buffer;
- delete shard;
-}
-
-
-START_TEST(t_alias_init)
-{
- size_t n = 512;
- auto mbuffer1 = create_test_mbuffer<WRec>(n);
- auto mbuffer2 = create_test_mbuffer<WRec>(n);
- auto mbuffer3 = create_test_mbuffer<WRec>(n);
-
- auto shard1 = new Shard(mbuffer1);
- auto shard2 = new Shard(mbuffer2);
- auto shard3 = new Shard(mbuffer3);
-
- Shard* shards[3] = {shard1, shard2, shard3};
- auto shard4 = new Shard(shards, 3);
-
- ck_assert_int_eq(shard4->get_record_count(), n * 3);
- ck_assert_int_eq(shard4->get_tombstone_count(), 0);
-
- size_t total_cnt = 0;
- size_t shard1_idx = 0;
- size_t shard2_idx = 0;
- size_t shard3_idx = 0;
-
- for (size_t i = 0; i < shard4->get_record_count(); ++i) {
- auto rec1 = shard1->get_record_at(shard1_idx);
- auto rec2 = shard2->get_record_at(shard2_idx);
- auto rec3 = shard3->get_record_at(shard3_idx);
-
- auto cur_rec = shard4->get_record_at(i);
-
- if (shard1_idx < n && cur_rec->rec == rec1->rec) {
- ++shard1_idx;
- } else if (shard2_idx < n && cur_rec->rec == rec2->rec) {
- ++shard2_idx;
- } else if (shard3_idx < n && cur_rec->rec == rec3->rec) {
- ++shard3_idx;
- } else {
- assert(false);
- }
- }
-
- delete mbuffer1;
- delete mbuffer2;
- delete mbuffer3;
-
- delete shard1;
- delete shard2;
- delete shard3;
- delete shard4;
-}
-
-
-START_TEST(t_point_lookup)
-{
- size_t n = 10000;
-
- auto buffer = create_double_seq_mbuffer<WRec>(n, false);
- auto alias = Shard(buffer);
-
- for (size_t i=0; i<n; i++) {
- WRec r;
- auto rec = (buffer->get_data() + i);
- r.key = rec->rec.key;
- r.value = rec->rec.value;
-
- auto result = alias.point_lookup(r);
- ck_assert_ptr_nonnull(result);
- ck_assert_int_eq(result->rec.key, r.key);
- ck_assert_int_eq(result->rec.value, r.value);
- }
-
- delete buffer;
-}
-END_TEST
-
-
-START_TEST(t_point_lookup_miss)
-{
- size_t n = 10000;
-
- auto buffer = create_double_seq_mbuffer<WRec>(n, false);
- auto alias = Shard(buffer);
-
- for (size_t i=n + 100; i<2*n; i++) {
- WRec r;
- r.key = i;
- r.value = i;
-
- auto result = alias.point_lookup(r);
- ck_assert_ptr_null(result);
- }
-
- delete buffer;
-}
-
-START_TEST(t_full_cancelation)
-{
- size_t n = 100;
- auto buffer = create_double_seq_mbuffer<WRec>(n, false);
- auto buffer_ts = create_double_seq_mbuffer<WRec>(n, true);
-
- Shard* shard = new Shard(buffer);
- Shard* shard_ts = new Shard(buffer_ts);
-
- ck_assert_int_eq(shard->get_record_count(), n);
- ck_assert_int_eq(shard->get_tombstone_count(), 0);
- ck_assert_int_eq(shard_ts->get_record_count(), n);
- ck_assert_int_eq(shard_ts->get_tombstone_count(), n);
-
- Shard* shards[] = {shard, shard_ts};
-
- Shard* merged = new Shard(shards, 2);
-
- ck_assert_int_eq(merged->get_tombstone_count(), 0);
- ck_assert_int_eq(merged->get_record_count(), 0);
-
- delete buffer;
- delete buffer_ts;
- delete shard;
- delete shard_ts;
- delete merged;
-}
-END_TEST
-
-
-START_TEST(t_alias_query)
-{
- size_t n=1000;
- auto buffer = create_weighted_mbuffer<WRec>(n);
-
- Shard* shard = new Shard(buffer);
-
- size_t k = 1000;
-
- size_t cnt[3] = {0};
- wss::Parms<WRec> parms = {k};
- parms.rng = gsl_rng_alloc(gsl_rng_mt19937);
-
- size_t total_samples = 0;
-
- for (size_t i=0; i<1000; i++) {
- auto state = wss::Query<Shard, WRec>::get_query_state(shard, &parms);
- ((wss::State<WRec> *) state)->sample_size = k;
- auto result = wss::Query<Shard, WRec>::query(shard, state, &parms);
-
- total_samples += result.size();
+typedef WRec R;
+typedef Alias<R> Shard;
- for (size_t j=0; j<result.size(); j++) {
- cnt[result[j].rec.key - 1]++;
- }
-
- wss::Query<Shard, WRec>::delete_query_state(state);
- }
-
- ck_assert(roughly_equal(cnt[0], (double) total_samples/4.0, total_samples, .05));
- ck_assert(roughly_equal(cnt[1], (double) total_samples/4.0, total_samples, .05));
- ck_assert(roughly_equal(cnt[2], (double) total_samples/2.0, total_samples, .05));
-
- gsl_rng_free(parms.rng);
- delete shard;
- delete buffer;
-}
-END_TEST
-
-
-START_TEST(t_alias_query_merge)
-{
- size_t n=1000;
- auto buffer = create_weighted_mbuffer<WRec>(n);
-
- Shard* shard = new Shard(buffer);
-
- uint64_t lower_key = 0;
- uint64_t upper_key = 5;
-
- size_t k = 1000;
-
- size_t cnt[3] = {0};
- wss::Parms<WRec> parms = {k};
- parms.rng = gsl_rng_alloc(gsl_rng_mt19937);
-
- std::vector<std::vector<Wrapped<WRec>>> results(2);
-
- for (size_t i=0; i<1000; i++) {
- auto state1 = wss::Query<Shard, WRec>::get_query_state(shard, &parms);
- ((wss::State<WRec> *) state1)->sample_size = k;
- results[0] = wss::Query<Shard, WRec>::query(shard, state1, &parms);
-
- auto state2 = wss::Query<Shard, WRec>::get_query_state(shard, &parms);
- ((wss::State<WRec> *) state2)->sample_size = k;
- results[1] = wss::Query<Shard, WRec>::query(shard, state2, &parms);
-
- wss::Query<Shard, WRec>::delete_query_state(state1);
- wss::Query<Shard, WRec>::delete_query_state(state2);
- }
-
- auto merged = wss::Query<Shard, WRec>::merge(results, nullptr);
-
- ck_assert_int_eq(merged.size(), 2*k);
- for (size_t i=0; i<merged.size(); i++) {
- ck_assert_int_ge(merged[i].key, lower_key);
- ck_assert_int_le(merged[i].key, upper_key);
- }
-
- gsl_rng_free(parms.rng);
- delete shard;
- delete buffer;
-}
-END_TEST
-
-
-START_TEST(t_alias_buffer_query_scan)
-{
- size_t n=1000;
- auto buffer = create_weighted_mbuffer<WRec>(n);
-
- uint64_t lower_key = 0;
- uint64_t upper_key = 5;
-
- size_t k = 1000;
-
- size_t cnt[3] = {0};
- wss::Parms<WRec> parms = {k};
- parms.rng = gsl_rng_alloc(gsl_rng_mt19937);
-
- size_t total_samples = 0;
-
- for (size_t i=0; i<1000; i++) {
- auto state = wss::Query<Shard, WRec, false>::get_buffer_query_state(buffer, &parms);
- ((wss::BufferState<WRec> *) state)->sample_size = k;
- auto result = wss::Query<Shard, WRec, false>::buffer_query(buffer, state, &parms);
- total_samples += result.size();
-
- for (size_t j=0; j<result.size(); j++) {
- cnt[result[j].rec.key - 1]++;
- }
-
- wss::Query<Shard, WRec, false>::delete_buffer_query_state(state);
- }
-
- ck_assert(roughly_equal(cnt[0], (double) total_samples/4.0, total_samples, .05));
- ck_assert(roughly_equal(cnt[1], (double) total_samples/4.0, total_samples, .05));
- ck_assert(roughly_equal(cnt[2], (double) total_samples/2.0, total_samples, .05));
-
- gsl_rng_free(parms.rng);
- delete buffer;
-}
-END_TEST
-
-
-START_TEST(t_alias_buffer_query_rejection)
-{
- size_t n=1000;
- auto buffer = create_weighted_mbuffer<WRec>(n);
-
- uint64_t lower_key = 0;
- uint64_t upper_key = 5;
-
- size_t k = 1000;
-
- size_t cnt[3] = {0};
- wss::Parms<WRec> parms = {k};
- parms.rng = gsl_rng_alloc(gsl_rng_mt19937);
-
- size_t total_samples = 0;
-
- for (size_t i=0; i<1000; i++) {
- auto state = wss::Query<Shard, WRec>::get_buffer_query_state(buffer, &parms);
- ((wss::BufferState<WRec> *) state)->sample_size = k;
- auto result = wss::Query<Shard, WRec>::buffer_query(buffer, state, &parms);
-
- total_samples += result.size();
-
- for (size_t j=0; j<result.size(); j++) {
- cnt[result[j].rec.key - 1]++;
- }
-
- wss::Query<Shard, WRec>::delete_buffer_query_state(state);
- }
-
- ck_assert(roughly_equal(cnt[0], (double) total_samples/4.0, total_samples, .1));
- ck_assert(roughly_equal(cnt[1], (double) total_samples/4.0, total_samples, .1));
- ck_assert(roughly_equal(cnt[2], (double) total_samples/2.0, total_samples, .1));
-
- gsl_rng_free(parms.rng);
- delete buffer;
-}
-END_TEST
+#include "include/shard_standard.h"
+#include "include/rangequery.h"
Suite *unit_testing()
{
- Suite *unit = suite_create("Alias Shard Unit Testing");
-
- TCase *create = tcase_create("de::Alias constructor Testing");
- tcase_add_test(create, t_mbuffer_init);
- tcase_add_test(create, t_alias_init);
- tcase_set_timeout(create, 100);
- suite_add_tcase(unit, create);
-
+ Suite *unit = suite_create("ISAMTree Shard Unit Testing");
- TCase *tombstone = tcase_create("de:Alias::tombstone cancellation Testing");
- tcase_add_test(tombstone, t_full_cancelation);
- suite_add_tcase(unit, tombstone);
-
-
- TCase *lookup = tcase_create("de:Alias:point_lookup Testing");
- tcase_add_test(lookup, t_point_lookup);
- tcase_add_test(lookup, t_point_lookup_miss);
- suite_add_tcase(unit, lookup);
-
-
-
- TCase *sampling = tcase_create("de:Alias::AliasQuery Testing");
- tcase_add_test(sampling, t_alias_query);
- tcase_add_test(sampling, t_alias_query_merge);
- tcase_add_test(sampling, t_alias_buffer_query_rejection);
- tcase_add_test(sampling, t_alias_buffer_query_scan);
- suite_add_tcase(unit, sampling);
+ inject_rangequery_tests(unit);
+ inject_shard_tests(unit);
return unit;
}
@@ -389,3 +58,4 @@ int main()
return (unit_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
}
+