summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2019-04-23 14:29:31 +0000
committerGeir Storli <geirst@verizonmedia.com>2019-04-23 14:29:31 +0000
commitba63e24873c5147a2bf401ef640abbe0ec7e1c24 (patch)
tree119b1672f01ee5dad7e0f366b674bae87a8c89a4 /searchlib
parent4c4afce3ab48fdfca83f0a3217d0fe18431e68a7 (diff)
Move conformance test for field index posting iterator to separate binary.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/memoryindex/field_index/CMakeLists.txt9
-rw-r--r--searchlib/src/tests/memoryindex/field_index/field_index_iterator_test.cpp73
-rw-r--r--searchlib/src/tests/memoryindex/field_index/field_index_test.cpp96
-rw-r--r--searchlib/src/vespa/searchlib/test/memoryindex/wrap_inserter.h64
4 files changed, 149 insertions, 93 deletions
diff --git a/searchlib/src/tests/memoryindex/field_index/CMakeLists.txt b/searchlib/src/tests/memoryindex/field_index/CMakeLists.txt
index 767097b99db..8377fbcf0ca 100644
--- a/searchlib/src/tests/memoryindex/field_index/CMakeLists.txt
+++ b/searchlib/src/tests/memoryindex/field_index/CMakeLists.txt
@@ -7,3 +7,12 @@ vespa_add_executable(searchlib_field_index_test_app TEST
searchlib_test
)
vespa_add_test(NAME searchlib_field_index_test_app COMMAND searchlib_field_index_test_app)
+
+vespa_add_executable(searchlib_field_index_iterator_test_app TEST
+ SOURCES
+ field_index_iterator_test.cpp
+ DEPENDS
+ searchlib
+ searchlib_test
+)
+vespa_add_test(NAME searchlib_field_index_iterator_test_app COMMAND searchlib_field_index_iterator_test_app)
diff --git a/searchlib/src/tests/memoryindex/field_index/field_index_iterator_test.cpp b/searchlib/src/tests/memoryindex/field_index/field_index_iterator_test.cpp
new file mode 100644
index 00000000000..df7f80e8601
--- /dev/null
+++ b/searchlib/src/tests/memoryindex/field_index/field_index_iterator_test.cpp
@@ -0,0 +1,73 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include <vespa/searchcommon/common/schema.h>
+#include <vespa/searchlib/memoryindex/field_index.h>
+#include <vespa/searchlib/memoryindex/posting_iterator.h>
+#include <vespa/searchlib/test/memoryindex/wrap_inserter.h>
+#include <vespa/searchlib/test/searchiteratorverifier.h>
+#include <vespa/vespalib/testkit/testapp.h>
+
+#include <vespa/log/log.h>
+LOG_SETUP("field_index_iterator_test");
+
+using namespace search::fef;
+using namespace search::index;
+using namespace search::memoryindex::test;
+using namespace search::memoryindex;
+
+using search::index::schema::DataType;
+using search::test::SearchIteratorVerifier;
+
+class Verifier : public SearchIteratorVerifier {
+private:
+ mutable TermFieldMatchData _tfmd;
+ FieldIndex _field_index;
+
+public:
+ Verifier(const Schema& schema)
+ : _tfmd(),
+ _field_index(schema, 0)
+ {
+ WrapInserter inserter(_field_index);
+ inserter.word("a");
+ for (uint32_t docId : getExpectedDocIds()) {
+ inserter.add(docId);
+ }
+ inserter.flush();
+ }
+ ~Verifier() {}
+
+ SearchIterator::UP create(bool strict) const override {
+ (void) strict;
+ TermFieldMatchDataArray match_data;
+ match_data.add(&_tfmd);
+ return std::make_unique<PostingIterator>(_field_index.find("a"),
+ _field_index.getFeatureStore(), 0, match_data);
+ }
+};
+
+Schema
+get_schema()
+{
+ Schema result;
+ result.addIndexField(Schema::IndexField("f0", DataType::STRING));
+ return result;
+}
+
+struct Fixture {
+ Schema schema;
+ Verifier verifier;
+ Fixture()
+ : schema(get_schema()),
+ verifier(schema)
+ {
+ }
+};
+
+TEST_F("require that posting iterator conforms", Fixture)
+{
+ f.verifier.verify();
+}
+
+TEST_MAIN() { TEST_RUN_ALL(); }
+
diff --git a/searchlib/src/tests/memoryindex/field_index/field_index_test.cpp b/searchlib/src/tests/memoryindex/field_index/field_index_test.cpp
index 3a635756ec7..9da0e6ab6ed 100644
--- a/searchlib/src/tests/memoryindex/field_index/field_index_test.cpp
+++ b/searchlib/src/tests/memoryindex/field_index/field_index_test.cpp
@@ -15,11 +15,11 @@
#include <vespa/searchlib/memoryindex/field_inverter.h>
#include <vespa/searchlib/memoryindex/ordered_field_index_inserter.h>
#include <vespa/searchlib/memoryindex/posting_iterator.h>
-#include <vespa/searchlib/test/searchiteratorverifier.h>
+#include <vespa/searchlib/test/memoryindex/wrap_inserter.h>
#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/log/log.h>
-LOG_SETUP("dictionary_test");
+LOG_SETUP("field_index_test");
namespace search {
@@ -32,11 +32,11 @@ using document::Document;
using queryeval::SearchIterator;
using search::index::schema::CollectionType;
using search::index::schema::DataType;
-using test::SearchIteratorVerifier;
using vespalib::GenerationHandler;
namespace memoryindex {
+using test::WrapInserter;
typedef FieldIndex::PostingList PostingList;
typedef PostingList::ConstIterator PostingConstItr;
@@ -448,61 +448,6 @@ myremove(uint32_t docId, DocumentInverter &inv, FieldIndexCollection &fieldIndex
inv.pushDocuments(fieldIndexes, std::shared_ptr<IDestructorCallback>());
}
-
-class WrapInserter
-{
- OrderedFieldIndexInserter &_inserter;
-public:
- WrapInserter(FieldIndexCollection &fieldIndexes, uint32_t fieldId)
- : _inserter(fieldIndexes.getFieldIndex(fieldId)->getInserter())
- {
- }
-
- WrapInserter &word(vespalib::stringref word_)
- {
- _inserter.setNextWord(word_);
- return *this;
- }
-
- WrapInserter &add(uint32_t docId, const index::DocIdAndFeatures &features)
- {
- _inserter.add(docId, features);
- return *this;
- }
-
- WrapInserter &add(uint32_t docId)
- {
- DocIdAndPosOccFeatures features;
- features.addNextOcc(0, 0, 1, 1);
- return add(docId, features);
- }
-
- WrapInserter &remove(uint32_t docId)
- {
- _inserter.remove(docId);
- return *this;
- }
-
- WrapInserter &flush()
- {
- _inserter.flush();
- return *this;
- }
-
- WrapInserter &rewind()
- {
- _inserter.rewind();
- return *this;
- }
-
- datastore::EntryRef
- getWordRef()
- {
- return _inserter.getWordRef();
- }
-};
-
-
class MyDrainRemoves : IFieldIndexRemoveListener
{
FieldIndexRemover &_remover;
@@ -742,42 +687,7 @@ TEST_F("requireThatFeaturesAreInPostingLists", Fixture)
featureStorePtr(fic, 1)));
}
-class Verifier : public SearchIteratorVerifier {
-public:
- Verifier(const Schema & schema);
- ~Verifier();
- SearchIterator::UP create(bool strict) const override {
- (void) strict;
- TermFieldMatchDataArray matchData;
- matchData.add(&_tfmd);
- return std::make_unique<PostingIterator>(_fieldIndexes.find("a", 0), featureStoreRef(_fieldIndexes, 0), 0, matchData);
- }
-
-private:
- mutable TermFieldMatchData _tfmd;
- FieldIndexCollection _fieldIndexes;
-};
-
-
-Verifier::Verifier(const Schema & schema)
- : _tfmd(),
- _fieldIndexes(schema)
-{
- WrapInserter inserter(_fieldIndexes, 0);
- inserter.word("a");
- for (uint32_t docId : getExpectedDocIds()) {
- inserter.add(docId);
- }
- inserter.flush();
-}
-Verifier::~Verifier() {}
-
-TEST_F("require that postingiterator conforms", Fixture) {
- Verifier verifier(f.getSchema());
- verifier.verify();
-
-}
TEST_F("requireThatPostingIteratorIsWorking", Fixture)
{
diff --git a/searchlib/src/vespa/searchlib/test/memoryindex/wrap_inserter.h b/searchlib/src/vespa/searchlib/test/memoryindex/wrap_inserter.h
new file mode 100644
index 00000000000..eeb09898aa2
--- /dev/null
+++ b/searchlib/src/vespa/searchlib/test/memoryindex/wrap_inserter.h
@@ -0,0 +1,64 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include <vespa/searchlib/memoryindex/field_index_collection.h>
+#include <vespa/searchlib/memoryindex/ordered_field_index_inserter.h>
+
+namespace search::memoryindex::test {
+
+/**
+ * Test class used to populate a FieldIndex.
+ */
+class WrapInserter {
+private:
+ OrderedFieldIndexInserter& _inserter;
+
+public:
+ WrapInserter(FieldIndexCollection& field_indexes, uint32_t field_id)
+ : _inserter(field_indexes.getFieldIndex(field_id)->getInserter())
+ {
+ }
+
+ WrapInserter(FieldIndex& field_index)
+ : _inserter(field_index.getInserter())
+ {
+ }
+
+ WrapInserter& word(vespalib::stringref word_) {
+ _inserter.setNextWord(word_);
+ return *this;
+ }
+
+ WrapInserter& add(uint32_t doc_id, const index::DocIdAndFeatures& features) {
+ _inserter.add(doc_id, features);
+ return *this;
+ }
+
+ WrapInserter& add(uint32_t doc_id) {
+ index::DocIdAndPosOccFeatures features;
+ features.addNextOcc(0, 0, 1, 1);
+ return add(doc_id, features);
+ }
+
+ WrapInserter& remove(uint32_t doc_id) {
+ _inserter.remove(doc_id);
+ return *this;
+ }
+
+ WrapInserter& flush() {
+ _inserter.flush();
+ return *this;
+ }
+
+ WrapInserter& rewind() {
+ _inserter.rewind();
+ return *this;
+ }
+
+ datastore::EntryRef getWordRef() {
+ return _inserter.getWordRef();
+ }
+};
+
+}