diff options
author | Arne Juul <arnej@verizonmedia.com> | 2020-07-14 06:42:52 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2020-07-15 15:39:23 +0000 |
commit | 9534d9ef4d74017ff4ef0849924f751403979cbb (patch) | |
tree | 54bfac4a2cb6d39e64eb8ee920ac12307d6a0100 /searchlib/src/tests/common | |
parent | 909c3b8f302cbe615d38139d202e809c9f6079a4 (diff) |
finish rewrite to use GeoLocation
Diffstat (limited to 'searchlib/src/tests/common')
-rw-r--r-- | searchlib/src/tests/common/location/geo_location_test.cpp | 127 | ||||
-rw-r--r-- | searchlib/src/tests/common/location/location_test.cpp | 88 |
2 files changed, 110 insertions, 105 deletions
diff --git a/searchlib/src/tests/common/location/geo_location_test.cpp b/searchlib/src/tests/common/location/geo_location_test.cpp index b29133172df..d639a44c0a4 100644 --- a/searchlib/src/tests/common/location/geo_location_test.cpp +++ b/searchlib/src/tests/common/location/geo_location_test.cpp @@ -1,9 +1,12 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <stdio.h> +#include <vespa/searchlib/common/geo_location.h> #include <vespa/searchlib/common/geo_location_spec.h> +#include <vespa/searchlib/common/geo_location_parser.h> #include <vespa/vespalib/gtest/gtest.h> +using search::common::GeoLocation; using search::common::GeoLocationParser; using search::common::GeoLocationSpec; @@ -12,10 +15,10 @@ bool is_parseable(const char *str) { return parser.parseOldFormat(str); } -GeoLocationSpec parse(const char *str) { +GeoLocation parse(const char *str) { GeoLocationParser parser; EXPECT_TRUE(parser.parseOldFormat(str)); - return parser.spec(); + return parser.getGeoLocation(); } TEST(GeoLocationSpec, malformed_bounding_boxes_are_not_parseable) { @@ -43,94 +46,94 @@ TEST(GeoLocationSpec, malformed_circles_are_not_parseable) { TEST(GeoLocationSpec, bounding_boxes_can_be_parsed) { auto loc = parse("[2,10,20,30,40]"); - EXPECT_EQ(false, loc.hasPoint()); - EXPECT_EQ(true, loc.hasBoundingBox()); - EXPECT_EQ(0u, loc.getXAspect()); - EXPECT_EQ(0, loc.getX()); - EXPECT_EQ(0, loc.getY()); - EXPECT_EQ(std::numeric_limits<uint32_t>::max(), loc.getRadius()); - EXPECT_EQ(10, loc.getMinX()); - EXPECT_EQ(20, loc.getMinY()); - EXPECT_EQ(30, loc.getMaxX()); - EXPECT_EQ(40, loc.getMaxY()); + EXPECT_EQ(false, loc.has_point); + EXPECT_EQ(true, loc.bounding_box.active()); + EXPECT_EQ(0u, loc.x_aspect.multiplier); + EXPECT_EQ(0, loc.point.x); + EXPECT_EQ(0, loc.point.y); + EXPECT_EQ(std::numeric_limits<uint32_t>::max(), loc.radius); + EXPECT_EQ(10, loc.bounding_box.x.lo); + EXPECT_EQ(20, loc.bounding_box.y.lo); + EXPECT_EQ(30, loc.bounding_box.x.hi); + EXPECT_EQ(40, loc.bounding_box.y.hi); } TEST(GeoLocationSpec, circles_can_be_parsed) { auto loc = parse("(2,10,20,5,0,0,0)"); - EXPECT_EQ(true, loc.hasPoint()); - EXPECT_EQ(true, loc.hasBoundingBox()); - EXPECT_EQ(0u, loc.getXAspect()); - EXPECT_EQ(10, loc.getX()); - EXPECT_EQ(20, loc.getY()); - EXPECT_EQ(5u, loc.getRadius()); - EXPECT_EQ(5, loc.getMinX()); - EXPECT_EQ(15, loc.getMinY()); - EXPECT_EQ(15, loc.getMaxX()); - EXPECT_EQ(25, loc.getMaxY()); + EXPECT_EQ(true, loc.has_point); + EXPECT_EQ(true, loc.bounding_box.active()); + EXPECT_EQ(0u, loc.x_aspect.multiplier); + EXPECT_EQ(10, loc.point.x); + EXPECT_EQ(20, loc.point.y); + EXPECT_EQ(5u, loc.radius); + EXPECT_EQ(5, loc.bounding_box.x.lo); + EXPECT_EQ(15, loc.bounding_box.y.lo); + EXPECT_EQ(15, loc.bounding_box.x.hi); + EXPECT_EQ(25, loc.bounding_box.y.hi); } TEST(GeoLocationSpec, circles_can_have_aspect_ratio) { auto loc = parse("(2,10,20,5,0,0,0,2147483648)"); - EXPECT_EQ(true, loc.hasPoint()); - EXPECT_EQ(true, loc.hasBoundingBox()); - EXPECT_EQ(2147483648u, loc.getXAspect()); - EXPECT_EQ(10, loc.getX()); - EXPECT_EQ(20, loc.getY()); - EXPECT_EQ(5u, loc.getRadius()); - EXPECT_EQ(-1, loc.getMinX()); - EXPECT_EQ(15, loc.getMinY()); - EXPECT_EQ(21, loc.getMaxX()); - EXPECT_EQ(25, loc.getMaxY()); + EXPECT_EQ(true, loc.has_point); + EXPECT_EQ(true, loc.bounding_box.active()); + EXPECT_EQ(2147483648u, loc.x_aspect.multiplier); + EXPECT_EQ(10, loc.point.x); + EXPECT_EQ(20, loc.point.y); + EXPECT_EQ(5u, loc.radius); + EXPECT_EQ(-1, loc.bounding_box.x.lo); + EXPECT_EQ(15, loc.bounding_box.y.lo); + EXPECT_EQ(21, loc.bounding_box.x.hi); + EXPECT_EQ(25, loc.bounding_box.y.hi); } TEST(GeoLocationSpec, bounding_box_can_be_specified_after_circle) { auto loc = parse("(2,10,20,5,0,0,0)[2,10,20,30,40]"); - EXPECT_EQ(true, loc.hasPoint()); - EXPECT_EQ(true, loc.hasBoundingBox()); - EXPECT_EQ(0u, loc.getXAspect()); - EXPECT_EQ(10, loc.getX()); - EXPECT_EQ(20, loc.getY()); - EXPECT_EQ(5u, loc.getRadius()); - EXPECT_EQ(10, loc.getMinX()); - EXPECT_EQ(20, loc.getMinY()); - EXPECT_EQ(15, loc.getMaxX()); - EXPECT_EQ(25, loc.getMaxY()); + EXPECT_EQ(true, loc.has_point); + EXPECT_EQ(true, loc.bounding_box.active()); + EXPECT_EQ(0u, loc.x_aspect.multiplier); + EXPECT_EQ(10, loc.point.x); + EXPECT_EQ(20, loc.point.y); + EXPECT_EQ(5u, loc.radius); + EXPECT_EQ(10, loc.bounding_box.x.lo); + EXPECT_EQ(20, loc.bounding_box.y.lo); + EXPECT_EQ(15, loc.bounding_box.x.hi); + EXPECT_EQ(25, loc.bounding_box.y.hi); } TEST(GeoLocationSpec, circles_can_be_specified_after_bounding_box) { auto loc = parse("[2,10,20,30,40](2,10,20,5,0,0,0)"); - EXPECT_EQ(true, loc.hasPoint()); - EXPECT_EQ(true, loc.hasBoundingBox()); - EXPECT_EQ(0u, loc.getXAspect()); - EXPECT_EQ(10, loc.getX()); - EXPECT_EQ(20, loc.getY()); - EXPECT_EQ(5u, loc.getRadius()); - EXPECT_EQ(10, loc.getMinX()); - EXPECT_EQ(20, loc.getMinY()); - EXPECT_EQ(15, loc.getMaxX()); - EXPECT_EQ(25, loc.getMaxY()); + EXPECT_EQ(true, loc.has_point); + EXPECT_EQ(true, loc.bounding_box.active()); + EXPECT_EQ(0u, loc.x_aspect.multiplier); + EXPECT_EQ(10, loc.point.x); + EXPECT_EQ(20, loc.point.y); + EXPECT_EQ(5u, loc.radius); + EXPECT_EQ(10, loc.bounding_box.x.lo); + EXPECT_EQ(20, loc.bounding_box.y.lo); + EXPECT_EQ(15, loc.bounding_box.x.hi); + EXPECT_EQ(25, loc.bounding_box.y.hi); } TEST(GeoLocationSpec, santa_search_gives_non_wrapped_bounding_box) { auto loc = parse("(2,122163600,89998536,290112,4,2000,0,109704)"); - EXPECT_GE(loc.getMaxX(), loc.getMinX()); - EXPECT_GE(loc.getMaxY(), loc.getMinY()); + EXPECT_GE(loc.bounding_box.x.hi, loc.bounding_box.x.lo); + EXPECT_GE(loc.bounding_box.y.hi, loc.bounding_box.y.lo); } TEST(GeoLocationSpec, near_boundary_search_gives_non_wrapped_bounding_box) { auto loc1 = parse("(2,2000000000,2000000000,3000000000,0,1,0)"); // fprintf(stderr, "positive near boundary: %s\n", loc1.getLocationString().c_str()); - EXPECT_GE(loc1.getMaxX(), loc1.getMinX()); - EXPECT_GE(loc1.getMaxY(), loc1.getMinY()); - EXPECT_EQ(std::numeric_limits<int32_t>::max(), loc1.getMaxY()); - EXPECT_EQ(std::numeric_limits<int32_t>::max(), loc1.getMaxY()); + EXPECT_GE(loc1.bounding_box.x.hi, loc1.bounding_box.x.lo); + EXPECT_GE(loc1.bounding_box.y.hi, loc1.bounding_box.y.lo); + EXPECT_EQ(std::numeric_limits<int32_t>::max(), loc1.bounding_box.y.hi); + EXPECT_EQ(std::numeric_limits<int32_t>::max(), loc1.bounding_box.y.hi); auto loc2 = parse("(2,-2000000000,-2000000000,3000000000,0,1,0)"); // fprintf(stderr, "negative near boundary: %s\n", loc2.getLocationString().c_str()); - EXPECT_GE(loc2.getMaxX(), loc2.getMinX()); - EXPECT_GE(loc2.getMaxY(), loc2.getMinY()); - EXPECT_EQ(std::numeric_limits<int32_t>::min(), loc2.getMinX()); - EXPECT_EQ(std::numeric_limits<int32_t>::min(), loc2.getMinY()); + EXPECT_GE(loc2.bounding_box.x.hi, loc2.bounding_box.x.lo); + EXPECT_GE(loc2.bounding_box.y.hi, loc2.bounding_box.y.lo); + EXPECT_EQ(std::numeric_limits<int32_t>::min(), loc2.bounding_box.x.lo); + EXPECT_EQ(std::numeric_limits<int32_t>::min(), loc2.bounding_box.y.lo); } GTEST_MAIN_RUN_ALL_TESTS() diff --git a/searchlib/src/tests/common/location/location_test.cpp b/searchlib/src/tests/common/location/location_test.cpp index 79eec441d62..c25dce38a4a 100644 --- a/searchlib/src/tests/common/location/location_test.cpp +++ b/searchlib/src/tests/common/location/location_test.cpp @@ -1,6 +1,8 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <vespa/vespalib/testkit/test_kit.h> #include <vespa/searchlib/common/location.h> +#include <vespa/searchlib/common/geo_location_spec.h> +#include <vespa/searchlib/common/geo_location_parser.h> #include <vespa/searchlib/attribute/attributeguard.h> using search::common::Location; @@ -12,83 +14,83 @@ Location parse(const char *str) { if (!EXPECT_TRUE(parser.parseOldFormat(str))) { fprintf(stderr, " parse error: %s\n", parser.getParseError()); } - return Location(parser.spec()); + return Location(parser.getGeoLocation()); } TEST("require that bounding boxes can be parsed") { Location loc = parse("[2,10,20,30,40]"); EXPECT_EQUAL(false, loc.getRankOnDistance()); EXPECT_EQUAL(true, loc.getPruneOnDistance()); - EXPECT_EQUAL(0u, loc.getXAspect()); - EXPECT_EQUAL(0, loc.getX()); - EXPECT_EQUAL(0, loc.getY()); - EXPECT_EQUAL(std::numeric_limits<uint32_t>::max(), loc.getRadius()); - EXPECT_EQUAL(10, loc.getMinX()); - EXPECT_EQUAL(20, loc.getMinY()); - EXPECT_EQUAL(30, loc.getMaxX()); - EXPECT_EQUAL(40, loc.getMaxY()); + EXPECT_EQUAL(0u, loc.x_aspect.multiplier); + EXPECT_EQUAL(0, loc.point.x); + EXPECT_EQUAL(0, loc.point.y); + EXPECT_EQUAL(std::numeric_limits<uint32_t>::max(), loc.radius); + EXPECT_EQUAL(10, loc.bounding_box.x.lo); + EXPECT_EQUAL(20, loc.bounding_box.y.lo); + EXPECT_EQUAL(30, loc.bounding_box.x.hi); + EXPECT_EQUAL(40, loc.bounding_box.y.hi); } TEST("require that circles can be parsed") { Location loc = parse("(2,10,20,5,0,0,0)"); EXPECT_EQUAL(true, loc.getRankOnDistance()); EXPECT_EQUAL(true, loc.getPruneOnDistance()); - EXPECT_EQUAL(0u, loc.getXAspect()); - EXPECT_EQUAL(10, loc.getX()); - EXPECT_EQUAL(20, loc.getY()); - EXPECT_EQUAL(5u, loc.getRadius()); - EXPECT_EQUAL(5, loc.getMinX()); - EXPECT_EQUAL(15, loc.getMinY()); - EXPECT_EQUAL(15, loc.getMaxX()); - EXPECT_EQUAL(25, loc.getMaxY()); + EXPECT_EQUAL(0u, loc.x_aspect.multiplier); + EXPECT_EQUAL(10, loc.point.x); + EXPECT_EQUAL(20, loc.point.y); + EXPECT_EQUAL(5u, loc.radius); + EXPECT_EQUAL(5, loc.bounding_box.x.lo); + EXPECT_EQUAL(15, loc.bounding_box.y.lo); + EXPECT_EQUAL(15, loc.bounding_box.x.hi); + EXPECT_EQUAL(25, loc.bounding_box.y.hi); } TEST("require that circles can have aspect ratio") { Location loc = parse("(2,10,20,5,0,0,0,2147483648)"); EXPECT_EQUAL(true, loc.getRankOnDistance()); EXPECT_EQUAL(true, loc.getPruneOnDistance()); - EXPECT_EQUAL(2147483648u, loc.getXAspect()); - EXPECT_EQUAL(10, loc.getX()); - EXPECT_EQUAL(20, loc.getY()); - EXPECT_EQUAL(5u, loc.getRadius()); - EXPECT_EQUAL(-1, loc.getMinX()); - EXPECT_EQUAL(15, loc.getMinY()); - EXPECT_EQUAL(21, loc.getMaxX()); - EXPECT_EQUAL(25, loc.getMaxY()); + EXPECT_EQUAL(2147483648u, loc.x_aspect.multiplier); + EXPECT_EQUAL(10, loc.point.x); + EXPECT_EQUAL(20, loc.point.y); + EXPECT_EQUAL(5u, loc.radius); + EXPECT_EQUAL(-1, loc.bounding_box.x.lo); + EXPECT_EQUAL(15, loc.bounding_box.y.lo); + EXPECT_EQUAL(21, loc.bounding_box.x.hi); + EXPECT_EQUAL(25, loc.bounding_box.y.hi); } TEST("require that bounding box can be specified after circle") { Location loc = parse("(2,10,20,5,0,0,0)[2,10,20,30,40]"); EXPECT_EQUAL(true, loc.getRankOnDistance()); EXPECT_EQUAL(true, loc.getPruneOnDistance()); - EXPECT_EQUAL(0u, loc.getXAspect()); - EXPECT_EQUAL(10, loc.getX()); - EXPECT_EQUAL(20, loc.getY()); - EXPECT_EQUAL(5u, loc.getRadius()); - EXPECT_EQUAL(10, loc.getMinX()); - EXPECT_EQUAL(20, loc.getMinY()); - EXPECT_EQUAL(15, loc.getMaxX()); - EXPECT_EQUAL(25, loc.getMaxY()); + EXPECT_EQUAL(0u, loc.x_aspect.multiplier); + EXPECT_EQUAL(10, loc.point.x); + EXPECT_EQUAL(20, loc.point.y); + EXPECT_EQUAL(5u, loc.radius); + EXPECT_EQUAL(10, loc.bounding_box.x.lo); + EXPECT_EQUAL(20, loc.bounding_box.y.lo); + EXPECT_EQUAL(15, loc.bounding_box.x.hi); + EXPECT_EQUAL(25, loc.bounding_box.y.hi); } TEST("require that circles can be specified after bounding box") { Location loc = parse("[2,10,20,30,40](2,10,20,5,0,0,0)"); EXPECT_EQUAL(true, loc.getRankOnDistance()); EXPECT_EQUAL(true, loc.getPruneOnDistance()); - EXPECT_EQUAL(0u, loc.getXAspect()); - EXPECT_EQUAL(10, loc.getX()); - EXPECT_EQUAL(20, loc.getY()); - EXPECT_EQUAL(5u, loc.getRadius()); - EXPECT_EQUAL(10, loc.getMinX()); - EXPECT_EQUAL(20, loc.getMinY()); - EXPECT_EQUAL(15, loc.getMaxX()); - EXPECT_EQUAL(25, loc.getMaxY()); + EXPECT_EQUAL(0u, loc.x_aspect.multiplier); + EXPECT_EQUAL(10, loc.point.x); + EXPECT_EQUAL(20, loc.point.y); + EXPECT_EQUAL(5u, loc.radius); + EXPECT_EQUAL(10, loc.bounding_box.x.lo); + EXPECT_EQUAL(20, loc.bounding_box.y.lo); + EXPECT_EQUAL(15, loc.bounding_box.x.hi); + EXPECT_EQUAL(25, loc.bounding_box.y.hi); } TEST("require that santa search gives non-wrapped bounding box") { Location loc = parse("(2,122163600,89998536,290112,4,2000,0,109704)"); - EXPECT_GREATER_EQUAL(loc.getMaxX(), loc.getMinX()); - EXPECT_GREATER_EQUAL(loc.getMaxY(), loc.getMinY()); + EXPECT_GREATER_EQUAL(loc.bounding_box.x.hi, loc.bounding_box.x.lo); + EXPECT_GREATER_EQUAL(loc.bounding_box.y.hi, loc.bounding_box.y.lo); } TEST_MAIN() { TEST_RUN_ALL(); } |