aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2020-03-23 14:17:51 +0000
committerArne Juul <arnej@verizonmedia.com>2020-03-23 14:30:36 +0000
commit19c5bbc4a4babe52c0948a9c4c3bc5f6c1da7b85 (patch)
tree6aa8e7745752fffb33ce515dbd66ddd4d227b25d /searchlib
parent6e17e57db3435ccd8d5705b3bdd062ce337ff137 (diff)
track API changes
* also, NNS iterators no longer handles different cell types
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/queryeval/nearest_neighbor/nearest_neighbor_test.cpp25
1 files changed, 18 insertions, 7 deletions
diff --git a/searchlib/src/tests/queryeval/nearest_neighbor/nearest_neighbor_test.cpp b/searchlib/src/tests/queryeval/nearest_neighbor/nearest_neighbor_test.cpp
index bb24593f6cf..03a5a9bbe5d 100644
--- a/searchlib/src/tests/queryeval/nearest_neighbor/nearest_neighbor_test.cpp
+++ b/searchlib/src/tests/queryeval/nearest_neighbor/nearest_neighbor_test.cpp
@@ -11,6 +11,7 @@
#include <vespa/searchlib/queryeval/nearest_neighbor_iterator.h>
#include <vespa/searchlib/queryeval/simpleresult.h>
#include <vespa/searchlib/tensor/dense_tensor_attribute.h>
+#include <vespa/searchlib/tensor/distance_function_factory.h>
#include <vespa/vespalib/test/insertion_operators.h>
#include <vespa/searchlib/queryeval/nns_index_iterator.h>
@@ -23,10 +24,13 @@ using search::feature_t;
using search::tensor::DenseTensorAttribute;
using search::AttributeVector;
using vespalib::eval::ValueType;
+using CellType = vespalib::eval::ValueType::CellType;
using vespalib::eval::TensorSpec;
using vespalib::tensor::Tensor;
using vespalib::tensor::DenseTensorView;
using vespalib::tensor::DefaultTensorEngine;
+using search::tensor::DistanceFunction;
+using search::attribute::DistanceMetric;
using namespace search::fef;
using namespace search::queryeval;
@@ -34,6 +38,9 @@ using namespace search::queryeval;
vespalib::string denseSpecDouble("tensor(x[2])");
vespalib::string denseSpecFloat("tensor<float>(x[2])");
+DistanceFunction::UP euclid_d = search::tensor::make_distance_function(DistanceMetric::Euclidean, CellType::DOUBLE);
+DistanceFunction::UP euclid_f = search::tensor::make_distance_function(DistanceMetric::Euclidean, CellType::FLOAT);
+
std::unique_ptr<DenseTensorView> createTensor(const TensorSpec &spec) {
auto value = DefaultTensorEngine::ref().from_spec(spec);
DenseTensorView *tensor = dynamic_cast<DenseTensorView*>(value.get());
@@ -96,6 +103,14 @@ struct Fixture
auto t = createTensor(_typeSpec, v1, v2);
setTensor(docId, *t);
}
+
+ DistanceFunction *dist_fun() const {
+ if (_cfg.tensorType().cell_type() == CellType::FLOAT) {
+ return euclid_f.get();
+ } else {
+ return euclid_d.get();
+ }
+ }
};
template <bool strict>
@@ -104,7 +119,7 @@ SimpleResult find_matches(Fixture &env, const DenseTensorView &qtv) {
auto &tfmd = *(md->resolveTermField(0));
auto &attr = *(env._tensorAttr);
NearestNeighborDistanceHeap dh(2);
- auto search = NearestNeighborIterator::create(strict, tfmd, qtv, attr, dh);
+ auto search = NearestNeighborIterator::create(strict, tfmd, qtv, attr, dh, env.dist_fun());
if (strict) {
return SimpleResult().searchStrict(*search, attr.getNumDocs());
} else {
@@ -141,8 +156,6 @@ verify_iterator_returns_expected_results(const vespalib::string& attribute_tenso
TEST("require that NearestNeighborIterator returns expected results") {
TEST_DO(verify_iterator_returns_expected_results(denseSpecDouble, denseSpecDouble));
TEST_DO(verify_iterator_returns_expected_results(denseSpecFloat, denseSpecFloat));
- TEST_DO(verify_iterator_returns_expected_results(denseSpecDouble, denseSpecFloat));
- TEST_DO(verify_iterator_returns_expected_results(denseSpecFloat, denseSpecDouble));
}
template <bool strict>
@@ -151,7 +164,7 @@ std::vector<feature_t> get_rawscores(Fixture &env, const DenseTensorView &qtv) {
auto &tfmd = *(md->resolveTermField(0));
auto &attr = *(env._tensorAttr);
NearestNeighborDistanceHeap dh(2);
- auto search = NearestNeighborIterator::create(strict, tfmd, qtv, attr, dh);
+ auto search = NearestNeighborIterator::create(strict, tfmd, qtv, attr, dh, env.dist_fun());
uint32_t limit = attr.getNumDocs();
uint32_t docid = 1;
search->initRange(docid, limit);
@@ -195,15 +208,13 @@ verify_iterator_sets_expected_rawscore(const vespalib::string& attribute_tensor_
TEST("require that NearestNeighborIterator sets expected rawscore") {
TEST_DO(verify_iterator_sets_expected_rawscore(denseSpecDouble, denseSpecDouble));
TEST_DO(verify_iterator_sets_expected_rawscore(denseSpecFloat, denseSpecFloat));
- TEST_DO(verify_iterator_sets_expected_rawscore(denseSpecDouble, denseSpecFloat));
- TEST_DO(verify_iterator_sets_expected_rawscore(denseSpecFloat, denseSpecDouble));
}
TEST("require that NnsIndexIterator works as expected") {
std::vector<NnsIndexIterator::Hit> hits{{2,4.0}, {3,9.0}, {5,1.0}, {8,16.0}, {9,36.0}};
auto md = MatchData::makeTestInstance(2, 2);
auto &tfmd = *(md->resolveTermField(0));
- auto search = NnsIndexIterator::create(tfmd, hits);
+ auto search = NnsIndexIterator::create(tfmd, hits, euclid_d.get());
uint32_t docid = 1;
search->initFullRange();
bool match = search->seek(docid);