diff options
author | Haavard <havardpe@yahoo-inc.com> | 2017-02-23 15:13:44 +0000 |
---|---|---|
committer | Haavard <havardpe@yahoo-inc.com> | 2017-02-23 17:10:37 +0000 |
commit | 9cb7505ccdc58dcfaa341a9c54eee60d2d16531e (patch) | |
tree | 67baab933561ad0c3dbc55a597672a0a4842cade /searchlib/src/tests/features | |
parent | beea9069a65cd3625ebbbd20fb386baeed091d24 (diff) |
lazy evaluate ranking expressions
Diffstat (limited to 'searchlib/src/tests/features')
13 files changed, 74 insertions, 56 deletions
diff --git a/searchlib/src/tests/features/beta/beta_features.cpp b/searchlib/src/tests/features/beta/beta_features.cpp index 1bc75d6f3bb..2d992ab82e1 100644 --- a/searchlib/src/tests/features/beta/beta_features.cpp +++ b/searchlib/src/tests/features/beta/beta_features.cpp @@ -292,6 +292,10 @@ Test::testProximity() .addScore("proximity(foo,0,1).posA", a < b ? a : util::FEATURE_MAX) .addScore("proximity(foo,0,1).posB", a < b ? b : util::FEATURE_MIN); TEST_STATE(vespalib::make_string("a=%u, b=%u", a, b).c_str()); + { // reset lazy evaluation + RankResult dummy; + ft.executeOnly(dummy, 0); + } EXPECT_TRUE(ft.execute(exp)); } } @@ -344,6 +348,10 @@ Test::testQueryCompleteness() RankResult exp; exp.addScore("queryCompleteness(foo).hit", (feature_t)(i)); exp.addScore("queryCompleteness(foo).miss", (feature_t)(5 - i)); + { // reset lazy evaluation + RankResult dummy; + ft.executeOnly(dummy, 0); + } EXPECT_TRUE(ft.execute(exp)); } } @@ -374,6 +382,10 @@ Test::assertQueryCompleteness(FtFeatureTest & ft, uint32_t firstOcc, uint32_t hi RankResult exp; exp.addScore("queryCompleteness(foo,5,10).hit", hits); exp.addScore("queryCompleteness(foo,5,10).miss", miss); + { // reset lazy evaluation + RankResult dummy; + ft.executeOnly(dummy, 0); + } EXPECT_TRUE(ft.execute(exp)); } @@ -473,6 +485,10 @@ Test::testFlowCompleteness() exp.addScore("flowCompleteness(foo).weight", 100.0); exp.addScore("flowCompleteness(foo).flow", i); TEST_STATE("run execute"); + { // reset lazy evaluation + RankResult dummy; + ft.executeOnly(dummy, 0); + } EXPECT_TRUE(ft.execute(exp)); } } @@ -524,6 +540,10 @@ Test::testFlowCompleteness() exp.addScore("flowCompleteness(foo).flow", flow); TEST_STATE(vespalib::make_string("execute t0m=%u t1m=%u t2m=%u t3m=%u flow=%u", t0m, t1m, t2m, t3m, flow).c_str()); + { // reset lazy evaluation + RankResult dummy; + ft.executeOnly(dummy, 0); + } ASSERT_TRUE(ft.execute(exp)); } } diff --git a/searchlib/src/tests/features/constant/constant_test.cpp b/searchlib/src/tests/features/constant/constant_test.cpp index d990943367b..2bce80fb190 100644 --- a/searchlib/src/tests/features/constant/constant_test.cpp +++ b/searchlib/src/tests/features/constant/constant_test.cpp @@ -56,25 +56,21 @@ struct ExecFixture setup_search_features(factory); } bool setup() { return test.setup(); } - const Tensor &extractTensor() { - const Value::CREF *value = test.resolveObjectFeature(); - ASSERT_TRUE(value != nullptr); - ASSERT_TRUE(value->get().is_tensor()); - return static_cast<const Tensor &>(*value->get().as_tensor()); + const Tensor &extractTensor(uint32_t docid) { + Value::CREF value = test.resolveObjectFeature(docid); + ASSERT_TRUE(value.get().is_tensor()); + return static_cast<const Tensor &>(*value.get().as_tensor()); } const Tensor &executeTensor(uint32_t docId = 1) { - test.executeOnly(docId); - return extractTensor(); + return extractTensor(docId); } - double extractDouble() { - const Value::CREF *value = test.resolveObjectFeature(); - ASSERT_TRUE(value != nullptr); - ASSERT_TRUE(value->get().is_double()); - return value->get().as_double(); + double extractDouble(uint32_t docid) { + Value::CREF value = test.resolveObjectFeature(docid); + ASSERT_TRUE(value.get().is_double()); + return value.get().as_double(); } double executeDouble(uint32_t docId = 1) { - test.executeOnly(docId); - return extractDouble(); + return extractDouble(docId); } void addTensor(const vespalib::string &name, const TensorCells &cells, diff --git a/searchlib/src/tests/features/featurebenchmark.cpp b/searchlib/src/tests/features/featurebenchmark.cpp index dc9d94907b4..ed8af1cdf14 100644 --- a/searchlib/src/tests/features/featurebenchmark.cpp +++ b/searchlib/src/tests/features/featurebenchmark.cpp @@ -236,7 +236,7 @@ Benchmark::runFieldMatch(Config & cfg) start(); std::cout << "**** '" << cfg.getFeature() << "' ****" << std::endl; for (uint32_t i = 0; i < numRuns; ++i) { - ft.executeOnly(0); + // rank evaluation is now lazy, please re-write benchmark if needed } sample(); } @@ -261,7 +261,7 @@ Benchmark::runRankingExpression(Config & cfg) start(); std::cout << "**** '" << cfg.getFeature() << "' ****" << std::endl; for (uint32_t i = 0; i < numRuns; ++i) { - ft.executeOnly(0); + // rank evaluation is now lazy, please re-write benchmark if needed } sample(); } @@ -374,7 +374,7 @@ Benchmark::runAttributeMatch(Config & cfg) pos.setElementWeight(i % numDocs); amd->appendPosition(pos); } - ft.executeOnly(i % numDocs); + // rank evaluation is now lazy, please re-write benchmark if needed } sample(); } @@ -405,7 +405,7 @@ Benchmark::runAttribute(Config & cfg) start(); std::cout << "**** '" << cfg.getFeature() << "' ****" << std::endl; for (uint32_t i = 0; i < numRuns; ++i) { - ft.executeOnly(i % numDocs); + // rank evaluation is now lazy, please re-write benchmark if needed } sample(); } @@ -457,7 +457,7 @@ Benchmark::runDotProduct(Config & cfg) start(); std::cout << "**** '" << cfg.getFeature() << "' ****" << std::endl; for (uint32_t i = 0; i < numRuns; ++i) { - ft.executeOnly(i % numDocs); + // rank evaluation is now lazy, please re-write benchmark if needed } sample(); } @@ -499,7 +499,7 @@ Benchmark::runNativeAttributeMatch(Config & cfg) pos.setElementWeight(docId); amd->appendPosition(pos); } - ft.executeOnly(docId); + // rank evaluation is now lazy, please re-write benchmark if needed } sample(); } @@ -538,7 +538,7 @@ Benchmark::runNativeFieldMatch(Config & cfg) start(); std::cout << "**** '" << cfg.getFeature() << "' ****" << std::endl; for (uint32_t i = 0; i < numRuns; ++i) { - ft.executeOnly(0); + // rank evaluation is now lazy, please re-write benchmark if needed } sample(); } @@ -580,7 +580,7 @@ Benchmark::runNativeProximity(Config & cfg) start(); std::cout << "**** '" << cfg.getFeature() << "' ****" << std::endl; for (uint32_t i = 0; i < numRuns; ++i) { - ft.executeOnly(0); + // rank evaluation is now lazy, please re-write benchmark if needed } sample(); } diff --git a/searchlib/src/tests/features/item_raw_score/item_raw_score_test.cpp b/searchlib/src/tests/features/item_raw_score/item_raw_score_test.cpp index 199a9fa72e3..fe093d41ba7 100644 --- a/searchlib/src/tests/features/item_raw_score/item_raw_score_test.cpp +++ b/searchlib/src/tests/features/item_raw_score/item_raw_score_test.cpp @@ -97,8 +97,7 @@ struct RankFixture : BlueprintFactoryFixture, IndexFixture { rankProgram->setup(mdl, queryEnv); } feature_t getScore(uint32_t docId) { - rankProgram->run(docId); - return *Utils::getScoreFeature(*rankProgram); + return Utils::getScoreFeature(*rankProgram, docId); } void setScore(TermFieldHandle handle, uint32_t docId, feature_t score) { rankProgram->match_data().resolveTermField(handle)->setRawScore(docId, score); diff --git a/searchlib/src/tests/features/native_dot_product/native_dot_product_test.cpp b/searchlib/src/tests/features/native_dot_product/native_dot_product_test.cpp index 3e3702cceec..87305cd1670 100644 --- a/searchlib/src/tests/features/native_dot_product/native_dot_product_test.cpp +++ b/searchlib/src/tests/features/native_dot_product/native_dot_product_test.cpp @@ -103,8 +103,7 @@ struct RankFixture : BlueprintFactoryFixture, IndexFixture { rankProgram->setup(mdl, queryEnv); } feature_t getScore(uint32_t docId) { - rankProgram->run(docId); - return *Utils::getScoreFeature(*rankProgram); + return Utils::getScoreFeature(*rankProgram, docId); } void setFooWeight(uint32_t i, uint32_t docId, int32_t index_weight) { ASSERT_LESS(i, fooHandles.size()); diff --git a/searchlib/src/tests/features/prod_features.cpp b/searchlib/src/tests/features/prod_features.cpp index ad52c3ac861..4efd140b871 100644 --- a/searchlib/src/tests/features/prod_features.cpp +++ b/searchlib/src/tests/features/prod_features.cpp @@ -1353,7 +1353,7 @@ Test::testNow() ASSERT_TRUE(ft.setup()); RankResult res; - ASSERT_TRUE(ft.executeOnly(res, 0)); + ASSERT_TRUE(ft.executeOnly(res, 1)); feature_t now = 15000000000; ASSERT_EQUAL(now, res.getScore("now")); } diff --git a/searchlib/src/tests/features/prod_features_attributematch.cpp b/searchlib/src/tests/features/prod_features_attributematch.cpp index 06b2b859709..fc69061b4ef 100644 --- a/searchlib/src/tests/features/prod_features_attributematch.cpp +++ b/searchlib/src/tests/features/prod_features_attributematch.cpp @@ -234,6 +234,10 @@ Test::testAttributeMatch() mdb->apply(1); exp.clear(). addScore("attributeMatch(wsint).fieldCompleteness", 0.5f); + { // reset lazy evaluation + RankResult dummy; + ft.executeOnly(dummy, 0); + } ASSERT_TRUE(ft.execute(exp)); // test that normalized values lies in the interval [0,1]. @@ -243,6 +247,10 @@ Test::testAttributeMatch() exp.clear(). addScore("attributeMatch(wsfloat).normalizedWeight", 1). addScore("attributeMatch(wsfloat).normalizedWeightedWeight", 1); + { // reset lazy evaluation + RankResult dummy; + ft.executeOnly(dummy, 0); + } ASSERT_TRUE(ft.execute(exp)); } diff --git a/searchlib/src/tests/features/prod_features_fieldmatch.cpp b/searchlib/src/tests/features/prod_features_fieldmatch.cpp index e26d6a92fa6..e9bafdb1c78 100644 --- a/searchlib/src/tests/features/prod_features_fieldmatch.cpp +++ b/searchlib/src/tests/features/prod_features_fieldmatch.cpp @@ -957,20 +957,20 @@ Test::testFieldMatchExecutorRemaining() ASSERT_TRUE(mdb->setFieldLength("foo", 3)); ASSERT_TRUE(mdb->addOccurence("foo", 0, 0)); // 'a' ASSERT_TRUE(mdb->addOccurence("foo", 1, 1)); // 'b' - ASSERT_TRUE(mdb->apply(1)); + ASSERT_TRUE(mdb->apply(2)); RankResult rr = toRankResult("fieldMatch(foo)", "score:0.9558 matches:2"); rr.setEpsilon(1e-4); // same as java tests - ASSERT_TRUE(ft.execute(rr, 1)); + ASSERT_TRUE(ft.execute(rr, 2)); } { // docid 3: "x a b" MatchDataBuilder::UP mdb = ft.createMatchDataBuilder(); ASSERT_TRUE(mdb->setFieldLength("foo", 3)); ASSERT_TRUE(mdb->addOccurence("foo", 0, 1)); // 'a' ASSERT_TRUE(mdb->addOccurence("foo", 1, 2)); // 'b' - ASSERT_TRUE(mdb->apply(2)); + ASSERT_TRUE(mdb->apply(3)); RankResult rr = toRankResult("fieldMatch(foo)", "score:0.9463 matches:2"); rr.setEpsilon(1e-4); // same as java tests - ASSERT_TRUE(ft.execute(rr, 2)); + ASSERT_TRUE(ft.execute(rr, 3)); } } @@ -1008,6 +1008,10 @@ Test::testFieldMatchExecutorRemaining() // add hit with query term 'b' mdb->getTermFieldMatchData(1, 0)->reset(1); ASSERT_TRUE(mdb->apply(1)); + { // reset lazy evaluation + RankResult dummy; + ft.executeOnly(dummy, 0); + } ASSERT_TRUE(ft.execute(toRankResult("fieldMatch(foo)", "score:0 completeness:0.475 queryCompleteness:0.5 weight:0.2 matches:2 degradedMatches:2"). setEpsilon(1e-4))); diff --git a/searchlib/src/tests/features/raw_score/raw_score_test.cpp b/searchlib/src/tests/features/raw_score/raw_score_test.cpp index 0a15ff69318..b98c60b7c50 100644 --- a/searchlib/src/tests/features/raw_score/raw_score_test.cpp +++ b/searchlib/src/tests/features/raw_score/raw_score_test.cpp @@ -73,8 +73,7 @@ struct RankFixture : BlueprintFactoryFixture, IndexFixture { rankProgram->setup(mdl, queryEnv); } feature_t getScore(uint32_t docId) { - rankProgram->run(docId); - return *Utils::getScoreFeature(*rankProgram); + return Utils::getScoreFeature(*rankProgram, docId); } void setScore(TermFieldHandle handle, uint32_t docId, feature_t score) { rankProgram->match_data().resolveTermField(handle)->setRawScore(docId, score); diff --git a/searchlib/src/tests/features/subqueries/subqueries_test.cpp b/searchlib/src/tests/features/subqueries/subqueries_test.cpp index 160ec404b20..4ed3b833853 100644 --- a/searchlib/src/tests/features/subqueries/subqueries_test.cpp +++ b/searchlib/src/tests/features/subqueries/subqueries_test.cpp @@ -70,8 +70,7 @@ struct RankFixture : BlueprintFactoryFixture, IndexFixture { return handles; } feature_t getSubqueries(uint32_t docId) { - rankProgram->run(docId); - return *Utils::getScoreFeature(*rankProgram); + return Utils::getScoreFeature(*rankProgram, docId); } void setSubqueries(TermFieldHandle handle, uint32_t docId, uint64_t subqueries) { diff --git a/searchlib/src/tests/features/tensor/tensor_test.cpp b/searchlib/src/tests/features/tensor/tensor_test.cpp index fd59cd8b9d7..34a5df23395 100644 --- a/searchlib/src/tests/features/tensor/tensor_test.cpp +++ b/searchlib/src/tests/features/tensor/tensor_test.cpp @@ -154,15 +154,13 @@ struct ExecFixture { "x", "y" }); setQueryTensorType("null", "tensor(q{})"); } - const Tensor &extractTensor() { - const Value::CREF *value = test.resolveObjectFeature(); - ASSERT_TRUE(value != nullptr); - ASSERT_TRUE(value->get().is_tensor()); - return static_cast<const Tensor &>(*value->get().as_tensor()); + const Tensor &extractTensor(uint32_t docid) { + Value::CREF value = test.resolveObjectFeature(docid); + ASSERT_TRUE(value.get().is_tensor()); + return static_cast<const Tensor &>(*value.get().as_tensor()); } const Tensor &execute(uint32_t docId = 1) { - test.executeOnly(docId); - return extractTensor(); + return extractTensor(docId); } }; diff --git a/searchlib/src/tests/features/tensor_from_labels/tensor_from_labels_test.cpp b/searchlib/src/tests/features/tensor_from_labels/tensor_from_labels_test.cpp index e0e6b4746a4..6f413da004c 100644 --- a/searchlib/src/tests/features/tensor_from_labels/tensor_from_labels_test.cpp +++ b/searchlib/src/tests/features/tensor_from_labels/tensor_from_labels_test.cpp @@ -121,15 +121,13 @@ struct ExecFixture test.getQueryEnv().getProperties().add("astr_query", "[d e f]"); test.getQueryEnv().getProperties().add("aint_query", "[11 13 17]"); } - const Tensor &extractTensor() { - const Value::CREF *value = test.resolveObjectFeature(); - ASSERT_TRUE(value != nullptr); - ASSERT_TRUE(value->get().is_tensor()); - return static_cast<const Tensor &>(*value->get().as_tensor()); + const Tensor &extractTensor(uint32_t docid) { + Value::CREF value = test.resolveObjectFeature(docid); + ASSERT_TRUE(value.get().is_tensor()); + return static_cast<const Tensor &>(*value.get().as_tensor()); } const Tensor &execute() { - test.executeOnly(); - return extractTensor(); + return extractTensor(1); } }; diff --git a/searchlib/src/tests/features/tensor_from_weighted_set/tensor_from_weighted_set_test.cpp b/searchlib/src/tests/features/tensor_from_weighted_set/tensor_from_weighted_set_test.cpp index 839b1efec74..d8dec88c418 100644 --- a/searchlib/src/tests/features/tensor_from_weighted_set/tensor_from_weighted_set_test.cpp +++ b/searchlib/src/tests/features/tensor_from_weighted_set/tensor_from_weighted_set_test.cpp @@ -120,15 +120,13 @@ struct ExecFixture void setupQueryEnvironment() { test.getQueryEnv().getProperties().add("wsquery", "{d:11,e:13,f:17}"); } - const Tensor &extractTensor() { - const Value::CREF *value = test.resolveObjectFeature(); - ASSERT_TRUE(value != nullptr); - ASSERT_TRUE(value->get().is_tensor()); - return static_cast<const Tensor &>(*value->get().as_tensor()); + const Tensor &extractTensor(uint32_t docid) { + Value::CREF value = test.resolveObjectFeature(docid); + ASSERT_TRUE(value.get().is_tensor()); + return static_cast<const Tensor &>(*value.get().as_tensor()); } const Tensor &execute() { - test.executeOnly(); - return extractTensor(); + return extractTensor(1); } }; |