summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2016-06-10 18:59:04 +0300
committerBruno de Oliveira Abinader <bruno@mapbox.com>2016-06-13 10:11:20 +0300
commit9b6c2e6940ed33a87a20274eda19320e8c688fdf (patch)
tree949d871c2f159849b0cd4c7955a3c257edd069a0 /test
parent62d355ab15e292462db6453578e07f06b0eafd6b (diff)
downloadqtlocation-mapboxgl-9b6c2e6940ed33a87a20274eda19320e8c688fdf.tar.gz
[test] Added Projection tests
Diffstat (limited to 'test')
-rw-r--r--test/test.gypi1
-rw-r--r--test/util/projection.cpp68
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);
+}