Unit tests for GeoCoordinate operator- and distanceTo()
authorSami Rämö <sami.ramo@ixonos.com>
Mon, 2 Aug 2010 12:10:32 +0000 (15:10 +0300)
committerSami Rämö <sami.ramo@ixonos.com>
Mon, 2 Aug 2010 12:24:56 +0000 (15:24 +0300)
 - Reviewed by Pekka Nissinen

tests/coordinates/geocoordinate/testgeocoordinate.cpp

index 7bbd014..222af82 100644 (file)
@@ -40,11 +40,14 @@ private Q_SLOTS:
     void constructors();
     void conversion();
     void conversion_data();
+    void distanceTo();
+    void distanceTo_data();
     void isNullAndIsValid();
     void isValid();
     void isValid_data();
     void settersAndGetters();
     void streamOperators();
+    void subtractOperator();
 };
 
 // for formatting the output of double valuest into the test log
@@ -96,9 +99,41 @@ void TestGeoCoordinate::conversion_data()
                                                          - ONE_SCENE_PIXEL_WIDTH_IN_DEGREES;
 
     QTest::newRow("bottom right") << SceneCoordinate(OSM_MAP_MAX_PIXEL_X, OSM_MAP_MAX_PIXEL_Y)
-                                  << GeoCoordinate(OSM_MIN_LATITUDE, LAST_SCENE_HORIZONTAL_PIXEL_LONGITUDE);
+                                  << GeoCoordinate(OSM_MIN_LATITUDE,
+                                                   LAST_SCENE_HORIZONTAL_PIXEL_LONGITUDE);
 }
 
+void TestGeoCoordinate::distanceTo()
+{
+    QFETCH(GeoCoordinate, from);
+    QFETCH(GeoCoordinate, to);
+    QFETCH(qreal, expectedDistance);
+
+    QCOMPARE(from.distanceTo(to), expectedDistance);
+}
+
+void TestGeoCoordinate::distanceTo_data()
+{
+    const qreal EARTH_RADIUS = 6371010; // in meters
+
+    QTest::addColumn<GeoCoordinate>("from");
+    QTest::addColumn<GeoCoordinate>("to");
+    QTest::addColumn<qreal>("expectedDistance");
+
+    QTest::newRow("longitude") << GeoCoordinate(0, -90)
+                               << GeoCoordinate(0, 90)
+                               << M_PI * 2 * EARTH_RADIUS / 2;
+
+    QTest::newRow("latitude") << GeoCoordinate(-45, 0)
+                              << GeoCoordinate(45, 0)
+                              << M_PI * 2 * EARTH_RADIUS / 4;
+
+    QTest::newRow("both") << GeoCoordinate(-25, -135)
+                          << GeoCoordinate(25, 45)
+                          << M_PI * 2 * EARTH_RADIUS / 2;
+}
+
+
 void TestGeoCoordinate::isNullAndIsValid()
 {
     // coordinate created with default constructor
@@ -202,6 +237,18 @@ void TestGeoCoordinate::streamOperators()
     QCOMPARE(anotherInverted.longitude(), originalInverted.longitude());
 }
 
+void TestGeoCoordinate::subtractOperator()
+{
+    // test operator-
+    GeoCoordinate first(100, 50);
+    GeoCoordinate second(45, 15);
+
+    GeoCoordinate result = first - second;
+
+    QCOMPARE(result.latitude(), 55.0);
+    QCOMPARE(result.longitude(), 35.0);
+}
+
 QTEST_APPLESS_MAIN(TestGeoCoordinate);
 
 #include "testgeocoordinate.moc"