diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/include/shard_standard.h | 16 | ||||
| -rw-r--r-- | tests/include/testing.h | 59 | ||||
| -rw-r--r-- | tests/vptree_tests.cpp | 94 |
3 files changed, 87 insertions, 82 deletions
diff --git a/tests/include/shard_standard.h b/tests/include/shard_standard.h index f50c1cb..7d17dcb 100644 --- a/tests/include/shard_standard.h +++ b/tests/include/shard_standard.h @@ -22,18 +22,22 @@ * should be included in the source file that includes this one, above the * include statement. */ -//#include "shard/ISAMTree.h" -//#include "testing.h" -//#include <check.h> -//using namespace de; -//typedef ISAMTree<R> Shard; +/* +#include "shard/ISAMTree.h" +#include "shard/ISAMTree.h" +#include "testing.h" +#include <check.h> +using namespace de; +typedef Rec R; +typedef ISAMTree<R> Shard; +*/ START_TEST(t_mbuffer_init) { auto buffer = new MutableBuffer<R>(512, 1024); for (uint64_t i = 512; i > 0; i--) { uint32_t v = i; - buffer->append({i,v, 1}); + buffer->append({i, v, 1}); } for (uint64_t i = 1; i <= 256; ++i) { diff --git a/tests/include/testing.h b/tests/include/testing.h index 4e660dd..f935b53 100644 --- a/tests/include/testing.h +++ b/tests/include/testing.h @@ -23,7 +23,7 @@ typedef de::WeightedRecord<uint64_t, uint32_t, uint64_t> WRec; typedef de::Record<uint64_t, uint32_t> Rec; -typedef de::EuclidPoint<int64_t> PRec; +typedef de::EuclidPoint<uint64_t> PRec; template <de::RecordInterface R> std::vector<R> strip_wrapping(std::vector<de::Wrapped<R>> vec) { @@ -76,55 +76,48 @@ static bool roughly_equal(int n1, int n2, size_t mag, double epsilon) { return ((double) std::abs(n1 - n2) / (double) mag) < epsilon; } -static de::MutableBuffer<PRec> *create_2d_mbuffer(size_t cnt) { - auto buffer = new de::MutableBuffer<PRec>(cnt/2, cnt); - - for (int64_t i=0; i<cnt; i++) { - buffer->append({rand(), rand()}); - } - - return buffer; -} - -static de::MutableBuffer<PRec> *create_2d_sequential_mbuffer(size_t cnt) { - auto buffer = new de::MutableBuffer<PRec>(cnt/2, cnt); - for (int64_t i=0; i<cnt; i++) { - buffer->append({i, i}); - } - - return buffer; -} - -template <de::KVPInterface R> +template <de::RecordInterface R> static de::MutableBuffer<R> *create_test_mbuffer(size_t cnt) { auto buffer = new de::MutableBuffer<R>(cnt/2, cnt); R rec; - for (size_t i = 0; i < cnt; i++) { - rec.key = rand(); - rec.value = rand(); + if constexpr (de::KVPInterface<R>) { + for (size_t i = 0; i < cnt; i++) { + rec.key = rand(); + rec.value = rand(); - if constexpr (de::WeightedRecordInterface<R>) { - rec.weight = 1; - } + if constexpr (de::WeightedRecordInterface<R>) { + rec.weight = 1; + } - buffer->append(rec); - } + buffer->append(rec); + } + } else if constexpr (de::NDRecordInterface<R>) { + for (size_t i=0; i<cnt; i++) { + uint64_t a = rand(); + uint64_t b = rand(); + buffer->append({a, b}); + } + } return buffer; } -template <de::KVPInterface R> -static de::MutableBuffer<R> *create_sequential_mbuffer(decltype(R::key) start, decltype(R::key) stop) +template <de::RecordInterface R> +static de::MutableBuffer<R> *create_sequential_mbuffer(size_t start, size_t stop) { size_t cnt = stop - start; auto buffer = new de::MutableBuffer<R>(cnt/2, cnt); for (size_t i=start; i<stop; i++) { R rec; - rec.key = i; - rec.value = i; + if constexpr (de::KVPInterface<R>) { + rec.key = i; + rec.value = i; + } else if constexpr (de::NDRecordInterface<R>) { + rec = {i, i}; + } if constexpr (de::WeightedRecordInterface<R>) { rec.weight = 1; diff --git a/tests/vptree_tests.cpp b/tests/vptree_tests.cpp index fb568dd..ff99ba6 100644 --- a/tests/vptree_tests.cpp +++ b/tests/vptree_tests.cpp @@ -9,27 +9,28 @@ * */ + +#include "include/testing.h" #include "shard/VPTree.h" -#include "testing.h" -#include "vptree.hpp" +#include "query/knn.h" #include <check.h> using namespace de; - -typedef VPTree<PRec> Shard; +typedef PRec R; +typedef VPTree<R> Shard; START_TEST(t_mbuffer_init) { size_t n= 24; - auto buffer = new MutableBuffer<PRec>(n, n); + auto buffer = new MutableBuffer<PRec>(n/2, n); for (int64_t i=0; i<n; i++) { - buffer->append({i, i}); + buffer->append({(uint64_t) i, (uint64_t) i}); } - Shard* shard = new Shard(buffer); + Shard* shard = new Shard(buffer->get_buffer_view()); ck_assert_uint_eq(shard->get_record_count(), n); delete buffer; @@ -40,16 +41,16 @@ START_TEST(t_mbuffer_init) START_TEST(t_wss_init) { size_t n = 512; - auto mbuffer1 = create_2d_mbuffer(n); - auto mbuffer2 = create_2d_mbuffer(n); - auto mbuffer3 = create_2d_mbuffer(n); + auto mbuffer1 = create_test_mbuffer<R>(n); + auto mbuffer2 = create_test_mbuffer<R>(n); + auto mbuffer3 = create_test_mbuffer<R>(n); - auto shard1 = new Shard(mbuffer1); - auto shard2 = new Shard(mbuffer2); - auto shard3 = new Shard(mbuffer3); + 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); + std::vector<Shard *> shards = {shard1, shard2, shard3}; + auto shard4 = new Shard(shards); ck_assert_int_eq(shard4->get_record_count(), n * 3); ck_assert_int_eq(shard4->get_tombstone_count(), 0); @@ -69,19 +70,23 @@ START_TEST(t_point_lookup) { size_t n = 16; - auto buffer = create_2d_sequential_mbuffer(n); - auto wss = Shard(buffer); + auto buffer = create_sequential_mbuffer<R>(0, n); + auto wss = Shard(buffer->get_buffer_view()); - for (size_t i=0; i<n; i++) { - PRec r; - auto rec = (buffer->get_data() + i); - r.data[0] = rec->rec.data[0]; - r.data[1] = rec->rec.data[1]; + { + auto bv = buffer->get_buffer_view(); - auto result = wss.point_lookup(r); - ck_assert_ptr_nonnull(result); - ck_assert_int_eq(result->rec.data[0], r.data[0]); - ck_assert_int_eq(result->rec.data[1], r.data[1]); + for (size_t i=0; i<n; i++) { + PRec r; + auto rec = (bv.get(i)); + r.data[0] = rec->rec.data[0]; + r.data[1] = rec->rec.data[1]; + + auto result = wss.point_lookup(r); + ck_assert_ptr_nonnull(result); + ck_assert_int_eq(result->rec.data[0], r.data[0]); + ck_assert_int_eq(result->rec.data[1], r.data[1]); + } } delete buffer; @@ -93,8 +98,8 @@ START_TEST(t_point_lookup_miss) { size_t n = 10000; - auto buffer = create_2d_sequential_mbuffer(n); - auto wss = Shard(buffer); + auto buffer = create_sequential_mbuffer<R>(0, n); + auto wss = Shard(buffer->get_buffer_view()); for (size_t i=n + 100; i<2*n; i++) { PRec r; @@ -112,24 +117,27 @@ START_TEST(t_point_lookup_miss) START_TEST(t_buffer_query) { size_t n = 10000; - auto buffer = create_2d_sequential_mbuffer(n); + auto buffer = create_sequential_mbuffer<R>(0, n); PRec target; target.data[0] = 120; target.data[1] = 120; - KNNQueryParms<PRec> p; + knn::Parms<PRec> p; p.k = 10; p.point = target; - auto state = KNNQuery<PRec>::get_buffer_query_state(buffer, &p); - auto result = KNNQuery<PRec>::buffer_query(buffer, state, &p); - KNNQuery<PRec>::delete_buffer_query_state(state); + { + auto bv = buffer->get_buffer_view(); + auto state = knn::Query<PRec, Shard>::get_buffer_query_state(&bv, &p); + auto result = knn::Query<PRec, Shard>::buffer_query(state, &p); + knn::Query<PRec, Shard>::delete_buffer_query_state(state); - std::sort(result.begin(), result.end()); - size_t start = 120 - 5; - for (size_t i=0; i<result.size(); i++) { - ck_assert_int_eq(result[i].rec.data[0], start++); + std::sort(result.begin(), result.end()); + size_t start = 120 - 5; + for (size_t i=0; i<result.size(); i++) { + ck_assert_int_eq(result[i].rec.data[0], start++); + } } delete buffer; @@ -138,19 +146,19 @@ START_TEST(t_buffer_query) START_TEST(t_knn_query) { size_t n = 1000; - auto buffer = create_2d_sequential_mbuffer(n); + auto buffer = create_sequential_mbuffer<R>(0, n); - auto vptree = VPTree<PRec>(buffer); + auto vptree = VPTree<PRec>(buffer->get_buffer_view()); - KNNQueryParms<PRec> p; + knn::Parms<PRec> p; for (size_t i=0; i<100; i++) { p.k = rand() % 150; p.point.data[0] = rand() % (n-p.k); p.point.data[1] = p.point.data[0]; - auto state = KNNQuery<PRec>::get_query_state(&vptree, &p); - auto results = KNNQuery<PRec>::query(&vptree, state, &p); - KNNQuery<PRec>::delete_query_state(state); + auto state = knn::Query<PRec, Shard>::get_query_state(&vptree, &p); + auto results = knn::Query<PRec, Shard>::query(&vptree, state, &p); + knn::Query<PRec, Shard>::delete_query_state(state); ck_assert_int_eq(results.size(), p.k); |