Coordinate system transformer
[ptas] / tests / ut_coordinatesystemtransformer / ut_coordinatesystemtransformer.cpp
1 #include "coordinatesystemtransformer.h"
2
3 #include <gmock/gmock.h>
4 #include <gtest/gtest.h>
5
6 #include "stlhelpers.h"
7
8 #include <QPair>
9
10 class CoordinateSystemTransformerTest : public ::testing::Test
11 {
12 public:
13     QList<QPair<QTM_NAMESPACE::QGeoCoordinate, KKJ> > testData;
14
15     CoordinateSystemTransformerTest() {
16         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.2528, 25.02051), KKJ(6682815, 2556686));
17         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.18713, 24.832), KKJ(6675352, 2546340));
18         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.27414, 25.04465), KKJ(6685213, 2557985));
19         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.2507, 25.01767), KKJ(6682578, 2556532));
20         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.2902, 24.44804), KKJ(6686629, 2524959));
21         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.35033, 25.06718), KKJ(6693721, 2559094));
22         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.25471, 25.02373), KKJ(6683030, 2556861));
23         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.25417, 25.0242), KKJ(6682971, 2556888));
24         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.39737, 25.08981), KKJ(6698983, 2560257));
25         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.28923, 25.12709), KKJ(6686969, 2562518));
26         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.1727, 24.65643), KKJ(6673635, 2536615));
27         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.35133, 25.06764), KKJ(6693833, 2559118));
28         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.34949, 25.06874), KKJ(6693629, 2559182));
29         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.25119, 25.02518), KKJ(6682640, 2556947));
30         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.25196, 25.02294), KKJ(6682723, 2556822));
31         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.34929, 25.06705), KKJ(6693605, 2559089));
32         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.18855, 24.83393), KKJ(6675512, 2546445));
33         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.25091, 25.02547), KKJ(6682609, 2556964));
34         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.25321, 25.0215), KKJ(6682861, 2556740));
35         testData << qMakePair(QTM_NAMESPACE::QGeoCoordinate(60.35291, 25.06559), KKJ(6694007, 2559002));
36     }
37 };
38
39 TEST_F(CoordinateSystemTransformerTest, WGS84CoordinatesToKKJCoordinates)
40 {
41     QListIterator<QPair<QTM_NAMESPACE::QGeoCoordinate, KKJ> > it(testData);
42     while (it.hasNext()) {
43         const QPair<QTM_NAMESPACE::QGeoCoordinate, KKJ> &datum = it.next();
44         KKJ result = CoordinateSystemTransformer::transformToKKJ(datum.first);
45         KKJ expected = datum.second;
46         // Allow one unit difference from the expected
47         int northDiff = abs((long)expected.northing() - (long)result.northing());
48         int eastDiff = abs((long)expected.easting() - (long)result.easting());
49         EXPECT_LE(northDiff, 1);
50         EXPECT_LE(eastDiff, 1);
51     }
52 }
53
54 TEST_F(CoordinateSystemTransformerTest, KKJCoordinatesToWGS84Coordinates)
55 {
56     QListIterator<QPair<QTM_NAMESPACE::QGeoCoordinate, KKJ> > it(testData);
57     while (it.hasNext()) {
58         const QPair<QTM_NAMESPACE::QGeoCoordinate, KKJ> &datum = it.next();
59         QTM_NAMESPACE::QGeoCoordinate result = CoordinateSystemTransformer::transformToWGS84(datum.second);
60         QTM_NAMESPACE::QGeoCoordinate expected = datum.first;
61         // Allow small difference from the expected
62         double latitudeDiff = fabs(expected.latitude() - result.latitude());
63         double longitudeDiff = fabs(expected.longitude() - result.longitude());
64         EXPECT_LE(latitudeDiff, 0.00001);
65         EXPECT_LE(longitudeDiff, 0.00001);
66     }
67 }
68
69 int main(int argc, char *argv[])
70 {
71     ::testing::InitGoogleMock(&argc, argv);
72     return RUN_ALL_TESTS();
73 }