From fb4312a883dd0e382ecbcfe1119479e6f44d32a6 Mon Sep 17 00:00:00 2001 From: Douglas Rumbaugh Date: Fri, 22 Mar 2024 15:35:14 -0400 Subject: PointLookup: added a point lookup query for unique indexes, and some tests --- tests/include/pointlookup.h | 111 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 tests/include/pointlookup.h (limited to 'tests/include/pointlookup.h') diff --git a/tests/include/pointlookup.h b/tests/include/pointlookup.h new file mode 100644 index 0000000..bf4810b --- /dev/null +++ b/tests/include/pointlookup.h @@ -0,0 +1,111 @@ +/* + * tests/include/pointlookup.h + * + * Standardized unit tests for point lookups against supporting + * shard types (must be unique for the moment) + * + * Copyright (C) 2024 Douglas Rumbaugh + * + * Distributed under the Modified BSD License. + * + * WARNING: This file must be included in the main unit test set + * after the definition of an appropriate Shard and R + * type. In particular, R needs to implement the key-value + * pair interface and Shard needs to support lower_bound. + * For other types of record and shard, you'll need to + * use a different set of unit tests. + */ +#pragma once + +/* + * Uncomment these lines temporarily to remove errors in this file + * temporarily for development purposes. They should be removed prior + * to building, to ensure no duplicate definitions. These includes/defines + * should be included in the source file that includes this one, above the + * include statement. + */ + +#include "shard/FSTrie.h" +#include "query/pointlookup.h" +#include "testing.h" + +#include + +using namespace de; +typedef StringRec R; +typedef FSTrie Shard; + +START_TEST(t_point_lookup_query) +{ + auto buffer = create_test_mbuffer(1000); + auto shard = Shard(buffer->get_buffer_view()); + + pl::Parms parms; + { + auto bv = buffer->get_buffer_view(); + for (size_t i=0; irec.key; + + parms.search_key = key; + auto state = pl::Query::get_query_state(&shard, &parms); + auto result = pl::Query::query(&shard, state, &parms); + pl::Query::delete_query_state(state); + + ck_assert_int_eq(result.size(), 1); + ck_assert_str_eq(result[0].rec.key.c_str(), key.c_str()); + ck_assert_int_eq(result[0].rec.value, bv.get(i)->rec.value); + } + + /* point lookup miss; result size should be 0 */ + parms.search_key = "computer"; + auto state = pl::Query::get_query_state(&shard, &parms); + auto result = pl::Query::query(&shard, state, &parms); + pl::Query::delete_query_state(state); + + ck_assert_int_eq(result.size(), 0); + } + + delete buffer; +} +END_TEST + + +START_TEST(t_buffer_point_lookup) +{ + + auto buffer = create_test_mbuffer(1000); + pl::Parms parms; + { + auto view = buffer->get_buffer_view(); + for (int i=view.get_record_count()-1; i>=0; i--) { + parms.search_key = view.get(i)->rec.key; + + auto state = pl::Query::get_buffer_query_state(&view, &parms); + auto result = pl::Query::buffer_query(state, &parms); + pl::Query::delete_buffer_query_state(state); + + ck_assert_int_eq(result.size(), 1); + ck_assert_str_eq(result[0].rec.key.c_str(), view.get(i)->rec.key.c_str()); + ck_assert_int_eq(result[0].rec.value, view.get(i)->rec.value); + } + + /* point lookup miss; result size should be 0 */ + parms.search_key = "computer"; + auto state = pl::Query::get_buffer_query_state(&view, &parms); + auto result = pl::Query::buffer_query(state, &parms); + pl::Query::delete_buffer_query_state(state); + + ck_assert_int_eq(result.size(), 0); + } + + delete buffer; +} +END_TEST + + +static void inject_pointlookup_tests(Suite *suite) { + TCase *point_lookup_query = tcase_create("Point Lookup Testing"); + tcase_add_test(point_lookup_query, t_point_lookup_query); + tcase_add_test(point_lookup_query, t_buffer_point_lookup); + suite_add_tcase(suite, point_lookup_query); +} -- cgit v1.2.3 From b25beb13773072c3b143842b45a7c32a1108f347 Mon Sep 17 00:00:00 2001 From: Douglas Rumbaugh Date: Mon, 15 Apr 2024 14:00:27 -0400 Subject: Updated FSTrie to use const char * instead of std::string Note: this requires the caller to manage the memory of the strings --- tests/include/pointlookup.h | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'tests/include/pointlookup.h') diff --git a/tests/include/pointlookup.h b/tests/include/pointlookup.h index bf4810b..84e71f2 100644 --- a/tests/include/pointlookup.h +++ b/tests/include/pointlookup.h @@ -40,24 +40,25 @@ START_TEST(t_point_lookup_query) auto buffer = create_test_mbuffer(1000); auto shard = Shard(buffer->get_buffer_view()); - pl::Parms parms; { auto bv = buffer->get_buffer_view(); for (size_t i=0; irec.key; - parms.search_key = key; + pl::Parms parms = {key}; auto state = pl::Query::get_query_state(&shard, &parms); auto result = pl::Query::query(&shard, state, &parms); pl::Query::delete_query_state(state); ck_assert_int_eq(result.size(), 1); - ck_assert_str_eq(result[0].rec.key.c_str(), key.c_str()); + ck_assert_str_eq(result[0].rec.key, key); ck_assert_int_eq(result[0].rec.value, bv.get(i)->rec.value); } /* point lookup miss; result size should be 0 */ - parms.search_key = "computer"; + const char *c = "computer"; + pl::Parms parms = {c}; + auto state = pl::Query::get_query_state(&shard, &parms); auto result = pl::Query::query(&shard, state, &parms); pl::Query::delete_query_state(state); @@ -74,23 +75,24 @@ START_TEST(t_buffer_point_lookup) { auto buffer = create_test_mbuffer(1000); - pl::Parms parms; { auto view = buffer->get_buffer_view(); for (int i=view.get_record_count()-1; i>=0; i--) { - parms.search_key = view.get(i)->rec.key; + pl::Parms parms = {view.get(i)->rec.key}; auto state = pl::Query::get_buffer_query_state(&view, &parms); auto result = pl::Query::buffer_query(state, &parms); pl::Query::delete_buffer_query_state(state); ck_assert_int_eq(result.size(), 1); - ck_assert_str_eq(result[0].rec.key.c_str(), view.get(i)->rec.key.c_str()); + ck_assert_str_eq(result[0].rec.key, view.get(i)->rec.key); ck_assert_int_eq(result[0].rec.value, view.get(i)->rec.value); } /* point lookup miss; result size should be 0 */ - parms.search_key = "computer"; + const char *c = "computer"; + pl::Parms parms = {c}; + auto state = pl::Query::get_buffer_query_state(&view, &parms); auto result = pl::Query::buffer_query(state, &parms); pl::Query::delete_buffer_query_state(state); -- cgit v1.2.3 From 438feac7e56fee425d9c6f1a43298ff9dc5b71d1 Mon Sep 17 00:00:00 2001 From: Douglas Rumbaugh Date: Fri, 19 Apr 2024 17:38:16 -0400 Subject: Properly implemented support for iteratively decomposable problems --- tests/include/pointlookup.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'tests/include/pointlookup.h') diff --git a/tests/include/pointlookup.h b/tests/include/pointlookup.h index 84e71f2..71a1099 100644 --- a/tests/include/pointlookup.h +++ b/tests/include/pointlookup.h @@ -25,15 +25,15 @@ * include statement. */ -#include "shard/FSTrie.h" +//#include "shard/FSTrie.h" #include "query/pointlookup.h" #include "testing.h" #include using namespace de; -typedef StringRec R; -typedef FSTrie Shard; +//typedef StringRec R; +//typedef FSTrie Shard; START_TEST(t_point_lookup_query) { @@ -51,8 +51,8 @@ START_TEST(t_point_lookup_query) pl::Query::delete_query_state(state); ck_assert_int_eq(result.size(), 1); - ck_assert_str_eq(result[0].rec.key, key); - ck_assert_int_eq(result[0].rec.value, bv.get(i)->rec.value); + //ck_assert_str_eq(result[0].rec.key, key); + //ck_assert_int_eq(result[0].rec.value, bv.get(i)->rec.value); } /* point lookup miss; result size should be 0 */ @@ -85,8 +85,8 @@ START_TEST(t_buffer_point_lookup) pl::Query::delete_buffer_query_state(state); ck_assert_int_eq(result.size(), 1); - ck_assert_str_eq(result[0].rec.key, view.get(i)->rec.key); - ck_assert_int_eq(result[0].rec.value, view.get(i)->rec.value); + //ck_assert_str_eq(result[0].rec.key, view.get(i)->rec.key); + //ck_assert_int_eq(result[0].rec.value, view.get(i)->rec.value); } /* point lookup miss; result size should be 0 */ -- cgit v1.2.3