summaryrefslogtreecommitdiffstats
path: root/searchlib/src/tests
diff options
context:
space:
mode:
authorArne Juul <arnej@yahooinc.com>2023-04-25 11:51:03 +0000
committerArne Juul <arnej@yahooinc.com>2023-04-25 15:56:19 +0000
commit6201b1979bbc7fd0c156bf77af855b09237a7045 (patch)
tree2739897b18d2b4d061eea5f35d6211c692e4883d /searchlib/src/tests
parentb552ce33c561eef8b4440bb2ddc93b24afb8d16a (diff)
add BoundGeoDistance
Diffstat (limited to 'searchlib/src/tests')
-rw-r--r--searchlib/src/tests/tensor/distance_functions/distance_functions_test.cpp194
1 files changed, 97 insertions, 97 deletions
diff --git a/searchlib/src/tests/tensor/distance_functions/distance_functions_test.cpp b/searchlib/src/tests/tensor/distance_functions/distance_functions_test.cpp
index e5bed3ebae5..74ef23f6eb8 100644
--- a/searchlib/src/tests/tensor/distance_functions/distance_functions_test.cpp
+++ b/searchlib/src/tests/tensor/distance_functions/distance_functions_test.cpp
@@ -18,14 +18,17 @@ using search::attribute::DistanceMetric;
template <typename T>
TypedCells t(const std::vector<T> &v) { return TypedCells(v); }
-void verify_geo_miles(const DistanceFunction *dist_fun,
- const std::vector<double> &p1,
+void verify_geo_miles(const std::vector<double> &p1,
const std::vector<double> &p2,
double exp_miles)
{
+ static GeoDistanceFunctionFactory dff;
TypedCells t1(p1);
TypedCells t2(p2);
- double abstract_distance = dist_fun->calc(t1, t2);
+ auto dist_fun = dff.for_query_vector(t1);
+ double abstract_distance = dist_fun->calc(t2);
+ EXPECT_EQ(dff.for_insertion_vector(t1)->calc(t2), abstract_distance);
+ EXPECT_FLOAT_EQ(dff.for_query_vector(t2)->calc(t1), abstract_distance);
double raw_score = dist_fun->to_rawscore(abstract_distance);
double km = ((1.0/raw_score)-1.0);
double d_miles = km / 1.609344;
@@ -443,9 +446,6 @@ TEST(DistanceFunctionsTest, hamming_gives_expected_score)
TEST(GeoDegreesTest, gives_expected_score)
{
- auto ct = vespalib::eval::CellType::DOUBLE;
- auto geodeg = make_distance_function(DistanceMetric::GeoDegrees, ct);
-
std::vector<double> g1_sfo{37.61, -122.38};
std::vector<double> g2_lhr{51.47, -0.46};
std::vector<double> g3_osl{60.20, 11.08};
@@ -456,7 +456,8 @@ TEST(GeoDegreesTest, gives_expected_score)
std::vector<double> g8_lax{33.94, -118.41};
std::vector<double> g9_jfk{40.64, -73.78};
- double g63_a = geodeg->calc(t(g6_trd), t(g3_osl));
+ auto geodeg = GeoDistanceFunctionFactory().for_query_vector(t(g6_trd));
+ double g63_a = geodeg->calc(t(g3_osl));
double g63_r = geodeg->to_rawscore(g63_a);
double g63_km = ((1.0/g63_r)-1.0);
EXPECT_GT(g63_km, 350);
@@ -466,96 +467,95 @@ TEST(GeoDegreesTest, gives_expected_score)
// Great Circle Mapper for airports using
// a more accurate formula - we should agree
// with < 1.0% deviation
- verify_geo_miles(geodeg.get(), g1_sfo, g1_sfo, 0);
- verify_geo_miles(geodeg.get(), g1_sfo, g2_lhr, 5367);
- verify_geo_miles(geodeg.get(), g1_sfo, g3_osl, 5196);
- verify_geo_miles(geodeg.get(), g1_sfo, g4_gig, 6604);
- verify_geo_miles(geodeg.get(), g1_sfo, g5_hkg, 6927);
- verify_geo_miles(geodeg.get(), g1_sfo, g6_trd, 5012);
- verify_geo_miles(geodeg.get(), g1_sfo, g7_syd, 7417);
- verify_geo_miles(geodeg.get(), g1_sfo, g8_lax, 337);
- verify_geo_miles(geodeg.get(), g1_sfo, g9_jfk, 2586);
-
- verify_geo_miles(geodeg.get(), g2_lhr, g1_sfo, 5367);
- verify_geo_miles(geodeg.get(), g2_lhr, g2_lhr, 0);
- verify_geo_miles(geodeg.get(), g2_lhr, g3_osl, 750);
- verify_geo_miles(geodeg.get(), g2_lhr, g4_gig, 5734);
- verify_geo_miles(geodeg.get(), g2_lhr, g5_hkg, 5994);
- verify_geo_miles(geodeg.get(), g2_lhr, g6_trd, 928);
- verify_geo_miles(geodeg.get(), g2_lhr, g7_syd, 10573);
- verify_geo_miles(geodeg.get(), g2_lhr, g8_lax, 5456);
- verify_geo_miles(geodeg.get(), g2_lhr, g9_jfk, 3451);
-
- verify_geo_miles(geodeg.get(), g3_osl, g1_sfo, 5196);
- verify_geo_miles(geodeg.get(), g3_osl, g2_lhr, 750);
- verify_geo_miles(geodeg.get(), g3_osl, g3_osl, 0);
- verify_geo_miles(geodeg.get(), g3_osl, g4_gig, 6479);
- verify_geo_miles(geodeg.get(), g3_osl, g5_hkg, 5319);
- verify_geo_miles(geodeg.get(), g3_osl, g6_trd, 226);
- verify_geo_miles(geodeg.get(), g3_osl, g7_syd, 9888);
- verify_geo_miles(geodeg.get(), g3_osl, g8_lax, 5345);
- verify_geo_miles(geodeg.get(), g3_osl, g9_jfk, 3687);
-
- verify_geo_miles(geodeg.get(), g4_gig, g1_sfo, 6604);
- verify_geo_miles(geodeg.get(), g4_gig, g2_lhr, 5734);
- verify_geo_miles(geodeg.get(), g4_gig, g3_osl, 6479);
- verify_geo_miles(geodeg.get(), g4_gig, g4_gig, 0);
- verify_geo_miles(geodeg.get(), g4_gig, g5_hkg, 10989);
- verify_geo_miles(geodeg.get(), g4_gig, g6_trd, 6623);
- verify_geo_miles(geodeg.get(), g4_gig, g7_syd, 8414);
- verify_geo_miles(geodeg.get(), g4_gig, g8_lax, 6294);
- verify_geo_miles(geodeg.get(), g4_gig, g9_jfk, 4786);
-
- verify_geo_miles(geodeg.get(), g5_hkg, g1_sfo, 6927);
- verify_geo_miles(geodeg.get(), g5_hkg, g2_lhr, 5994);
- verify_geo_miles(geodeg.get(), g5_hkg, g3_osl, 5319);
- verify_geo_miles(geodeg.get(), g5_hkg, g4_gig, 10989);
- verify_geo_miles(geodeg.get(), g5_hkg, g5_hkg, 0);
- verify_geo_miles(geodeg.get(), g5_hkg, g6_trd, 5240);
- verify_geo_miles(geodeg.get(), g5_hkg, g7_syd, 4581);
- verify_geo_miles(geodeg.get(), g5_hkg, g8_lax, 7260);
- verify_geo_miles(geodeg.get(), g5_hkg, g9_jfk, 8072);
-
- verify_geo_miles(geodeg.get(), g6_trd, g1_sfo, 5012);
- verify_geo_miles(geodeg.get(), g6_trd, g2_lhr, 928);
- verify_geo_miles(geodeg.get(), g6_trd, g3_osl, 226);
- verify_geo_miles(geodeg.get(), g6_trd, g4_gig, 6623);
- verify_geo_miles(geodeg.get(), g6_trd, g5_hkg, 5240);
- verify_geo_miles(geodeg.get(), g6_trd, g6_trd, 0);
- verify_geo_miles(geodeg.get(), g6_trd, g7_syd, 9782);
- verify_geo_miles(geodeg.get(), g6_trd, g8_lax, 5171);
- verify_geo_miles(geodeg.get(), g6_trd, g9_jfk, 3611);
-
- verify_geo_miles(geodeg.get(), g7_syd, g1_sfo, 7417);
- verify_geo_miles(geodeg.get(), g7_syd, g2_lhr, 10573);
- verify_geo_miles(geodeg.get(), g7_syd, g3_osl, 9888);
- verify_geo_miles(geodeg.get(), g7_syd, g4_gig, 8414);
- verify_geo_miles(geodeg.get(), g7_syd, g5_hkg, 4581);
- verify_geo_miles(geodeg.get(), g7_syd, g6_trd, 9782);
- verify_geo_miles(geodeg.get(), g7_syd, g7_syd, 0);
- verify_geo_miles(geodeg.get(), g7_syd, g8_lax, 7488);
- verify_geo_miles(geodeg.get(), g7_syd, g9_jfk, 9950);
-
- verify_geo_miles(geodeg.get(), g8_lax, g1_sfo, 337);
- verify_geo_miles(geodeg.get(), g8_lax, g2_lhr, 5456);
- verify_geo_miles(geodeg.get(), g8_lax, g3_osl, 5345);
- verify_geo_miles(geodeg.get(), g8_lax, g4_gig, 6294);
- verify_geo_miles(geodeg.get(), g8_lax, g5_hkg, 7260);
- verify_geo_miles(geodeg.get(), g8_lax, g6_trd, 5171);
- verify_geo_miles(geodeg.get(), g8_lax, g7_syd, 7488);
- verify_geo_miles(geodeg.get(), g8_lax, g8_lax, 0);
- verify_geo_miles(geodeg.get(), g8_lax, g9_jfk, 2475);
-
- verify_geo_miles(geodeg.get(), g9_jfk, g1_sfo, 2586);
- verify_geo_miles(geodeg.get(), g9_jfk, g2_lhr, 3451);
- verify_geo_miles(geodeg.get(), g9_jfk, g3_osl, 3687);
- verify_geo_miles(geodeg.get(), g9_jfk, g4_gig, 4786);
- verify_geo_miles(geodeg.get(), g9_jfk, g5_hkg, 8072);
- verify_geo_miles(geodeg.get(), g9_jfk, g6_trd, 3611);
- verify_geo_miles(geodeg.get(), g9_jfk, g7_syd, 9950);
- verify_geo_miles(geodeg.get(), g9_jfk, g8_lax, 2475);
- verify_geo_miles(geodeg.get(), g9_jfk, g9_jfk, 0);
-
+ verify_geo_miles(g1_sfo, g1_sfo, 0);
+ verify_geo_miles(g1_sfo, g2_lhr, 5367);
+ verify_geo_miles(g1_sfo, g3_osl, 5196);
+ verify_geo_miles(g1_sfo, g4_gig, 6604);
+ verify_geo_miles(g1_sfo, g5_hkg, 6927);
+ verify_geo_miles(g1_sfo, g6_trd, 5012);
+ verify_geo_miles(g1_sfo, g7_syd, 7417);
+ verify_geo_miles(g1_sfo, g8_lax, 337);
+ verify_geo_miles(g1_sfo, g9_jfk, 2586);
+
+ verify_geo_miles(g2_lhr, g1_sfo, 5367);
+ verify_geo_miles(g2_lhr, g2_lhr, 0);
+ verify_geo_miles(g2_lhr, g3_osl, 750);
+ verify_geo_miles(g2_lhr, g4_gig, 5734);
+ verify_geo_miles(g2_lhr, g5_hkg, 5994);
+ verify_geo_miles(g2_lhr, g6_trd, 928);
+ verify_geo_miles(g2_lhr, g7_syd, 10573);
+ verify_geo_miles(g2_lhr, g8_lax, 5456);
+ verify_geo_miles(g2_lhr, g9_jfk, 3451);
+
+ verify_geo_miles(g3_osl, g1_sfo, 5196);
+ verify_geo_miles(g3_osl, g2_lhr, 750);
+ verify_geo_miles(g3_osl, g3_osl, 0);
+ verify_geo_miles(g3_osl, g4_gig, 6479);
+ verify_geo_miles(g3_osl, g5_hkg, 5319);
+ verify_geo_miles(g3_osl, g6_trd, 226);
+ verify_geo_miles(g3_osl, g7_syd, 9888);
+ verify_geo_miles(g3_osl, g8_lax, 5345);
+ verify_geo_miles(g3_osl, g9_jfk, 3687);
+
+ verify_geo_miles(g4_gig, g1_sfo, 6604);
+ verify_geo_miles(g4_gig, g2_lhr, 5734);
+ verify_geo_miles(g4_gig, g3_osl, 6479);
+ verify_geo_miles(g4_gig, g4_gig, 0);
+ verify_geo_miles(g4_gig, g5_hkg, 10989);
+ verify_geo_miles(g4_gig, g6_trd, 6623);
+ verify_geo_miles(g4_gig, g7_syd, 8414);
+ verify_geo_miles(g4_gig, g8_lax, 6294);
+ verify_geo_miles(g4_gig, g9_jfk, 4786);
+
+ verify_geo_miles(g5_hkg, g1_sfo, 6927);
+ verify_geo_miles(g5_hkg, g2_lhr, 5994);
+ verify_geo_miles(g5_hkg, g3_osl, 5319);
+ verify_geo_miles(g5_hkg, g4_gig, 10989);
+ verify_geo_miles(g5_hkg, g5_hkg, 0);
+ verify_geo_miles(g5_hkg, g6_trd, 5240);
+ verify_geo_miles(g5_hkg, g7_syd, 4581);
+ verify_geo_miles(g5_hkg, g8_lax, 7260);
+ verify_geo_miles(g5_hkg, g9_jfk, 8072);
+
+ verify_geo_miles(g6_trd, g1_sfo, 5012);
+ verify_geo_miles(g6_trd, g2_lhr, 928);
+ verify_geo_miles(g6_trd, g3_osl, 226);
+ verify_geo_miles(g6_trd, g4_gig, 6623);
+ verify_geo_miles(g6_trd, g5_hkg, 5240);
+ verify_geo_miles(g6_trd, g6_trd, 0);
+ verify_geo_miles(g6_trd, g7_syd, 9782);
+ verify_geo_miles(g6_trd, g8_lax, 5171);
+ verify_geo_miles(g6_trd, g9_jfk, 3611);
+
+ verify_geo_miles(g7_syd, g1_sfo, 7417);
+ verify_geo_miles(g7_syd, g2_lhr, 10573);
+ verify_geo_miles(g7_syd, g3_osl, 9888);
+ verify_geo_miles(g7_syd, g4_gig, 8414);
+ verify_geo_miles(g7_syd, g5_hkg, 4581);
+ verify_geo_miles(g7_syd, g6_trd, 9782);
+ verify_geo_miles(g7_syd, g7_syd, 0);
+ verify_geo_miles(g7_syd, g8_lax, 7488);
+ verify_geo_miles(g7_syd, g9_jfk, 9950);
+
+ verify_geo_miles(g8_lax, g1_sfo, 337);
+ verify_geo_miles(g8_lax, g2_lhr, 5456);
+ verify_geo_miles(g8_lax, g3_osl, 5345);
+ verify_geo_miles(g8_lax, g4_gig, 6294);
+ verify_geo_miles(g8_lax, g5_hkg, 7260);
+ verify_geo_miles(g8_lax, g6_trd, 5171);
+ verify_geo_miles(g8_lax, g7_syd, 7488);
+ verify_geo_miles(g8_lax, g8_lax, 0);
+ verify_geo_miles(g8_lax, g9_jfk, 2475);
+
+ verify_geo_miles(g9_jfk, g1_sfo, 2586);
+ verify_geo_miles(g9_jfk, g2_lhr, 3451);
+ verify_geo_miles(g9_jfk, g3_osl, 3687);
+ verify_geo_miles(g9_jfk, g4_gig, 4786);
+ verify_geo_miles(g9_jfk, g5_hkg, 8072);
+ verify_geo_miles(g9_jfk, g6_trd, 3611);
+ verify_geo_miles(g9_jfk, g7_syd, 9950);
+ verify_geo_miles(g9_jfk, g8_lax, 2475);
+ verify_geo_miles(g9_jfk, g9_jfk, 0);
}
GTEST_MAIN_RUN_ALL_TESTS()