aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/tests/features
diff options
context:
space:
mode:
authorHaavard <havardpe@yahoo-inc.com>2017-02-23 15:13:44 +0000
committerHaavard <havardpe@yahoo-inc.com>2017-02-23 17:10:37 +0000
commit9cb7505ccdc58dcfaa341a9c54eee60d2d16531e (patch)
tree67baab933561ad0c3dbc55a597672a0a4842cade /searchlib/src/tests/features
parentbeea9069a65cd3625ebbbd20fb386baeed091d24 (diff)
lazy evaluate ranking expressions
Diffstat (limited to 'searchlib/src/tests/features')
-rw-r--r--searchlib/src/tests/features/beta/beta_features.cpp20
-rw-r--r--searchlib/src/tests/features/constant/constant_test.cpp24
-rw-r--r--searchlib/src/tests/features/featurebenchmark.cpp16
-rw-r--r--searchlib/src/tests/features/item_raw_score/item_raw_score_test.cpp3
-rw-r--r--searchlib/src/tests/features/native_dot_product/native_dot_product_test.cpp3
-rw-r--r--searchlib/src/tests/features/prod_features.cpp2
-rw-r--r--searchlib/src/tests/features/prod_features_attributematch.cpp8
-rw-r--r--searchlib/src/tests/features/prod_features_fieldmatch.cpp12
-rw-r--r--searchlib/src/tests/features/raw_score/raw_score_test.cpp3
-rw-r--r--searchlib/src/tests/features/subqueries/subqueries_test.cpp3
-rw-r--r--searchlib/src/tests/features/tensor/tensor_test.cpp12
-rw-r--r--searchlib/src/tests/features/tensor_from_labels/tensor_from_labels_test.cpp12
-rw-r--r--searchlib/src/tests/features/tensor_from_weighted_set/tensor_from_weighted_set_test.cpp12
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);
}
};