Coordinate system transformer
[ptas] / tests / ut_coordinatesystemtransformer / ut_coordinatesystemtransformer.cpp
diff --git a/tests/ut_coordinatesystemtransformer/ut_coordinatesystemtransformer.cpp b/tests/ut_coordinatesystemtransformer/ut_coordinatesystemtransformer.cpp
new file mode 100644 (file)
index 0000000..4658d60
--- /dev/null
@@ -0,0 +1,73 @@
+#include "coordinatesystemtransformer.h"
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+
+#include "stlhelpers.h"
+
+#include <QPair>
+
+class CoordinateSystemTransformerTest : public ::testing::Test
+{
+public:
+    QList<QPair<QTM_NAMESPACE::QGeoCoordinate, KKJ> > testData;
+
+    CoordinateSystemTransformerTest() {
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.2528, 25.02051), KKJ(6682815, 2556686));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.18713, 24.832), KKJ(6675352, 2546340));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.27414, 25.04465), KKJ(6685213, 2557985));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.2507, 25.01767), KKJ(6682578, 2556532));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.2902, 24.44804), KKJ(6686629, 2524959));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.35033, 25.06718), KKJ(6693721, 2559094));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.25471, 25.02373), KKJ(6683030, 2556861));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.25417, 25.0242), KKJ(6682971, 2556888));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.39737, 25.08981), KKJ(6698983, 2560257));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.28923, 25.12709), KKJ(6686969, 2562518));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.1727, 24.65643), KKJ(6673635, 2536615));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.35133, 25.06764), KKJ(6693833, 2559118));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.34949, 25.06874), KKJ(6693629, 2559182));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.25119, 25.02518), KKJ(6682640, 2556947));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.25196, 25.02294), KKJ(6682723, 2556822));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.34929, 25.06705), KKJ(6693605, 2559089));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.18855, 24.83393), KKJ(6675512, 2546445));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.25091, 25.02547), KKJ(6682609, 2556964));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.25321, 25.0215), KKJ(6682861, 2556740));
+        testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.35291, 25.06559), KKJ(6694007, 2559002));
+    }
+};
+
+TEST_F(CoordinateSystemTransformerTest, WGS84CoordinatesToKKJCoordinates)
+{
+    QListIterator<QPair<QTM_NAMESPACE::QGeoCoordinate, KKJ> > it(testData);
+    while (it.hasNext()) {
+        const QPair<QTM_NAMESPACE::QGeoCoordinate, KKJ> &datum = it.next();
+        KKJ result = CoordinateSystemTransformer::transformToKKJ(datum.first);
+        KKJ expected = datum.second;
+        // Allow one unit difference from the expected
+        int northDiff = abs((long)expected.northing() - (long)result.northing());
+        int eastDiff = abs((long)expected.easting() - (long)result.easting());
+        EXPECT_LE(northDiff, 1);
+        EXPECT_LE(eastDiff, 1);
+    }
+}
+
+TEST_F(CoordinateSystemTransformerTest, KKJCoordinatesToWGS84Coordinates)
+{
+    QListIterator<QPair<QTM_NAMESPACE::QGeoCoordinate, KKJ> > it(testData);
+    while (it.hasNext()) {
+        const QPair<QTM_NAMESPACE::QGeoCoordinate, KKJ> &datum = it.next();
+        QTM_NAMESPACE::QGeoCoordinate result = CoordinateSystemTransformer::transformToWGS84(datum.second);
+        QTM_NAMESPACE::QGeoCoordinate expected = datum.first;
+        // Allow small difference from the expected
+        double latitudeDiff = fabs(expected.latitude() - result.latitude());
+        double longitudeDiff = fabs(expected.longitude() - result.longitude());
+        EXPECT_LE(latitudeDiff, 0.00001);
+        EXPECT_LE(longitudeDiff, 0.00001);
+    }
+}
+
+int main(int argc, char *argv[])
+{
+    ::testing::InitGoogleMock(&argc, argv);
+    return RUN_ALL_TESTS();
+}