summaryrefslogtreecommitdiffstats
path: root/tests/memisam_tests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/memisam_tests.cpp')
-rw-r--r--tests/memisam_tests.cpp348
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;
}