summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorryanhamley <ryan.hamley@mapbox.com>2018-10-10 13:15:24 -0700
committerryanhamley <ryan.hamley@mapbox.com>2018-10-10 13:15:24 -0700
commit391331f3c554d18d0ef48fcfc7a89f5b5f51621b (patch)
tree8b220e33806afb4e44fa68ea6ca8df426f0357d6
parentbf785f57e6f3b68bde3f5e93b58870cf348e97b0 (diff)
downloadqtlocation-mapboxgl-391331f3c554d18d0ef48fcfc7a89f5b5f51621b.tar.gz
[Core] Add tests for bounding box scenarios
-rw-r--r--test/map/transform.test.cpp6
-rw-r--r--test/util/geo.test.cpp31
2 files changed, 35 insertions, 2 deletions
diff --git a/test/map/transform.test.cpp b/test/map/transform.test.cpp
index 44b5f49366..0aa87afe52 100644
--- a/test/map/transform.test.cpp
+++ b/test/map/transform.test.cpp
@@ -554,6 +554,7 @@ TEST(Transform, DefaultTransform) {
TEST(Transform, LatLngBounds) {
const LatLng nullIsland {};
const LatLng sanFrancisco { 37.7749, -122.4194 };
+ const LatLng wrappedSanFrancisco { 37.7749, 237.5806};
Transform transform;
transform.resize({ 1000, 1000 });
@@ -579,6 +580,11 @@ TEST(Transform, LatLngBounds) {
ASSERT_EQ(transform.getLatLng(), sanFrancisco);
transform.setLatLngBounds(LatLngBounds::hull({ -90.0, -180.0 }, { 0.0, 180.0 }));
+ // ensure a wrapped coordinate works
+ transform.setLatLng(wrappedSanFrancisco);
+ ASSERT_EQ(transform.getLatLng().latitude(), 0.0);
+ ASSERT_EQ(transform.getLatLng().longitude(), sanFrancisco.longitude());
+
transform.setLatLng(sanFrancisco);
ASSERT_EQ(transform.getLatLng().latitude(), 0.0);
ASSERT_EQ(transform.getLatLng().longitude(), sanFrancisco.longitude());
diff --git a/test/util/geo.test.cpp b/test/util/geo.test.cpp
index 6832ba3486..f1fe3a755d 100644
--- a/test/util/geo.test.cpp
+++ b/test/util/geo.test.cpp
@@ -187,6 +187,33 @@ TEST(LatLng, Boundaries) {
ASSERT_DOUBLE_EQ(0.5, coordinate.longitude());
}
+TEST(LatLngBounds, Antimeridian) {
+ // Bounding box less than 180° that does not cross antimeridian
+ //southwest northeast
+ auto boundsNormalLT = LatLngBounds::hull({-90.0, -20.0},{90.0, 20.0});
+
+ ASSERT_DOUBLE_EQ(-20, boundsNormalLT.west());
+ ASSERT_DOUBLE_EQ(20, boundsNormalLT.east());
+
+ // Bounding box greater than 180° that does not cross antimeridian
+ auto boundsNormalGT = LatLngBounds::hull({-90.0, -100.0},{90.0, 100.0});
+
+ ASSERT_DOUBLE_EQ(-100, boundsNormalGT.west());
+ ASSERT_DOUBLE_EQ(100, boundsNormalGT.east());
+
+ // Bounding box less than 180° that crosses the antimeridian
+ auto boundsAntimeridianLT = LatLngBounds::hull({-90.0, -200.0},{90.0, 160.0});
+
+ ASSERT_DOUBLE_EQ(-200, boundsAntimeridianLT.west());
+ ASSERT_DOUBLE_EQ(160, boundsAntimeridianLT.east());
+
+ // Bounding box greater than 180° that crosses the antimeridian
+ auto boundsAntimeridianGT = LatLngBounds::hull({-90.0, -270.0},{90.0, 0.0});
+
+ ASSERT_DOUBLE_EQ(-270, boundsAntimeridianGT.west());
+ ASSERT_DOUBLE_EQ(0, boundsAntimeridianGT.east());
+}
+
TEST(LatLngBounds, FromTileID) {
{
const LatLngBounds bounds{ CanonicalTileID(0, 0, 0) };
@@ -283,11 +310,11 @@ TEST(LatLngBounds, ContainsBounds_Wrapped) {
auto unwrapped = LatLngBounds::hull({10.0, 170.0}, { -10.0, -175.0});
EXPECT_FALSE(bounds.contains(unwrapped));
EXPECT_FALSE(bounds.contains(unwrapped, LatLng::Wrapped));
-
+
unwrapped = LatLngBounds::hull({10.0, 0.0} , {-10.0, -10.0});
EXPECT_FALSE(bounds.contains(unwrapped));
EXPECT_FALSE(bounds.contains(unwrapped, LatLng::Wrapped));
-
+
unwrapped = LatLngBounds::hull({10.0, -165.0}, {-10.0, -180.0});
EXPECT_TRUE(bounds.contains(unwrapped));
EXPECT_TRUE(bounds.contains(unwrapped, LatLng::Wrapped));