diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-06-10 18:59:04 +0300 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-06-13 10:11:20 +0300 |
commit | 9b6c2e6940ed33a87a20274eda19320e8c688fdf (patch) | |
tree | 949d871c2f159849b0cd4c7955a3c257edd069a0 /test | |
parent | 62d355ab15e292462db6453578e07f06b0eafd6b (diff) | |
download | qtlocation-mapboxgl-9b6c2e6940ed33a87a20274eda19320e8c688fdf.tar.gz |
[test] Added Projection tests
Diffstat (limited to 'test')
-rw-r--r-- | test/test.gypi | 1 | ||||
-rw-r--r-- | test/util/projection.cpp | 68 |
2 files changed, 69 insertions, 0 deletions
diff --git a/test/test.gypi b/test/test.gypi index b7e7b5c32b..d93ecd1f35 100644 --- a/test/test.gypi +++ b/test/test.gypi @@ -32,6 +32,7 @@ 'util/timer.cpp', 'util/token.cpp', 'util/work_queue.cpp', + 'util/projection.cpp', 'algorithm/covered_by_children.cpp', 'algorithm/generate_clip_ids.cpp', diff --git a/test/util/projection.cpp b/test/util/projection.cpp new file mode 100644 index 0000000000..5efba380b3 --- /dev/null +++ b/test/util/projection.cpp @@ -0,0 +1,68 @@ +#include <mbgl/test/util.hpp> + +#include <mbgl/util/constants.hpp> +#include <mbgl/util/geo.hpp> +#include <mbgl/util/projection.hpp> + +#include <limits> + +using namespace mbgl; + +TEST(Projection, MetersPerPixelAtLatitude) { + double zoom = 0; + EXPECT_DOUBLE_EQ(Projection::getMetersPerPixelAtLatitude(0, zoom), 78271.516964020484); + EXPECT_DOUBLE_EQ(Projection::getMetersPerPixelAtLatitude(-util::LATITUDE_MAX, zoom), 6752.2284729446501); + EXPECT_DOUBLE_EQ(Projection::getMetersPerPixelAtLatitude(util::LATITUDE_MAX, zoom), + Projection::getMetersPerPixelAtLatitude(-util::LATITUDE_MAX, zoom)); + + zoom = 20; + EXPECT_DOUBLE_EQ(Projection::getMetersPerPixelAtLatitude(0, zoom), 0.074645535434742435); + EXPECT_DOUBLE_EQ(Projection::getMetersPerPixelAtLatitude(-util::LATITUDE_MAX, zoom), 0.0064394268731543065); + + EXPECT_DOUBLE_EQ(Projection::getMetersPerPixelAtLatitude(std::numeric_limits<double>::lowest(), zoom), + Projection::getMetersPerPixelAtLatitude(std::numeric_limits<double>::max(), zoom)); + + zoom = std::numeric_limits<double>::min(); + EXPECT_DOUBLE_EQ(Projection::getMetersPerPixelAtLatitude(0, zoom), + Projection::getMetersPerPixelAtLatitude(0, util::MIN_ZOOM)); + + zoom = std::numeric_limits<double>::lowest(); + EXPECT_DOUBLE_EQ(Projection::getMetersPerPixelAtLatitude(0, zoom), + Projection::getMetersPerPixelAtLatitude(0, util::MIN_ZOOM)); + + zoom = std::numeric_limits<double>::max(); + EXPECT_DOUBLE_EQ(Projection::getMetersPerPixelAtLatitude(0, zoom), + Projection::getMetersPerPixelAtLatitude(0, util::MAX_ZOOM)); +} + +TEST(Projection, ProjectedMeters) { + const auto southWest = LatLng { -util::LATITUDE_MAX, -util::LONGITUDE_MAX }; + const auto northEast = LatLng { util::LATITUDE_MAX, util::LONGITUDE_MAX }; + + auto latLng = LatLng {}; + auto projectedMeters = Projection::projectedMetersForLatLng(latLng); + EXPECT_EQ(projectedMeters.northing, projectedMeters.easting); + EXPECT_EQ(latLng, Projection::latLngForProjectedMeters(projectedMeters)); + + latLng = LatLng { std::numeric_limits<double>::lowest(), std::numeric_limits<double>::lowest() }; + projectedMeters = Projection::projectedMetersForLatLng(latLng); + EXPECT_EQ(projectedMeters, Projection::projectedMetersForLatLng(southWest)); + EXPECT_DOUBLE_EQ(projectedMeters.northing, -20037508.342789274); + EXPECT_DOUBLE_EQ(projectedMeters.easting, -20037508.342789244); + + latLng = LatLng { std::numeric_limits<double>::max(), std::numeric_limits<double>::max() }; + projectedMeters = Projection::projectedMetersForLatLng(latLng); + EXPECT_EQ(projectedMeters, Projection::projectedMetersForLatLng(northEast)); + EXPECT_DOUBLE_EQ(projectedMeters.northing, -Projection::projectedMetersForLatLng(southWest).northing); + EXPECT_DOUBLE_EQ(projectedMeters.easting, -Projection::projectedMetersForLatLng(southWest).easting); + + projectedMeters = ProjectedMeters { std::numeric_limits<double>::lowest(), std::numeric_limits<double>::lowest() }; + latLng = Projection::latLngForProjectedMeters(projectedMeters); + EXPECT_EQ(latLng.latitude, -util::LATITUDE_MAX); + EXPECT_EQ(latLng.longitude, -util::LONGITUDE_MAX); + + projectedMeters = ProjectedMeters { std::numeric_limits<double>::max(), std::numeric_limits<double>::max() }; + latLng = Projection::latLngForProjectedMeters(projectedMeters); + EXPECT_EQ(latLng.latitude, util::LATITUDE_MAX); + EXPECT_EQ(latLng.longitude, util::LONGITUDE_MAX); +} |