diff options
| author | Douglas Rumbaugh <dbr4@psu.edu> | 2024-01-12 14:08:33 -0500 |
|---|---|---|
| committer | Douglas Rumbaugh <dbr4@psu.edu> | 2024-01-12 14:09:45 -0500 |
| commit | c4514c2e62a711189cf3c914297885d97fb51a09 (patch) | |
| tree | 9cea57c0ce23c6fdaf627495c7bd4f4f8dc9019d /tests/memisam_tests.cpp | |
| parent | 3a89d7f6ea2679ff7b9bb1e3c37da9480be6c115 (diff) | |
| download | dynamic-extension-c4514c2e62a711189cf3c914297885d97fb51a09.tar.gz | |
Initial pass at unit test refactoring
Restructured unit tests to be a bit more modular. I have some further
plans to expand on this, particular for the query tests (including both
shard and framework level test functions that can be injected at will).
Diffstat (limited to 'tests/memisam_tests.cpp')
| -rw-r--r-- | tests/memisam_tests.cpp | 348 |
1 files changed, 7 insertions, 341 deletions
diff --git a/tests/memisam_tests.cpp b/tests/memisam_tests.cpp index 919fd69..b398524 100644 --- a/tests/memisam_tests.cpp +++ b/tests/memisam_tests.cpp @@ -11,359 +11,25 @@ */ #include "shard/ISAMTree.h" +#include "include/testing.h" #include "query/rangequery.h" -#include "testing.h" - #include <check.h> -using namespace de; - -typedef ISAMTree<Rec> Shard; - -START_TEST(t_mbuffer_init) -{ - auto buffer = new MutableBuffer<Rec>(512, 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->get_buffer_view()); - ck_assert_uint_eq(shard->get_record_count(), 512); - - delete buffer; - delete shard; -} - - -START_TEST(t_rq_init) -{ - size_t n = 512; - auto mbuffer1 = create_test_mbuffer<Rec>(n); - auto mbuffer2 = create_test_mbuffer<Rec>(n); - auto mbuffer3 = create_test_mbuffer<Rec>(n); - - auto shard1 = new Shard(mbuffer1->get_buffer_view()); - auto shard2 = new Shard(mbuffer2->get_buffer_view()); - auto shard3 = new Shard(mbuffer3->get_buffer_view()); - - 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<Rec>(n, false); - auto isam = Shard(buffer->get_buffer_view()); - - { - auto view = buffer->get_buffer_view(); - - for (size_t i=0; i<n; i++) { - Rec r; - auto rec = view.get(i); - r.key = rec->rec.key; - r.value = rec->rec.value; - - auto result = isam.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<Rec>(n, false); - auto isam = Shard(buffer->get_buffer_view()); - - for (size_t i=n + 100; i<2*n; i++) { - Rec r; - r.key = i; - r.value = i; - - auto result = isam.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<Rec>(n, false); - auto buffer_ts = create_double_seq_mbuffer<Rec>(n, true); - - Shard* shard = new Shard(buffer->get_buffer_view()); - Shard* shard_ts = new Shard(buffer_ts->get_buffer_view()); - - 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_rq_query) -{ - size_t n=1000; - auto buffer = create_double_seq_mbuffer<Rec>(n); - auto isam = Shard(buffer->get_buffer_view()); - - uint64_t lower_key = 100; - uint64_t upper_key = 250; - size_t k = 100; - size_t cnt[3] = {0}; - rq::Parms<Rec> 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 = rq::Query<Shard, Rec, false>::get_query_state(&isam, &parms); - ((rq::State<WRec> *) state)->sample_size = k; - auto result = rq::Query<Shard, Rec, false>::query(&isam, state, &parms); - - ck_assert_int_eq(result.size(), k); - - for (auto &rec : result) { - ck_assert_int_le(rec.rec.key, upper_key); - ck_assert_int_ge(rec.rec.key, lower_key); - } - - rq::Query<Shard, Rec, false>::delete_query_state(state); - } - - gsl_rng_free(parms.rng); - delete buffer; -} -END_TEST - - -START_TEST(t_rq_query_merge) -{ - size_t n=1000; - auto buffer = create_double_seq_mbuffer<Rec>(n); - - Shard shard = Shard(buffer->get_buffer_view()); - - uint64_t lower_key = 100; - uint64_t upper_key = 250; - - size_t k = 1000; - - size_t cnt[3] = {0}; - rq::Parms<Rec> parms = {lower_key, upper_key, k}; - parms.rng = gsl_rng_alloc(gsl_rng_mt19937); - - std::vector<std::vector<de::Wrapped<Rec>>> results(2); - - for (size_t i=0; i<1000; i++) { - auto state1 = rq::Query<Shard, Rec>::get_query_state(&shard, &parms); - ((rq::State<WRec> *) state1)->sample_size = k; - results[0] = rq::Query<Shard, Rec>::query(&shard, state1, &parms); - - auto state2 = rq::Query<Shard, Rec>::get_query_state(&shard, &parms); - ((rq::State<WRec> *) state2)->sample_size = k; - results[1] = rq::Query<Shard, Rec>::query(&shard, state2, &parms); - - rq::Query<Shard, Rec>::delete_query_state(state1); - rq::Query<Shard, Rec>::delete_query_state(state2); - } - - auto merged = rq::Query<Shard, Rec>::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 buffer; -} -END_TEST - - -START_TEST(t_rq_buffer_query_scan) -{ - size_t n=1000; - auto buffer = create_double_seq_mbuffer<Rec>(n); - - uint64_t lower_key = 100; - uint64_t upper_key = 250; - - size_t k = 100; - - size_t cnt[3] = {0}; - rq::Parms<Rec> 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 = rq::Query<Shard, Rec, false>::get_buffer_query_state(buffer, &parms); - ((rq::BufferState<WRec> *) state)->sample_size = k; - auto result = rq::Query<Shard, Rec, false>::buffer_query(buffer, state, &parms); - - ck_assert_int_eq(result.size(), k); - - for (auto &rec : result) { - ck_assert_int_le(rec.rec.key, upper_key); - ck_assert_int_ge(rec.rec.key, lower_key); - } - - rq::Query<Shard, Rec, false>::delete_buffer_query_state(state); - } - - gsl_rng_free(parms.rng); - delete buffer; -} -END_TEST - - -START_TEST(t_rq_buffer_query_rejection) -{ - size_t n=1000; - auto buffer = create_double_seq_mbuffer<Rec>(n); - - uint64_t lower_key = 100; - uint64_t upper_key = 250; - - size_t k = 10000; - - size_t cnt[3] = {0}; - rq::Parms<Rec> 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 = rq::Query<Shard, Rec>::get_buffer_query_state(buffer, &parms); - ((rq::BufferState<WRec> *) state)->sample_size = k; - auto result = rq::Query<Shard, Rec>::buffer_query(buffer, state, &parms); - - ck_assert_int_gt(result.size(), 0); - ck_assert_int_le(result.size(), k); - - for (auto &rec : result) { - ck_assert_int_le(rec.rec.key, upper_key); - ck_assert_int_ge(rec.rec.key, lower_key); - } - - rq::Query<Shard, Rec>::delete_buffer_query_state(state); - } +using namespace de; - gsl_rng_free(parms.rng); - delete buffer; -} -END_TEST -*/ +typedef ISAMTree<Rec> Shard; +#include "include/shard_standard.h" +#include "include/rangequery.h" Suite *unit_testing() { Suite *unit = suite_create("ISAMTree Shard Unit Testing"); - TCase *create = tcase_create("de::ISAMTree constructor Testing"); - tcase_add_test(create, t_mbuffer_init); - tcase_add_test(create, t_rq_init); - tcase_set_timeout(create, 100); - suite_add_tcase(unit, create); - - - TCase *tombstone = tcase_create("de:ISAMTree::tombstone cancellation Testing"); - tcase_add_test(tombstone, t_full_cancelation); - suite_add_tcase(unit, tombstone); - - - TCase *lookup = tcase_create("de:ISAMTree: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:ISAMTree::IRS Testing"); - tcase_add_test(sampling, t_rq_query); - tcase_add_test(sampling, t_rq_query_merge); - tcase_add_test(sampling, t_rq_buffer_query_rejection); - tcase_add_test(sampling, t_rq_buffer_query_scan); - tcase_set_timeout(sampling, 100); - suite_add_tcase(unit, sampling); - */ + inject_rangequery_tests(unit); + inject_shard_tests(unit); return unit; } |