File indexing completed on 2024-04-21 04:41:09

0001 /*
0002     SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include <geo/polylinedecoder_p.h>
0008 
0009 #include <QTest>
0010 
0011 #include <iostream>
0012 
0013 using namespace KPublicTransport;
0014 
0015 class PolylineDecoderTest : public QObject
0016 {
0017     Q_OBJECT
0018 private Q_SLOTS:
0019     void testDecode()
0020     {
0021         PolylineDecoder<2> decoder("_p~iF~ps|U_ulLnnqC_mqNvxq`@");
0022 
0023         QCOMPARE(decoder.canReadMore(), true);
0024         QCOMPARE(decoder.readNextDouble(), 38.5);
0025         QCOMPARE(decoder.canReadMore(), true);
0026         QCOMPARE(decoder.readNextDouble(), -120.2);
0027         QCOMPARE(decoder.canReadMore(), true);
0028         QCOMPARE(decoder.readNextDouble(), 40.7);
0029         QCOMPARE(decoder.canReadMore(), true);
0030         QCOMPARE(decoder.readNextDouble(), -120.95);
0031         QCOMPARE(decoder.canReadMore(), true);
0032         QCOMPARE(decoder.readNextDouble(), 43.252);
0033         QCOMPARE(decoder.canReadMore(), true);
0034         QCOMPARE(decoder.readNextDouble(), -126.453);
0035         QCOMPARE(decoder.canReadMore(), false);
0036     }
0037 
0038     void testEmpty()
0039     {
0040         PolylineDecoder<2> decoder("");
0041         QCOMPARE(decoder.canReadMore(), false);
0042     }
0043 
0044     void testZero()
0045     {
0046         PolylineDecoder<1> decoder("???");
0047         QCOMPARE(decoder.canReadMore(), true);
0048         QCOMPARE(decoder.readNextInt(), 0);
0049         QCOMPARE(decoder.readNextDouble(), 0.0);
0050         QCOMPARE(decoder.readNextDouble(), 0.0);
0051         QCOMPARE(decoder.canReadMore(), false);
0052     }
0053 
0054     void testNonDifferential()
0055     {
0056         PolylineDecoder<1, false>  decoder("NL");
0057         QCOMPARE(decoder.canReadMore(), true);
0058         QCOMPARE(decoder.readNextInt(), -8);
0059         QCOMPARE(decoder.readNextInt(), -7);
0060         QCOMPARE(decoder.canReadMore(), false);
0061     }
0062 
0063     void testPolygon()
0064     {
0065         PolylineDecoder<2> decoder("_p~iF~ps|U_ulLnnqC_mqNvxq`@");
0066         QPolygonF polygon;
0067         decoder.readPolygon(polygon);
0068         QCOMPARE(decoder.canReadMore(), false);
0069         QCOMPARE(polygon.size(), 3);
0070         QCOMPARE(polygon.isClosed(), false);
0071         QCOMPARE(polygon[0].x(), -120.2);
0072         QCOMPARE(polygon[0].y(), 38.5);
0073     }
0074 
0075 #if 0
0076     void dumpEncoded() // mostly for manual testing
0077     {
0078         PolylineDecoder<1> decoder("?cAclA}K{P?gTwE?e@qNyMuEiWmVyNgAuBgAyJqHy[{MsQeWM?eF");
0079         while (decoder.canReadMore()) {
0080             for (int i = 0; i < decoder.dimensions(); ++i) {
0081                 std::cout << decoder.readNextDouble() << " ";
0082             }
0083             std::cout << std::endl;
0084         }
0085     }
0086 #endif
0087 };
0088 
0089 QTEST_GUILESS_MAIN(PolylineDecoderTest)
0090 
0091 #include "polylinetest.moc"