diff options
author | ryanhamley <ryan.hamley@mapbox.com> | 2018-10-10 13:15:24 -0700 |
---|---|---|
committer | ryanhamley <ryan.hamley@mapbox.com> | 2018-10-10 13:15:24 -0700 |
commit | 391331f3c554d18d0ef48fcfc7a89f5b5f51621b (patch) | |
tree | 8b220e33806afb4e44fa68ea6ca8df426f0357d6 | |
parent | bf785f57e6f3b68bde3f5e93b58870cf348e97b0 (diff) | |
download | qtlocation-mapboxgl-391331f3c554d18d0ef48fcfc7a89f5b5f51621b.tar.gz |
[Core] Add tests for bounding box scenarios
-rw-r--r-- | test/map/transform.test.cpp | 6 | ||||
-rw-r--r-- | test/util/geo.test.cpp | 31 |
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)); |