Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Magidovich <mgsergio@mapswithme.com>2015-12-07 13:52:56 +0300
committerSergey Magidovich <mgsergio@mapswithme.com>2015-12-07 15:15:49 +0300
commit82e7d98a29001ce941f080a716a1054a1876fdf6 (patch)
treeaa18c287e01fc11e241641f69e3e073e261dfb47 /geometry/geometry_tests
parent650c1e5aa448e31028304a6f7cf382a580c333b4 (diff)
Move mercator.hpp to geometry.
Diffstat (limited to 'geometry/geometry_tests')
-rw-r--r--geometry/geometry_tests/geometry_tests.pro5
-rw-r--r--geometry/geometry_tests/latlon_test.cpp2
-rw-r--r--geometry/geometry_tests/mercator_test.cpp85
3 files changed, 88 insertions, 4 deletions
diff --git a/geometry/geometry_tests/geometry_tests.pro b/geometry/geometry_tests/geometry_tests.pro
index 8ad7164d13..3f5bd05170 100644
--- a/geometry/geometry_tests/geometry_tests.pro
+++ b/geometry/geometry_tests/geometry_tests.pro
@@ -6,9 +6,7 @@ CONFIG -= app_bundle
TEMPLATE = app
ROOT_DIR = ../..
-# TODO(AlexZ): latlon.hpp introduces indexer dependency for tests,
-# because of indexer/mercator.hpp. Either move latlon to indexer, or mercator to geometry.
-DEPENDENCIES = indexer geometry base
+DEPENDENCIES = geometry base
include($$ROOT_DIR/common.pri)
@@ -28,6 +26,7 @@ SOURCES += \
distance_test.cpp \
intersect_test.cpp \
latlon_test.cpp \
+ mercator_test.cpp \
packer_test.cpp \
point_test.cpp \
pointu_to_uint64_test.cpp \
diff --git a/geometry/geometry_tests/latlon_test.cpp b/geometry/geometry_tests/latlon_test.cpp
index e57cbbbd32..5242c8a2ba 100644
--- a/geometry/geometry_tests/latlon_test.cpp
+++ b/geometry/geometry_tests/latlon_test.cpp
@@ -1,7 +1,7 @@
#include "testing/testing.hpp"
#include "geometry/latlon.hpp"
#include "geometry/point2d.hpp"
-#include "indexer/mercator.hpp"
+#include "geometry/mercator.hpp"
UNIT_TEST(LatLonPointConstructorTest)
{
diff --git a/geometry/geometry_tests/mercator_test.cpp b/geometry/geometry_tests/mercator_test.cpp
new file mode 100644
index 0000000000..add1f33929
--- /dev/null
+++ b/geometry/geometry_tests/mercator_test.cpp
@@ -0,0 +1,85 @@
+#include "base/SRC_FIRST.hpp"
+
+#include "testing/testing.hpp"
+
+#include "geometry/mercator.hpp"
+
+#include "base/math.hpp"
+#include "base/macros.hpp"
+#include "base/logging.hpp"
+
+
+UNIT_TEST(Mercator_Grid)
+{
+ for (int lat = -85; lat <= 85; ++lat)
+ {
+ for (int lon = -180; lon <= 180; ++lon)
+ {
+ double const x = MercatorBounds::LonToX(lon);
+ double const y = MercatorBounds::LatToY(lat);
+ double const lat1 = MercatorBounds::YToLat(y);
+ double const lon1 = MercatorBounds::XToLon(x);
+
+ // Normal assumption for any projection.
+ TEST_ALMOST_EQUAL_ULPS(static_cast<double>(lat), lat1, ());
+ TEST_ALMOST_EQUAL_ULPS(static_cast<double>(lon), lon1, ());
+
+ // x is actually lon unmodified.
+ TEST_ALMOST_EQUAL_ULPS(x, static_cast<double>(lon), ());
+ }
+ }
+}
+
+UNIT_TEST(Mercator_DirectInferseF)
+{
+ double const eps = 0.0000001;
+ double lon = 63.45421;
+ double x = MercatorBounds::LonToX(lon);
+ double lon1 = MercatorBounds::XToLon(x);
+ TEST_LESS(fabs(lon - lon1), eps, ("Too big round error"));
+ double lat = 34.28754;
+ double y = MercatorBounds::LatToY(lat);
+ double lat1 = MercatorBounds::YToLat(y);
+ TEST_LESS(fabs(lat - lat1), eps, ("Too big round error"));
+ TEST_LESS(fabs(MercatorBounds::maxX - MercatorBounds::maxY), eps, ("Non-square maxX and maxY"));
+ TEST_LESS(fabs(MercatorBounds::minX - MercatorBounds::minY), eps, ("Non-square minX and minY"));
+}
+
+UNIT_TEST(Mercator_ErrorToRadius)
+{
+ double const points[] = { -85.0, -45.0, -10.0, -1.0, -0.003, 0.0, 0.003, 1.0, 10.0, 45.0, 85.0 };
+
+ double const error1 = 1.0; // 1 metre
+ double const error10 = 10.0; // 10 metres
+
+ for (size_t i = 0; i < ARRAY_SIZE(points); ++i)
+ {
+ for (size_t j = 0; j < ARRAY_SIZE(points); ++j)
+ {
+ double const lon = points[i];
+ double const lat = points[j];
+ m2::PointD const mercPoint(MercatorBounds::LonToX(lon), MercatorBounds::LatToY(lat));
+
+ m2::RectD const radius1 = MercatorBounds::MetresToXY(lon, lat, error1);
+ TEST(radius1.IsPointInside(mercPoint), (lat, lon));
+ TEST(radius1.Center().EqualDxDy(mercPoint, 1.0E-8), ());
+
+ m2::RectD const radius10 = MercatorBounds::MetresToXY(lon, lat, error10);
+ TEST(radius10.IsPointInside(mercPoint), (lat, lon));
+ TEST(radius10.Center().EqualDxDy(mercPoint, 1.0E-8), ());
+
+ TEST_EQUAL(m2::Add(radius10, radius1), radius10, (lat, lon));
+
+ TEST(radius10.IsPointInside(radius1.LeftTop()), (lat, lon));
+ TEST(radius10.IsPointInside(radius1.LeftBottom()), (lat, lon));
+ TEST(radius10.IsPointInside(radius1.RightTop()), (lat, lon));
+ TEST(radius10.IsPointInside(radius1.RightBottom()), (lat, lon));
+ }
+ }
+}
+
+UNIT_TEST(Mercator_Sample1)
+{
+ LOG(LINFO, (MercatorBounds::XToLon(27.531491200000001385),
+ MercatorBounds::YToLat(64.392864299248202542)));
+}