summaryrefslogtreecommitdiffstats
path: root/searchlib/src/tests/attribute/bitvector_search_cache
diff options
context:
space:
mode:
authorGeir Storli <geirst@oath.com>2017-09-05 13:09:24 +0000
committerGeir Storli <geirst@oath.com>2017-09-06 15:45:25 +0000
commite65e07a491c8ac14d2a951158b9d446339b1ad49 (patch)
tree44cb913185cd24db64ff1e724c0a7cfce7df2079 /searchlib/src/tests/attribute/bitvector_search_cache
parentb24b63018c3862a393a6e69530bafad855ae5fdd (diff)
Implement simple bitvector search cache for use in imported attribute vector.
Diffstat (limited to 'searchlib/src/tests/attribute/bitvector_search_cache')
-rw-r--r--searchlib/src/tests/attribute/bitvector_search_cache/CMakeLists.txt8
-rw-r--r--searchlib/src/tests/attribute/bitvector_search_cache/bitvector_search_cache_test.cpp61
2 files changed, 69 insertions, 0 deletions
diff --git a/searchlib/src/tests/attribute/bitvector_search_cache/CMakeLists.txt b/searchlib/src/tests/attribute/bitvector_search_cache/CMakeLists.txt
new file mode 100644
index 00000000000..2442474bcea
--- /dev/null
+++ b/searchlib/src/tests/attribute/bitvector_search_cache/CMakeLists.txt
@@ -0,0 +1,8 @@
+# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+vespa_add_executable(searchlib_bitvector_search_cache_test_app TEST
+ SOURCES
+ bitvector_search_cache_test.cpp
+ DEPENDS
+ searchlib
+)
+vespa_add_test(NAME searchlib_bitvector_search_cache_test_app COMMAND searchlib_bitvector_search_cache_test_app)
diff --git a/searchlib/src/tests/attribute/bitvector_search_cache/bitvector_search_cache_test.cpp b/searchlib/src/tests/attribute/bitvector_search_cache/bitvector_search_cache_test.cpp
new file mode 100644
index 00000000000..7b395a6459c
--- /dev/null
+++ b/searchlib/src/tests/attribute/bitvector_search_cache/bitvector_search_cache_test.cpp
@@ -0,0 +1,61 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include <vespa/vespalib/testkit/test_kit.h>
+#include <vespa/searchlib/attribute/bitvector_search_cache.h>
+#include <vespa/searchlib/common/bitvector.h>
+
+using namespace search;
+using namespace search::attribute;
+
+using BitVectorSP = BitVectorSearchCache::BitVectorSP;
+
+BitVectorSP
+makeBitVector()
+{
+ return BitVectorSP(BitVector::create(5).release());
+}
+
+struct Fixture {
+ BitVectorSearchCache cache;
+ BitVectorSP vec1;
+ BitVectorSP vec2;
+ Fixture()
+ : cache(),
+ vec1(makeBitVector()),
+ vec2(makeBitVector())
+ {}
+};
+
+TEST_F("require that bit vectors can be inserted and retrieved", Fixture)
+{
+ EXPECT_EQUAL(0u, f.cache.size());
+ f.cache.insert("foo", f.vec1);
+ f.cache.insert("bar", f.vec2);
+ EXPECT_EQUAL(2u, f.cache.size());
+
+ EXPECT_EQUAL(f.vec1, f.cache.find("foo"));
+ EXPECT_EQUAL(f.vec2, f.cache.find("bar"));
+ EXPECT_TRUE(f.cache.find("baz").get() == nullptr);
+}
+
+TEST_F("require that insert() doesn't replace existing bit vector", Fixture)
+{
+ f.cache.insert("foo", f.vec1);
+ f.cache.insert("foo", f.vec2);
+ EXPECT_EQUAL(1u, f.cache.size());
+ EXPECT_EQUAL(f.vec1, f.cache.find("foo"));
+}
+
+TEST_F("require that cache can be cleared", Fixture)
+{
+ f.cache.insert("foo", f.vec1);
+ f.cache.insert("bar", f.vec2);
+ EXPECT_EQUAL(2u, f.cache.size());
+ f.cache.clear();
+
+ EXPECT_EQUAL(0u, f.cache.size());
+ EXPECT_TRUE(f.cache.find("foo").get() == nullptr);
+ EXPECT_TRUE(f.cache.find("bar").get() == nullptr);
+}
+
+TEST_MAIN() { TEST_RUN_ALL(); }