diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
commit | 72231250ed81e10d66bfe70701e64fa5fe50f712 (patch) | |
tree | 2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /searchlib/src/tests/queryeval/equiv |
Publish
Diffstat (limited to 'searchlib/src/tests/queryeval/equiv')
-rw-r--r-- | searchlib/src/tests/queryeval/equiv/.cvsignore | 3 | ||||
-rw-r--r-- | searchlib/src/tests/queryeval/equiv/.gitignore | 4 | ||||
-rw-r--r-- | searchlib/src/tests/queryeval/equiv/CMakeLists.txt | 8 | ||||
-rw-r--r-- | searchlib/src/tests/queryeval/equiv/DESC | 1 | ||||
-rw-r--r-- | searchlib/src/tests/queryeval/equiv/FILES | 1 | ||||
-rw-r--r-- | searchlib/src/tests/queryeval/equiv/equiv_test.cpp | 130 |
6 files changed, 147 insertions, 0 deletions
diff --git a/searchlib/src/tests/queryeval/equiv/.cvsignore b/searchlib/src/tests/queryeval/equiv/.cvsignore new file mode 100644 index 00000000000..1f159f55125 --- /dev/null +++ b/searchlib/src/tests/queryeval/equiv/.cvsignore @@ -0,0 +1,3 @@ +.depend +Makefile +equiv_test diff --git a/searchlib/src/tests/queryeval/equiv/.gitignore b/searchlib/src/tests/queryeval/equiv/.gitignore new file mode 100644 index 00000000000..d28d4650b98 --- /dev/null +++ b/searchlib/src/tests/queryeval/equiv/.gitignore @@ -0,0 +1,4 @@ +*_test +.depend +Makefile +searchlib_equiv_test_app diff --git a/searchlib/src/tests/queryeval/equiv/CMakeLists.txt b/searchlib/src/tests/queryeval/equiv/CMakeLists.txt new file mode 100644 index 00000000000..695e9b87121 --- /dev/null +++ b/searchlib/src/tests/queryeval/equiv/CMakeLists.txt @@ -0,0 +1,8 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(searchlib_equiv_test_app + SOURCES + equiv_test.cpp + DEPENDS + searchlib +) +vespa_add_test(NAME searchlib_equiv_test_app COMMAND searchlib_equiv_test_app) diff --git a/searchlib/src/tests/queryeval/equiv/DESC b/searchlib/src/tests/queryeval/equiv/DESC new file mode 100644 index 00000000000..e294d10cb23 --- /dev/null +++ b/searchlib/src/tests/queryeval/equiv/DESC @@ -0,0 +1 @@ +equiv test. Take a look at equiv_test.cpp for details. diff --git a/searchlib/src/tests/queryeval/equiv/FILES b/searchlib/src/tests/queryeval/equiv/FILES new file mode 100644 index 00000000000..79adf32c1d5 --- /dev/null +++ b/searchlib/src/tests/queryeval/equiv/FILES @@ -0,0 +1 @@ +equiv_test.cpp diff --git a/searchlib/src/tests/queryeval/equiv/equiv_test.cpp b/searchlib/src/tests/queryeval/equiv/equiv_test.cpp new file mode 100644 index 00000000000..3d97d05995f --- /dev/null +++ b/searchlib/src/tests/queryeval/equiv/equiv_test.cpp @@ -0,0 +1,130 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include <vespa/fastos/fastos.h> +#include <vespa/log/log.h> +LOG_SETUP("equiv_test"); +#include <vespa/vespalib/testkit/testapp.h> +#include <vespa/searchlib/queryeval/leaf_blueprints.h> +#include <vespa/searchlib/queryeval/intermediate_blueprints.h> +#include <vespa/searchlib/queryeval/equiv_blueprint.h> +#include <vespa/searchlib/fef/matchdatalayout.h> + +using namespace search::queryeval; +using search::fef::MatchData; +using search::fef::MatchDataLayout; +using search::fef::TermFieldHandle; +using search::fef::TermFieldMatchData; +using search::fef::FieldPositionsIterator; + +class Test : public vespalib::TestApp { +public: + void testEquiv(); + int Main(); +}; + +void +Test::testEquiv() +{ + FakeResult a; + FakeResult b; + FakeResult c; + + a.doc(5).pos(1); + b.doc(5).pos(2); + c.doc(5).pos(3).doc(10).pos(4); + + MatchDataLayout subLayout; + TermFieldHandle fbh11 = subLayout.allocTermField(1); + TermFieldHandle fbh21 = subLayout.allocTermField(2); + TermFieldHandle fbh22 = subLayout.allocTermField(2); + + FieldSpecBaseList fields; + fields.add(FieldSpecBase(1, 1)); + fields.add(FieldSpecBase(2, 2)); + EquivBlueprint *eq_b = new EquivBlueprint(fields, subLayout); + + eq_b->addTerm(Blueprint::UP(new FakeBlueprint(FieldSpec("foo", 1, fbh11), a)), 1.0); + eq_b->addTerm(Blueprint::UP(new FakeBlueprint(FieldSpec("bar", 2, fbh21), b)), 1.0); + eq_b->addTerm(Blueprint::UP(new FakeBlueprint(FieldSpec("bar", 2, fbh22), c)), 1.0); + + Blueprint::UP bp(eq_b); + for (int i = 0; i <= 1; ++i) { + bool strict = (i == 0); + TEST_STATE(strict ? "strict" : "non-strict"); + MatchData::UP md = MatchData::makeTestInstance(0, 100, 10); + bp->fetchPostings(strict); + SearchIterator::UP search = bp->createSearch(*md, strict); + search->initFullRange(); + + EXPECT_TRUE(!search->seek(3)); + if (!strict) { + EXPECT_EQUAL(SearchIterator::beginId(), search->getDocId()); + EXPECT_TRUE(search->seek(5u)); + } + EXPECT_EQUAL(5u, search->getDocId()); + { // test doc 5 results + search->unpack(5u); + { + TermFieldMatchData &data = *md->resolveTermField(1); + EXPECT_EQUAL(1u, data.getFieldId()); + EXPECT_EQUAL(5u, data.getDocId()); + FieldPositionsIterator itr = data.getIterator(); + EXPECT_EQUAL(1u, itr.size()); + ASSERT_TRUE(itr.valid()); + EXPECT_EQUAL(1u, itr.getPosition()); + itr.next(); + EXPECT_TRUE(!itr.valid()); + } + { + TermFieldMatchData &data = *md->resolveTermField(2); + EXPECT_EQUAL(2u, data.getFieldId()); + EXPECT_EQUAL(5u, data.getDocId()); + FieldPositionsIterator itr = data.getIterator(); + EXPECT_EQUAL(2u, itr.size()); + ASSERT_TRUE(itr.valid()); + EXPECT_EQUAL(2u, itr.getPosition()); + itr.next(); + ASSERT_TRUE(itr.valid()); + EXPECT_EQUAL(3u, itr.getPosition()); + itr.next(); + EXPECT_TRUE(!itr.valid()); + } + } + EXPECT_TRUE(!search->seek(7)); + if (!strict) { + EXPECT_EQUAL(5u, search->getDocId()); + EXPECT_TRUE(search->seek(10u)); + } + EXPECT_EQUAL(10u, search->getDocId()); + { // test doc 10 results + search->unpack(10u); + EXPECT_EQUAL(5u, md->resolveTermField(1)->getDocId()); // no match + { + TermFieldMatchData &data = *md->resolveTermField(2); + EXPECT_EQUAL(2u, data.getFieldId()); + EXPECT_EQUAL(10u, data.getDocId()); + FieldPositionsIterator itr = data.getIterator(); + EXPECT_EQUAL(1u, itr.size()); + ASSERT_TRUE(itr.valid()); + EXPECT_EQUAL(4u, itr.getPosition()); + itr.next(); + EXPECT_TRUE(!itr.valid()); + } + } + EXPECT_TRUE(!search->seek(13)); + if (strict) { + EXPECT_TRUE(search->isAtEnd()); + } else { + EXPECT_EQUAL(10u, search->getDocId()); + } + } +} + +int +Test::Main() +{ + TEST_INIT("equiv_test"); + testEquiv(); + TEST_DONE(); +} + +TEST_APPHOOK(Test); |