1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the test suite of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL-EXCEPT$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 as published by the Free Software
20** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21** included in the packaging of this file. Please review the following
22** information to ensure the GNU General Public License requirements will
23** be met: https://www.gnu.org/licenses/gpl-3.0.html.
24**
25** $QT_END_LICENSE$
26**
27****************************************************************************/
28
29//TESTED_COMPONENT=src/location
30
31#include "../utils/qlocationtestutils_p.h"
32
33#include <QtPositioning/qgeocoordinate.h>
34#include <qtest.h>
35
36#include <QMetaType>
37#include <QDebug>
38
39#include <float.h>
40
41QT_USE_NAMESPACE
42
43Q_DECLARE_METATYPE(QGeoCoordinate::CoordinateFormat)
44Q_DECLARE_METATYPE(QGeoCoordinate::CoordinateType)
45
46static const QGeoCoordinate BRISBANE(-27.46758, 153.027892);
47static const QGeoCoordinate MELBOURNE(-37.814251, 144.963169);
48static const QGeoCoordinate LONDON(51.500152, -0.126236);
49static const QGeoCoordinate NEW_YORK(40.71453, -74.00713);
50static const QGeoCoordinate NORTH_POLE(90, 0);
51static const QGeoCoordinate SOUTH_POLE(-90, 0);
52
53static const QChar DEGREES_SYMB(0x00B0);
54
55
56QByteArray tst_qgeocoordinate_debug;
57
58void tst_qgeocoordinate_messageHandler(QtMsgType type, const QMessageLogContext &, const QString &msg)
59{
60 switch (type) {
61 case QtDebugMsg :
62 tst_qgeocoordinate_debug = msg.toLocal8Bit();
63 break;
64 default:
65 break;
66 }
67}
68
69
70class tst_QGeoCoordinate : public QObject
71{
72 Q_OBJECT
73
74private:
75 enum TestDataType {
76 Latitude,
77 Longitude,
78 Altitude
79 };
80
81private slots:
82 void initTestcase()
83 {
84 qRegisterMetaType<QGeoCoordinate>();
85 QMetaType::registerEqualsComparator<QGeoCoordinate>();
86 }
87
88 void constructor()
89 {
90 QGeoCoordinate c;
91 QVERIFY(!c.isValid());
92 QCOMPARE(c, QGeoCoordinate());
93 }
94
95 void constructor_lat_long()
96 {
97 QFETCH(double, latitude);
98 QFETCH(double, longitude);
99 QFETCH(QGeoCoordinate::CoordinateType, type);
100
101 QGeoCoordinate c(latitude, longitude);
102 QCOMPARE(c.type(), type);
103 if (type != QGeoCoordinate::InvalidCoordinate) {
104 QVERIFY(c.isValid());
105 QCOMPARE(c.latitude(), latitude);
106 QCOMPARE(c.longitude(), longitude);
107 } else {
108 QVERIFY(!c.isValid());
109 QVERIFY(c.latitude() != latitude);
110 QVERIFY(c.longitude() != longitude);
111 }
112 }
113
114 void constructor_lat_long_data()
115 {
116 QTest::addColumn<double>(name: "latitude");
117 QTest::addColumn<double>(name: "longitude");
118 QTest::addColumn<QGeoCoordinate::CoordinateType>(name: "type");
119
120 QTest::newRow(dataTag: "both zero") << 0.0 << 0.0 << QGeoCoordinate::Coordinate2D;
121 QTest::newRow(dataTag: "both negative") << -1.0 << -1.0 << QGeoCoordinate::Coordinate2D;
122 QTest::newRow(dataTag: "both positive") << 1.0 << 1.0 << QGeoCoordinate::Coordinate2D;
123 QTest::newRow(dataTag: "latitude negative") << -1.0 << 1.0 << QGeoCoordinate::Coordinate2D;
124 QTest::newRow(dataTag: "longitude negative") << 1.0 << -1.0 << QGeoCoordinate::Coordinate2D;
125
126 QTest::newRow(dataTag: "both too high") << 90.1 << 180.1 << QGeoCoordinate::InvalidCoordinate;
127 QTest::newRow(dataTag: "latitude too high") << 90.1 << 0.1 << QGeoCoordinate::InvalidCoordinate;
128 QTest::newRow(dataTag: "longitude too high") << 0.1 << 180.1 << QGeoCoordinate::InvalidCoordinate;
129
130 QTest::newRow(dataTag: "both too low") << -90.1 << -180.1 << QGeoCoordinate::InvalidCoordinate;
131 QTest::newRow(dataTag: "latitude too low") << -90.1 << 0.1 << QGeoCoordinate::InvalidCoordinate;
132 QTest::newRow(dataTag: "longitude too low") << 0.1 << -180.1 << QGeoCoordinate::InvalidCoordinate;
133
134 QTest::newRow(dataTag: "both not too high") << 90.0 << 180.0 << QGeoCoordinate::Coordinate2D;
135 QTest::newRow(dataTag: "both not too low") << -90.0 << -180.0 << QGeoCoordinate::Coordinate2D;
136
137 QTest::newRow(dataTag: "latitude too high and longitude too low") << 90.1 << -180.1 << QGeoCoordinate::InvalidCoordinate;
138 QTest::newRow(dataTag: "latitude too low and longitude too high") << -90.1 << 180.1 << QGeoCoordinate::InvalidCoordinate;
139 }
140
141 void constructor_lat_long_alt()
142 {
143 QFETCH(double, latitude);
144 QFETCH(double, longitude);
145 QFETCH(double, altitude);
146 QFETCH(QGeoCoordinate::CoordinateType, type);
147
148 QGeoCoordinate c(latitude, longitude, altitude);
149 QCOMPARE(c.type(), type);
150 if (type != QGeoCoordinate::InvalidCoordinate) {
151 QCOMPARE(c.latitude(), latitude);
152 QCOMPARE(c.longitude(), longitude);
153 QCOMPARE(c.altitude(), altitude);
154 } else {
155 QVERIFY(!c.isValid());
156 QVERIFY(c.latitude() != latitude);
157 QVERIFY(c.longitude() != longitude);
158 QVERIFY(c.altitude() != altitude);
159 }
160 }
161
162 void constructor_lat_long_alt_data()
163 {
164 QTest::addColumn<double>(name: "latitude");
165 QTest::addColumn<double>(name: "longitude");
166 QTest::addColumn<double>(name: "altitude");
167 QTest::addColumn<QGeoCoordinate::CoordinateType>(name: "type");
168
169 QTest::newRow(dataTag: "all zero") << 0.0 << 0.0 << 0.0 << QGeoCoordinate::Coordinate3D;
170 QTest::newRow(dataTag: "all negative") << -1.0 << -1.0 << -2.0 << QGeoCoordinate::Coordinate3D;
171 QTest::newRow(dataTag: "all positive") << 1.0 << 1.0 << 4.0 << QGeoCoordinate::Coordinate3D;
172
173 QTest::newRow(dataTag: "latitude negative") << -1.0 << 1.0 << 1.0 << QGeoCoordinate::Coordinate3D;
174 QTest::newRow(dataTag: "longitude negative") << 1.0 << -1.0 << 1.0 << QGeoCoordinate::Coordinate3D;
175 QTest::newRow(dataTag: "altitude negative") << 1.0 << 1.0 << -1.0 << QGeoCoordinate::Coordinate3D;
176
177 QTest::newRow(dataTag: "altitude not too high") << 1.0 << 1.0 << DBL_MAX << QGeoCoordinate::Coordinate3D;
178 QTest::newRow(dataTag: "altitude not too low") << 1.0 << 1.0 << DBL_MIN << QGeoCoordinate::Coordinate3D;
179
180 QTest::newRow(dataTag: "all not too high") << 90.0 << 180.0 << DBL_MAX << QGeoCoordinate::Coordinate3D;
181 QTest::newRow(dataTag: "all not too low") << -90.0 << -180.0 << DBL_MIN << QGeoCoordinate::Coordinate3D;
182
183 QTest::newRow(dataTag: "all too high") << 90.1 << 180.1 << DBL_MAX << QGeoCoordinate::InvalidCoordinate;
184 QTest::newRow(dataTag: "all too low") << -90.1 << -180.1 << DBL_MIN << QGeoCoordinate::InvalidCoordinate;
185 }
186
187 void copy_constructor()
188 {
189 QFETCH(QGeoCoordinate, c);
190
191 QGeoCoordinate copy(c);
192 QCOMPARE(copy.type(), c.type());
193 if (c.type() != QGeoCoordinate::InvalidCoordinate) {
194 QCOMPARE(copy.latitude(), c.latitude());
195 QCOMPARE(copy.longitude(), c.longitude());
196 if (c.type() == QGeoCoordinate::Coordinate3D)
197 QCOMPARE(copy.altitude(), c.altitude());
198 }
199 }
200
201 void copy_constructor_data()
202 {
203 QTest::addColumn<QGeoCoordinate>(name: "c");
204
205 QTest::newRow(dataTag: "no argument") << QGeoCoordinate();
206 QTest::newRow(dataTag: "latitude, longitude arguments all zero") << QGeoCoordinate(0.0, 0.0);
207
208 QTest::newRow(dataTag: "latitude, longitude arguments not too high") << QGeoCoordinate(90.0, 180.0);
209 QTest::newRow(dataTag: "latitude, longitude arguments not too low") << QGeoCoordinate(-90.0, -180.0);
210 QTest::newRow(dataTag: "latitude, longitude arguments too high") << QGeoCoordinate(90.1, 180.1);
211 QTest::newRow(dataTag: "latitude, longitude arguments too low") << QGeoCoordinate(-90.1, -180.1);
212
213 QTest::newRow(dataTag: "latitude, longitude, altitude arguments all zero") << QGeoCoordinate(0.0, 0.0, 0.0);
214 QTest::newRow(dataTag: "latitude, longitude, altitude arguments not too high values") << QGeoCoordinate(90.0, 180.0, DBL_MAX);
215 QTest::newRow(dataTag: "latitude, longitude, altitude arguments not too low values") << QGeoCoordinate(-90.0, -180.0, DBL_MIN);
216
217 QTest::newRow(dataTag: "latitude, longitude, altitude arguments too high latitude & longitude") << QGeoCoordinate(90.1, 180.1, DBL_MAX);
218 QTest::newRow(dataTag: "latitude, longitude, altitude arguments too low latitude & longitude") << QGeoCoordinate(-90.1, -180.1, DBL_MAX);
219 }
220
221 void destructor()
222 {
223 QGeoCoordinate *coordinate;
224
225 coordinate = new QGeoCoordinate();
226 delete coordinate;
227
228 coordinate = new QGeoCoordinate(0.0, 0.0);
229 delete coordinate;
230
231 coordinate = new QGeoCoordinate(0.0, 0.0, 0.0);
232 delete coordinate;
233
234 coordinate = new QGeoCoordinate(90.0, 180.0);
235 delete coordinate;
236
237 coordinate = new QGeoCoordinate(-90.0, -180.0);
238 delete coordinate;
239
240 coordinate = new QGeoCoordinate(90.1, 180.1);
241 delete coordinate;
242
243 coordinate = new QGeoCoordinate(-90.1, -180.1);
244 delete coordinate;
245 }
246
247 void destructor2()
248 {
249 QFETCH(QGeoCoordinate, c);
250 QGeoCoordinate *coordinate = new QGeoCoordinate(c);
251 delete coordinate;
252 }
253
254 void destructor2_data()
255 {
256 copy_constructor_data();
257 }
258
259 void assign()
260 {
261 QFETCH(QGeoCoordinate, c);
262
263 QGeoCoordinate c1 = c;
264 QCOMPARE(c.type(), c1.type());
265 if (c.isValid()) {
266 QCOMPARE(c.latitude(), c.latitude());
267 QCOMPARE(c.longitude(), c.longitude());
268 if (c.type() == QGeoCoordinate::Coordinate3D)
269 QCOMPARE(c.altitude(), c.altitude());
270 }
271 }
272
273 void assign_data()
274 {
275 copy_constructor_data();
276 }
277
278 void comparison()
279 {
280 QFETCH(QGeoCoordinate, c1);
281 QFETCH(QGeoCoordinate, c2);
282 QFETCH(bool, result);
283
284 QCOMPARE(c1 == c2, result);
285 QVariant v1 = QVariant::fromValue(value: c1);
286 QVariant v2 = QVariant::fromValue(value: c2);
287 QCOMPARE(v2 == v1, result);
288 }
289
290 void comparison_data()
291 {
292 QTest::addColumn<QGeoCoordinate>(name: "c1");
293 QTest::addColumn<QGeoCoordinate>(name: "c2");
294 QTest::addColumn<bool>(name: "result");
295
296 QTest::newRow(dataTag: "Invalid != BRISBANE")
297 << QGeoCoordinate(-190,-1000) << BRISBANE << false;
298 QTest::newRow(dataTag: "BRISBANE != MELBOURNE")
299 << BRISBANE << MELBOURNE << false;
300 QTest::newRow(dataTag: "equal")
301 << BRISBANE << BRISBANE << true;
302 QTest::newRow(dataTag: "LONDON != uninitialized data")
303 << LONDON << QGeoCoordinate() << false;
304 QTest::newRow(dataTag: "uninitialized data == uninitialized data")
305 << QGeoCoordinate() << QGeoCoordinate() << true;
306 QTest::newRow(dataTag: "invalid == same invalid")
307 << QGeoCoordinate(-190,-1000) << QGeoCoordinate(-190,-1000) << true;
308 QTest::newRow(dataTag: "invalid == different invalid")
309 << QGeoCoordinate(-190,-1000) << QGeoCoordinate(190,1000) << true;
310 QTest::newRow(dataTag: "valid != another valid")
311 << QGeoCoordinate(-90,-180) << QGeoCoordinate(-45,+45) << false;
312 QTest::newRow(dataTag: "valid == same valid")
313 << QGeoCoordinate(-90,-180) << QGeoCoordinate(-90,-180) << true;
314 QTest::newRow(dataTag: "different longitudes at north pole are equal")
315 << QGeoCoordinate(90, 0) << QGeoCoordinate(90, 45) << true;
316 QTest::newRow(dataTag: "different longitudes at south pole are equal")
317 << QGeoCoordinate(-90, 0) << QGeoCoordinate(-90, 45) << true;
318 }
319
320 void type()
321 {
322 QFETCH(QGeoCoordinate, c);
323 QFETCH(QGeoCoordinate::CoordinateType, type);
324
325 QCOMPARE(c.type(), type);
326 }
327
328 void type_data()
329 {
330 QTest::addColumn<QGeoCoordinate>(name: "c");
331 QTest::addColumn<QGeoCoordinate::CoordinateType>(name: "type");
332
333 QGeoCoordinate c;
334
335 QTest::newRow(dataTag: "no values set") << c << QGeoCoordinate::InvalidCoordinate;
336
337 c.setAltitude(1.0);
338 QTest::newRow(dataTag: "only altitude is set") << c << QGeoCoordinate::InvalidCoordinate;
339
340 c.setLongitude(1.0);
341 QTest::newRow(dataTag: "only latitude and altitude is set") << c << QGeoCoordinate::InvalidCoordinate;
342
343 c.setLatitude(-1.0);
344 QTest::newRow(dataTag: "all valid: 3D Coordinate") << c << QGeoCoordinate::Coordinate3D;
345
346 c.setLatitude(-90.1);
347 QTest::newRow(dataTag: "too low latitude and valid longitude") << c << QGeoCoordinate::InvalidCoordinate;
348
349 c.setLongitude(-180.1);
350 c.setLatitude(90.0);
351 QTest::newRow(dataTag: "valid latitude and too low longitude") << c << QGeoCoordinate::InvalidCoordinate;
352
353 c.setLatitude(90.1);
354 c.setLongitude(-180.0);
355 QTest::newRow(dataTag: "too high latitude and valid longitude") << c << QGeoCoordinate::InvalidCoordinate;
356
357 c.setLatitude(-90.0);
358 c.setLongitude(180.1);
359 QTest::newRow(dataTag: "valid latitude and too high longitude") << c << QGeoCoordinate::InvalidCoordinate;
360 }
361
362 void valid()
363 {
364 QFETCH(QGeoCoordinate, c);
365 QCOMPARE(c.isValid(), c.type() != QGeoCoordinate::InvalidCoordinate);
366 }
367
368 void valid_data()
369 {
370 type_data();
371 }
372
373 void addDataValues(TestDataType type)
374 {
375 QTest::addColumn<double>(name: "value");
376 QTest::addColumn<bool>(name: "valid");
377
378 QTest::newRow(dataTag: "negative") << -1.0 << true;
379 QTest::newRow(dataTag: "zero") << 0.0 << true;
380 QTest::newRow(dataTag: "positive") << 1.0 << true;
381
382 switch (type) {
383 case Latitude:
384 QTest::newRow(dataTag: "too low") << -90.1 << false;
385 QTest::newRow(dataTag: "not too low") << -90.0 << true;
386 QTest::newRow(dataTag: "not too hight") << 90.0 << true;
387 QTest::newRow(dataTag: "too high") << 90.1;
388 break;
389 case Longitude:
390 QTest::newRow(dataTag: "too low") << -180.1 << false;
391 QTest::newRow(dataTag: "not too low") << -180.0 << true;
392 QTest::newRow(dataTag: "not too hight") << 180.0 << true;
393 QTest::newRow(dataTag: "too high") << 180.1;
394 break;
395 case Altitude:
396 break;
397 }
398 }
399
400 void latitude()
401 {
402 QFETCH(double, value);
403 QGeoCoordinate c;
404 c.setLatitude(value);
405 QCOMPARE(c.latitude(), value);
406
407 QGeoCoordinate c2 = c;
408 QCOMPARE(c.latitude(), value);
409 QCOMPARE(c2, c);
410 }
411 void latitude_data() { addDataValues(type: Latitude); }
412
413 void longitude()
414 {
415 QFETCH(double, value);
416 QGeoCoordinate c;
417 c.setLongitude(value);
418 QCOMPARE(c.longitude(), value);
419
420 QGeoCoordinate c2 = c;
421 QCOMPARE(c.longitude(), value);
422 QCOMPARE(c2, c);
423 }
424 void longitude_data() { addDataValues(type: Longitude); }
425
426 void altitude()
427 {
428 QFETCH(double, value);
429 QGeoCoordinate c;
430 c.setAltitude(value);
431 QCOMPARE(c.altitude(), value);
432
433 QGeoCoordinate c2 = c;
434 QCOMPARE(c.altitude(), value);
435 QCOMPARE(c2, c);
436 }
437 void altitude_data() { addDataValues(type: Altitude); }
438
439 void distanceTo()
440 {
441 QFETCH(QGeoCoordinate, c1);
442 QFETCH(QGeoCoordinate, c2);
443 QFETCH(qreal, distance);
444
445 QCOMPARE(QString::number(c1.distanceTo(c2)), QString::number(distance));
446 }
447
448 void distanceTo_data()
449 {
450 QTest::addColumn<QGeoCoordinate>(name: "c1");
451 QTest::addColumn<QGeoCoordinate>(name: "c2");
452 QTest::addColumn<qreal>(name: "distance");
453
454 QTest::newRow(dataTag: "invalid coord 1")
455 << QGeoCoordinate() << BRISBANE << qreal(0.0);
456 QTest::newRow(dataTag: "invalid coord 2")
457 << BRISBANE << QGeoCoordinate() << qreal(0.0);
458 QTest::newRow(dataTag: "brisbane -> melbourne")
459 << BRISBANE << MELBOURNE << qreal(1374820.1618767744);
460 QTest::newRow(dataTag: "london -> new york")
461 << LONDON << NEW_YORK << qreal(5570538.4987236429);
462 QTest::newRow(dataTag: "north pole -> south pole")
463 << NORTH_POLE << SOUTH_POLE << qreal(20015109.4154876769);
464 }
465
466 void azimuthTo()
467 {
468 QFETCH(QGeoCoordinate, c1);
469 QFETCH(QGeoCoordinate, c2);
470 QFETCH(qreal, azimuth);
471
472 qreal result = c1.azimuthTo(other: c2);
473 QVERIFY(result >= 0.0);
474 QVERIFY(result < 360.0);
475 QCOMPARE(QString::number(result), QString::number(azimuth));
476 }
477
478 void azimuthTo_data()
479 {
480 QTest::addColumn<QGeoCoordinate>(name: "c1");
481 QTest::addColumn<QGeoCoordinate>(name: "c2");
482 QTest::addColumn<qreal>(name: "azimuth");
483
484 QTest::newRow(dataTag: "invalid coord 1")
485 << QGeoCoordinate() << BRISBANE << qreal(0.0);
486 QTest::newRow(dataTag: "invalid coord 2")
487 << BRISBANE << QGeoCoordinate() << qreal(0.0);
488 QTest::newRow(dataTag: "brisbane -> melbourne")
489 << BRISBANE << MELBOURNE << qreal(211.1717286649);
490 QTest::newRow(dataTag: "london -> new york")
491 << LONDON << NEW_YORK << qreal(288.3388804508);
492 QTest::newRow(dataTag: "north pole -> south pole")
493 << NORTH_POLE << SOUTH_POLE << qreal(180.0);
494 QTest::newRow(dataTag: "Almost 360degrees bearing")
495 << QGeoCoordinate(0.5,45.0,0.0) << QGeoCoordinate(0.5,-134.9999651,0.0) << qreal(359.998);
496 }
497
498 void atDistanceAndAzimuth()
499 {
500 QFETCH(QGeoCoordinate, origin);
501 QFETCH(qreal, distance);
502 QFETCH(qreal, azimuth);
503 QFETCH(QGeoCoordinate, result);
504
505 QCOMPARE(result, origin.atDistanceAndAzimuth(distance, azimuth));
506 }
507
508 void atDistanceAndAzimuth_data()
509 {
510 QTest::addColumn<QGeoCoordinate>(name: "origin");
511 QTest::addColumn<qreal>(name: "distance");
512 QTest::addColumn<qreal>(name: "azimuth");
513 QTest::addColumn<QGeoCoordinate>(name: "result");
514
515 QTest::newRow(dataTag: "invalid coord")
516 << QGeoCoordinate()
517 << qreal(1000.0)
518 << qreal(10.0)
519 << QGeoCoordinate();
520 if (sizeof(qreal) == sizeof(double)) {
521 QTest::newRow(dataTag: "brisbane -> melbourne")
522 << BRISBANE
523 << qreal(1374820.1618767744)
524 << qreal(211.1717286649)
525 << MELBOURNE;
526 QTest::newRow(dataTag: "london -> new york")
527 << LONDON
528 << qreal(5570538.4987236429)
529 << qreal(288.3388804508)
530 << NEW_YORK;
531 QTest::newRow(dataTag: "north pole -> south pole")
532 << NORTH_POLE
533 << qreal(20015109.4154876769)
534 << qreal(180.0)
535 << SOUTH_POLE;
536 } else {
537 QTest::newRow(dataTag: "brisbane -> melbourne")
538 << BRISBANE
539 << qreal(1374820.1618767744)
540 << qreal(211.1717286649)
541 << QGeoCoordinate(-37.8142515084775, 144.963170622944);
542 QTest::newRow(dataTag: "london -> new york")
543 << LONDON
544 << qreal(5570538.4987236429)
545 << qreal(288.3388804508)
546 << QGeoCoordinate(40.7145220608416, -74.0071216045375);
547 QTest::newRow(dataTag: "north pole -> south pole")
548 << NORTH_POLE
549 << qreal(20015109.4154876769)
550 << qreal(180.0)
551 << QGeoCoordinate(-89.9999947369857, -90.0);
552 }
553 }
554
555 void degreesToString()
556 {
557 QFETCH(QGeoCoordinate, coord);
558 QFETCH(QGeoCoordinate::CoordinateFormat, format);
559 QFETCH(QString, string);
560
561 QCOMPARE(coord.toString(format), string);
562 }
563
564 void degreesToString_data()
565 {
566 QTest::addColumn<QGeoCoordinate>(name: "coord");
567 QTest::addColumn<QGeoCoordinate::CoordinateFormat>(name: "format");
568 QTest::addColumn<QString>(name: "string");
569
570 QGeoCoordinate northEast(27.46758, 153.027892);
571 QGeoCoordinate northEastWithAlt(27.46758, 153.027892, 28.23411);
572 QGeoCoordinate southEast(-27.46758, 153.027892);
573 QGeoCoordinate southEastWithAlt(-27.46758, 153.027892, 28.23411);
574 QGeoCoordinate northWest(27.46758, -153.027892);
575 QGeoCoordinate northWestWithAlt(27.46758, -153.027892, 28.23411);
576 QGeoCoordinate southWest(-27.46758, -153.027892);
577 QGeoCoordinate southWestWithAlt(-27.46758, -153.027892, 28.23411);
578
579 QGeoCoordinate empty;
580 QGeoCoordinate toohigh(90.1, 180.1);
581 QGeoCoordinate toolow(-90.1, -180.1);
582 QGeoCoordinate zeroLatLong(0.0, 0.0);
583 QGeoCoordinate allZero(0.0, 0.0, 0.0);
584
585 QTest::newRow(dataTag: "empty, dd, no hemisphere")
586 << empty << QGeoCoordinate::Degrees
587 << QString();
588 QTest::newRow(dataTag: "empty, dd, hemisphere")
589 << empty << QGeoCoordinate::DegreesWithHemisphere
590 << QString();
591 QTest::newRow(dataTag: "empty, dm, no hemisphere")
592 << empty << QGeoCoordinate::DegreesMinutes
593 << QString();
594 QTest::newRow(dataTag: "empty, dm, hemisphere")
595 << empty << QGeoCoordinate::DegreesMinutesWithHemisphere
596 << QString();
597 QTest::newRow(dataTag: "empty, dms, no hemisphere")
598 << empty << QGeoCoordinate::DegreesMinutesSeconds
599 << QString();
600 QTest::newRow(dataTag: "empty, dms, hemisphere")
601 << empty << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
602 << QString();
603
604 QTest::newRow(dataTag: "too low, dd, no hemisphere")
605 << toolow << QGeoCoordinate::Degrees
606 << QString();
607 QTest::newRow(dataTag: "too low, dd, hemisphere")
608 << toolow << QGeoCoordinate::DegreesWithHemisphere
609 << QString();
610 QTest::newRow(dataTag: "too low, dm, no hemisphere")
611 << toolow << QGeoCoordinate::DegreesMinutes
612 << QString();
613 QTest::newRow(dataTag: "too low, dm, hemisphere")
614 << toolow << QGeoCoordinate::DegreesMinutesWithHemisphere
615 << QString();
616 QTest::newRow(dataTag: "too low, dms, no hemisphere")
617 << toolow << QGeoCoordinate::DegreesMinutesSeconds
618 << QString();
619 QTest::newRow(dataTag: "too low, dms, hemisphere")
620 << toolow << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
621 << QString();
622
623 QTest::newRow(dataTag: "too high, dd, no hemisphere")
624 << toohigh << QGeoCoordinate::Degrees
625 << QString();
626 QTest::newRow(dataTag: "too high, dd, hemisphere")
627 << toohigh << QGeoCoordinate::DegreesWithHemisphere
628 << QString();
629 QTest::newRow(dataTag: "too high, dm, no hemisphere")
630 << toohigh << QGeoCoordinate::DegreesMinutes
631 << QString();
632 QTest::newRow(dataTag: "too high, dm, hemisphere")
633 << toohigh << QGeoCoordinate::DegreesMinutesWithHemisphere
634 << QString();
635 QTest::newRow(dataTag: "too high, dms, no hemisphere")
636 << toohigh << QGeoCoordinate::DegreesMinutesSeconds
637 << QString();
638 QTest::newRow(dataTag: "too high, dms, hemisphere")
639 << toohigh << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
640 << QString();
641
642 QTest::newRow(dataTag: "zeroLatLong, dd, no hemisphere")
643 << zeroLatLong << QGeoCoordinate::Degrees
644 << QString("0.00000%1, 0.00000%1").arg(a: DEGREES_SYMB);
645 QTest::newRow(dataTag: "zeroLatLong, dd, hemisphere")
646 << zeroLatLong << QGeoCoordinate::DegreesWithHemisphere
647 << QString("0.00000%1, 0.00000%1").arg(a: DEGREES_SYMB);
648 QTest::newRow(dataTag: "zeroLatLong, dm, no hemisphere")
649 << zeroLatLong << QGeoCoordinate::DegreesMinutes
650 << QString("0%1 0.000', 0%1 0.000'").arg(a: DEGREES_SYMB);
651 QTest::newRow(dataTag: "zeroLatLong, dm, hemisphere")
652 << zeroLatLong << QGeoCoordinate::DegreesMinutesWithHemisphere
653 << QString("0%1 0.000', 0%1 0.000'").arg(a: DEGREES_SYMB);
654 QTest::newRow(dataTag: "zeroLatLong, dms, no hemisphere")
655 << zeroLatLong << QGeoCoordinate::DegreesMinutesSeconds
656 << QString("0%1 0' 0.0\", 0%1 0' 0.0\"").arg(a: DEGREES_SYMB);
657 QTest::newRow(dataTag: "zeroLatLong, dms, hemisphere")
658 << zeroLatLong << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
659 << QString("0%1 0' 0.0\", 0%1 0' 0.0\"").arg(a: DEGREES_SYMB);
660
661 QTest::newRow(dataTag: "allZero, dd, no hemisphere")
662 << allZero << QGeoCoordinate::Degrees
663 << QString("0.00000%1, 0.00000%1, 0m").arg(a: DEGREES_SYMB);
664 QTest::newRow(dataTag: "allZero, dd, hemisphere")
665 << allZero << QGeoCoordinate::DegreesWithHemisphere
666 << QString("0.00000%1, 0.00000%1, 0m").arg(a: DEGREES_SYMB);
667 QTest::newRow(dataTag: "allZero, dm, no hemisphere")
668 << allZero << QGeoCoordinate::DegreesMinutes
669 << QString("0%1 0.000', 0%1 0.000', 0m").arg(a: DEGREES_SYMB);
670 QTest::newRow(dataTag: "allZero, dm, hemisphere")
671 << allZero << QGeoCoordinate::DegreesMinutesWithHemisphere
672 << QString("0%1 0.000', 0%1 0.000', 0m").arg(a: DEGREES_SYMB);
673 QTest::newRow(dataTag: "allZero, dms, no hemisphere")
674 << allZero << QGeoCoordinate::DegreesMinutesSeconds
675 << QString("0%1 0' 0.0\", 0%1 0' 0.0\", 0m").arg(a: DEGREES_SYMB);
676 QTest::newRow(dataTag: "allZero, dms, hemisphere")
677 << allZero << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
678 << QString("0%1 0' 0.0\", 0%1 0' 0.0\", 0m").arg(a: DEGREES_SYMB);
679
680 QTest::newRow(dataTag: "NE, dd, no hemisphere")
681 << northEast << QGeoCoordinate::Degrees
682 << QString("27.46758%1, 153.02789%1").arg(a: DEGREES_SYMB);
683 QTest::newRow(dataTag: "NE, dd, hemisphere")
684 << northEast << QGeoCoordinate::DegreesWithHemisphere
685 << QString("27.46758%1 N, 153.02789%1 E").arg(a: DEGREES_SYMB);
686 QTest::newRow(dataTag: "NE, dm, no hemisphere")
687 << northEast << QGeoCoordinate::DegreesMinutes
688 << QString("27%1 28.055', 153%1 1.674'").arg(a: DEGREES_SYMB);
689 QTest::newRow(dataTag: "NE, dm, hemisphere")
690 << northEast << QGeoCoordinate::DegreesMinutesWithHemisphere
691 << QString("27%1 28.055' N, 153%1 1.674' E").arg(a: DEGREES_SYMB);
692 QTest::newRow(dataTag: "NE, dms, no hemisphere")
693 << northEast << QGeoCoordinate::DegreesMinutesSeconds
694 << QString("27%1 28' 3.3\", 153%1 1' 40.4\"").arg(a: DEGREES_SYMB);
695 QTest::newRow(dataTag: "NE, dms, hemisphere")
696 << northEast << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
697 << QString("27%1 28' 3.3\" N, 153%1 1' 40.4\" E").arg(a: DEGREES_SYMB);
698
699 QTest::newRow(dataTag: "NE with alt, dd, no hemisphere")
700 << northEastWithAlt << QGeoCoordinate::Degrees
701 << QString("27.46758%1, 153.02789%1, 28.2341m").arg(a: DEGREES_SYMB);
702 QTest::newRow(dataTag: "NE with alt, dd, hemisphere")
703 << northEastWithAlt << QGeoCoordinate::DegreesWithHemisphere
704 << QString("27.46758%1 N, 153.02789%1 E, 28.2341m").arg(a: DEGREES_SYMB);
705 QTest::newRow(dataTag: "NE with alt, dm, no hemisphere")
706 << northEastWithAlt << QGeoCoordinate::DegreesMinutes
707 << QString("27%1 28.055', 153%1 1.674', 28.2341m").arg(a: DEGREES_SYMB);
708 QTest::newRow(dataTag: "NE with alt, dm, hemisphere")
709 << northEastWithAlt << QGeoCoordinate::DegreesMinutesWithHemisphere
710 << QString("27%1 28.055' N, 153%1 1.674' E, 28.2341m").arg(a: DEGREES_SYMB);
711 QTest::newRow(dataTag: "NE with alt, dms, no hemisphere")
712 << northEastWithAlt << QGeoCoordinate::DegreesMinutesSeconds
713 << QString("27%1 28' 3.3\", 153%1 1' 40.4\", 28.2341m").arg(a: DEGREES_SYMB);
714 QTest::newRow(dataTag: "NE with alt, dms, hemisphere")
715 << northEastWithAlt << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
716 << QString("27%1 28' 3.3\" N, 153%1 1' 40.4\" E, 28.2341m").arg(a: DEGREES_SYMB);
717
718 QTest::newRow(dataTag: "SE, dd, no hemisphere")
719 << southEast << QGeoCoordinate::Degrees
720 << QString("-27.46758%1, 153.02789%1").arg(a: DEGREES_SYMB);
721 QTest::newRow(dataTag: "SE, dd, hemisphere")
722 << southEast << QGeoCoordinate::DegreesWithHemisphere
723 << QString("27.46758%1 S, 153.02789%1 E").arg(a: DEGREES_SYMB);
724 QTest::newRow(dataTag: "SE, dm, no hemisphere")
725 << southEast << QGeoCoordinate::DegreesMinutes
726 << QString("-27%1 28.055', 153%1 1.674'").arg(a: DEGREES_SYMB);
727 QTest::newRow(dataTag: "SE, dm, hemisphere")
728 << southEast << QGeoCoordinate::DegreesMinutesWithHemisphere
729 << QString("27%1 28.055' S, 153%1 1.674' E").arg(a: DEGREES_SYMB);
730 QTest::newRow(dataTag: "SE, dms, no hemisphere")
731 << southEast << QGeoCoordinate::DegreesMinutesSeconds
732 << QString("-27%1 28' 3.3\", 153%1 1' 40.4\"").arg(a: DEGREES_SYMB);
733 QTest::newRow(dataTag: "SE, dms, hemisphere")
734 << southEast << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
735 << QString("27%1 28' 3.3\" S, 153%1 1' 40.4\" E").arg(a: DEGREES_SYMB);
736
737 QTest::newRow(dataTag: "SE with alt, dd, no hemisphere, 28.2341m")
738 << southEastWithAlt << QGeoCoordinate::Degrees
739 << QString("-27.46758%1, 153.02789%1, 28.2341m").arg(a: DEGREES_SYMB);
740 QTest::newRow(dataTag: "SE with alt, dd, hemisphere, 28.2341m")
741 << southEastWithAlt << QGeoCoordinate::DegreesWithHemisphere
742 << QString("27.46758%1 S, 153.02789%1 E, 28.2341m").arg(a: DEGREES_SYMB);
743 QTest::newRow(dataTag: "SE with alt, dm, no hemisphere, 28.2341m")
744 << southEastWithAlt << QGeoCoordinate::DegreesMinutes
745 << QString("-27%1 28.055', 153%1 1.674', 28.2341m").arg(a: DEGREES_SYMB);
746 QTest::newRow(dataTag: "SE with alt, dm, hemisphere, 28.2341m")
747 << southEastWithAlt << QGeoCoordinate::DegreesMinutesWithHemisphere
748 << QString("27%1 28.055' S, 153%1 1.674' E, 28.2341m").arg(a: DEGREES_SYMB);
749 QTest::newRow(dataTag: "SE with alt, dms, no hemisphere, 28.2341m")
750 << southEastWithAlt << QGeoCoordinate::DegreesMinutesSeconds
751 << QString("-27%1 28' 3.3\", 153%1 1' 40.4\", 28.2341m").arg(a: DEGREES_SYMB);
752 QTest::newRow(dataTag: "SE with alt, dms, hemisphere, 28.2341m")
753 << southEastWithAlt << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
754 << QString("27%1 28' 3.3\" S, 153%1 1' 40.4\" E, 28.2341m").arg(a: DEGREES_SYMB);;
755
756 QTest::newRow(dataTag: "NW, dd, no hemisphere")
757 << northWest << QGeoCoordinate::Degrees
758 << QString("27.46758%1, -153.02789%1").arg(a: DEGREES_SYMB);
759 QTest::newRow(dataTag: "NW, dd, hemisphere")
760 << northWest << QGeoCoordinate::DegreesWithHemisphere
761 << QString("27.46758%1 N, 153.02789%1 W").arg(a: DEGREES_SYMB);
762 QTest::newRow(dataTag: "NW, dm, no hemisphere")
763 << northWest << QGeoCoordinate::DegreesMinutes
764 << QString("27%1 28.055', -153%1 1.674'").arg(a: DEGREES_SYMB);
765 QTest::newRow(dataTag: "NW, dm, hemisphere")
766 << northWest << QGeoCoordinate::DegreesMinutesWithHemisphere
767 << QString("27%1 28.055' N, 153%1 1.674' W").arg(a: DEGREES_SYMB);
768 QTest::newRow(dataTag: "NW, dms, no hemisphere")
769 << northWest << QGeoCoordinate::DegreesMinutesSeconds
770 << QString("27%1 28' 3.3\", -153%1 1' 40.4\"").arg(a: DEGREES_SYMB);
771 QTest::newRow(dataTag: "NW, dms, hemisphere")
772 << northWest << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
773 << QString("27%1 28' 3.3\" N, 153%1 1' 40.4\" W").arg(a: DEGREES_SYMB);
774
775 QTest::newRow(dataTag: "NW with alt, dd, no hemisphere, 28.2341m")
776 << northWestWithAlt << QGeoCoordinate::Degrees
777 << QString("27.46758%1, -153.02789%1, 28.2341m").arg(a: DEGREES_SYMB);
778 QTest::newRow(dataTag: "NW with alt, dd, hemisphere, 28.2341m")
779 << northWestWithAlt << QGeoCoordinate::DegreesWithHemisphere
780 << QString("27.46758%1 N, 153.02789%1 W, 28.2341m").arg(a: DEGREES_SYMB);
781 QTest::newRow(dataTag: "NW with alt, dm, no hemisphere, 28.2341m")
782 << northWestWithAlt << QGeoCoordinate::DegreesMinutes
783 << QString("27%1 28.055', -153%1 1.674', 28.2341m").arg(a: DEGREES_SYMB);
784 QTest::newRow(dataTag: "NW with alt, dm, hemisphere, 28.2341m")
785 << northWestWithAlt << QGeoCoordinate::DegreesMinutesWithHemisphere
786 << QString("27%1 28.055' N, 153%1 1.674' W, 28.2341m").arg(a: DEGREES_SYMB);
787 QTest::newRow(dataTag: "NW with alt, dms, no hemisphere, 28.2341m")
788 << northWestWithAlt << QGeoCoordinate::DegreesMinutesSeconds
789 << QString("27%1 28' 3.3\", -153%1 1' 40.4\", 28.2341m").arg(a: DEGREES_SYMB);
790 QTest::newRow(dataTag: "NW with alt, dms, hemisphere, 28.2341m")
791 << northWestWithAlt << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
792 << QString("27%1 28' 3.3\" N, 153%1 1' 40.4\" W, 28.2341m").arg(a: DEGREES_SYMB);
793
794 QTest::newRow(dataTag: "SW, dd, no hemisphere")
795 << southWest << QGeoCoordinate::Degrees
796 << QString("-27.46758%1, -153.02789%1").arg(a: DEGREES_SYMB);
797 QTest::newRow(dataTag: "SW, dd, hemisphere")
798 << southWest << QGeoCoordinate::DegreesWithHemisphere
799 << QString("27.46758%1 S, 153.02789%1 W").arg(a: DEGREES_SYMB);
800 QTest::newRow(dataTag: "SW, dm, no hemisphere")
801 << southWest << QGeoCoordinate::DegreesMinutes
802 << QString("-27%1 28.055', -153%1 1.674'").arg(a: DEGREES_SYMB);
803 QTest::newRow(dataTag: "SW, dm, hemisphere")
804 << southWest << QGeoCoordinate::DegreesMinutesWithHemisphere
805 << QString("27%1 28.055' S, 153%1 1.674' W").arg(a: DEGREES_SYMB);
806 QTest::newRow(dataTag: "SW, dms, no hemisphere")
807 << southWest << QGeoCoordinate::DegreesMinutesSeconds
808 << QString("-27%1 28' 3.3\", -153%1 1' 40.4\"").arg(a: DEGREES_SYMB);
809 QTest::newRow(dataTag: "SW, dms, hemisphere")
810 << southWest << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
811 << QString("27%1 28' 3.3\" S, 153%1 1' 40.4\" W").arg(a: DEGREES_SYMB);
812
813 QTest::newRow(dataTag: "SW with alt, dd, no hemisphere, 28.2341m")
814 << southWestWithAlt << QGeoCoordinate::Degrees
815 << QString("-27.46758%1, -153.02789%1, 28.2341m").arg(a: DEGREES_SYMB);
816 QTest::newRow(dataTag: "SW with alt, dd, hemisphere, 28.2341m")
817 << southWestWithAlt << QGeoCoordinate::DegreesWithHemisphere
818 << QString("27.46758%1 S, 153.02789%1 W, 28.2341m").arg(a: DEGREES_SYMB);
819 QTest::newRow(dataTag: "SW with alt, dm, no hemisphere, 28.2341m")
820 << southWestWithAlt << QGeoCoordinate::DegreesMinutes
821 << QString("-27%1 28.055', -153%1 1.674', 28.2341m").arg(a: DEGREES_SYMB);
822 QTest::newRow(dataTag: "SW with alt, dm, hemisphere, 28.2341m")
823 << southWestWithAlt << QGeoCoordinate::DegreesMinutesWithHemisphere
824 << QString("27%1 28.055' S, 153%1 1.674' W, 28.2341m").arg(a: DEGREES_SYMB);
825 QTest::newRow(dataTag: "SW with alt, dms, no hemisphere, 28.2341m")
826 << southWestWithAlt << QGeoCoordinate::DegreesMinutesSeconds
827 << QString("-27%1 28' 3.3\", -153%1 1' 40.4\", 28.2341m").arg(a: DEGREES_SYMB);
828 QTest::newRow(dataTag: "SW with alt, dms, hemisphere, 28.2341m")
829 << southWestWithAlt << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
830 << QString("27%1 28' 3.3\" S, 153%1 1' 40.4\" W, 28.2341m").arg(a: DEGREES_SYMB);
831
832 QTest::newRow(dataTag: "Wrap seconds to Minutes DMSH")
833 << QGeoCoordinate(1.1333333, 1.1333333) << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
834 << QString( "1%1 8' 0.0\" N, 1%1 8' 0.0\" E").arg(a: DEGREES_SYMB);
835 QTest::newRow(dataTag: "Wrap seconds to Minutes DMS")
836 << QGeoCoordinate(1.1333333, 1.1333333) << QGeoCoordinate::DegreesMinutesSeconds
837 << QString( "1%1 8' 0.0\", 1%1 8' 0.0\"").arg(a: DEGREES_SYMB);
838 QTest::newRow(dataTag: "Wrap minutes to Degrees DMH")
839 << QGeoCoordinate(1.999999, 1.999999) << QGeoCoordinate::DegreesMinutesWithHemisphere
840 << QString( "2%1 0.000' N, 2%1 0.000' E").arg(a: DEGREES_SYMB);
841 QTest::newRow(dataTag: "Wrap minutes to Degrees DM")
842 << QGeoCoordinate(1.999999, 1.999999) << QGeoCoordinate::DegreesMinutes
843 << QString( "2%1 0.000', 2%1 0.000'").arg(a: DEGREES_SYMB);
844
845 QTest::newRow(dataTag: "Wrap seconds to minutes to Degrees DM -> above valid long/lat values")
846 << QGeoCoordinate(89.999999, 179.999999) << QGeoCoordinate::DegreesMinutesSeconds
847 << QString( "90%1 0' 0.0\", 180%1 0' 0.0\"").arg(a: DEGREES_SYMB);
848
849 QTest::newRow(dataTag: "Seconds and minutes near valid long/lat values border")
850 << QGeoCoordinate(89.9999, 179.9999) << QGeoCoordinate::DegreesMinutesSeconds
851 << QString("89%1 59' 59.6\", 179%1 59' 59.6\"").arg(a: DEGREES_SYMB);
852
853 QTest::newRow(dataTag: "Wrap minutes to Degrees DM ->above valid long/lat values")
854 << QGeoCoordinate(89.999999, 179.999999) << QGeoCoordinate::DegreesMinutes
855 << QString( "90%1 0.000', 180%1 0.000'").arg(a: DEGREES_SYMB);
856
857 QTest::newRow(dataTag: "Minutes near valid long/lat values border")
858 << QGeoCoordinate(89.9999, 179.9999) << QGeoCoordinate::DegreesMinutes
859 << QString("89%1 59.994', 179%1 59.994'").arg(a: DEGREES_SYMB);
860
861 QTest::newRow(dataTag: "Fix incorrect wrap minutes to degrees")
862 << QGeoCoordinate(0.995833, 0.995833) << QGeoCoordinate::DegreesMinutes
863 << QString("0%1 59.750', 0%1 59.750'").arg(a: DEGREES_SYMB);
864
865 QTest::newRow(dataTag: "Fix incorrect wrap seconds to minutes")
866 << QGeoCoordinate(0.9832222, 0.9832222) << QGeoCoordinate::DegreesMinutesSeconds
867 << QString("0%1 58' 59.6\", 0%1 58' 59.6\"").arg(a: DEGREES_SYMB);
868
869 }
870
871 void datastream()
872 {
873 QFETCH(QGeoCoordinate, c);
874
875 QByteArray ba;
876 QDataStream out(&ba, QIODevice::WriteOnly);
877 out << c;
878
879 QDataStream in(&ba, QIODevice::ReadOnly);
880 QGeoCoordinate inCoord;
881 in >> inCoord;
882 QCOMPARE(inCoord, c);
883 }
884
885 void datastream_data()
886 {
887 QTest::addColumn<QGeoCoordinate>(name: "c");
888
889 QTest::newRow(dataTag: "invalid") << QGeoCoordinate();
890 QTest::newRow(dataTag: "valid lat, long") << BRISBANE;
891 QTest::newRow(dataTag: "valid lat, long, alt") << QGeoCoordinate(-1, -1, -1);
892 QTest::newRow(dataTag: "valid lat, long, alt again") << QGeoCoordinate(1, 1, 1);
893 }
894
895 void debug()
896 {
897 QFETCH(QGeoCoordinate, c);
898 QFETCH(int, nextValue);
899 QFETCH(QByteArray, debugString);
900
901 qInstallMessageHandler(tst_qgeocoordinate_messageHandler);
902 qDebug() << c << nextValue;
903 qInstallMessageHandler(0);
904 QCOMPARE(tst_qgeocoordinate_debug, debugString);
905 }
906
907 void debug_data()
908 {
909 QTest::addColumn<QGeoCoordinate>(name: "c");
910 QTest::addColumn<int>(name: "nextValue");
911 QTest::addColumn<QByteArray>(name: "debugString");
912
913 QTest::newRow(dataTag: "uninitialized") << QGeoCoordinate() << 45
914 << QByteArray("QGeoCoordinate(?, ?) 45");
915 QTest::newRow(dataTag: "initialized without altitude") << BRISBANE << 45
916 << (QString("QGeoCoordinate(%1, %2) 45").arg(a: BRISBANE.latitude(), fieldWidth: 0, fmt: 'g', prec: 9)
917 .arg(a: BRISBANE.longitude(), fieldWidth: 0, fmt: 'g', prec: 9)).toLatin1();
918 QTest::newRow(dataTag: "invalid initialization") << QGeoCoordinate(-100,-200) << 45
919 << QByteArray("QGeoCoordinate(?, ?) 45");
920 QTest::newRow(dataTag: "initialized with altitude") << QGeoCoordinate(1,2,3) << 45
921 << QByteArray("QGeoCoordinate(1, 2, 3) 45");
922 QTest::newRow(dataTag: "extra long coordinates") << QGeoCoordinate(89.123412341, 179.123412341)
923 << 45 << QByteArray("QGeoCoordinate(89.123412341, 179.12341234) 45");
924 }
925
926 void hash()
927 {
928 uint s1 = qHash(coordinate: QGeoCoordinate(1, 1, 2));
929 uint s2 = qHash(coordinate: QGeoCoordinate(2, 1, 1));
930 uint s3 = qHash(coordinate: QGeoCoordinate(1, 2, 1));
931 uint s10 = qHash(coordinate: QGeoCoordinate(0, 0, 2));
932 uint s20 = qHash(coordinate: QGeoCoordinate(2, 0, 0));
933 uint s30 = qHash(coordinate: QGeoCoordinate(0, 2, 0));
934 uint s30NoAlt = qHash(coordinate: QGeoCoordinate(0, 2));
935 uint s30WithSeed = qHash(coordinate: QGeoCoordinate(0, 2, 0), seed: 1);
936 uint nullCoordinate = qHash(coordinate: QGeoCoordinate());
937
938 uint north1 = qHash(coordinate: QGeoCoordinate(90.0, 34.7, 0));
939 uint north2 = qHash(coordinate: QGeoCoordinate(90.0, 180, 0));
940
941 uint south1 = qHash(coordinate: QGeoCoordinate(90.0, 67.7, 34.0));
942 uint south2 = qHash(coordinate: QGeoCoordinate(90.0, 111, 34.0));
943
944 QVERIFY(s1 != s2);
945 QVERIFY(s2 != s3);
946 QVERIFY(s1 != s3);
947 QVERIFY(s10 != s20);
948 QVERIFY(s20 != s30);
949 QVERIFY(s10 != s30);
950 QVERIFY(s30NoAlt != s30);
951 QVERIFY(s30WithSeed != s30);
952
953 QVERIFY(nullCoordinate != s1);
954 QVERIFY(nullCoordinate != s2);
955 QVERIFY(nullCoordinate != s3);
956 QVERIFY(nullCoordinate != s10);
957 QVERIFY(nullCoordinate != s20);
958 QVERIFY(nullCoordinate != s30);
959 QVERIFY(nullCoordinate != s30NoAlt);
960 QVERIFY(nullCoordinate != s30WithSeed);
961
962 QVERIFY(north1 == north2);
963 QVERIFY(south1 == south2);
964 }
965};
966
967QTEST_GUILESS_MAIN(tst_QGeoCoordinate)
968#include "tst_qgeocoordinate.moc"
969

source code of qtlocation/tests/auto/qgeocoordinate/tst_qgeocoordinate.cpp