1 /*
2     SPDX-FileCopyrightText: 2017 Volker Krause <vkrause@kde.org>
3 
4     SPDX-License-Identifier: MIT
5 */
6 
7 #include "../src/lib/bitvector_p.h"
8 #include "../src/lib/reedsolomon_p.h"
9 
10 #include <QDebug>
11 #include <QObject>
12 #include <QTest>
13 
14 Q_DECLARE_METATYPE(Prison::BitVector)
15 
16 using namespace Prison;
17 
18 class ReedSolomonTest : public QObject
19 {
20     Q_OBJECT
21 private Q_SLOTS:
rsTest_data()22     void rsTest_data()
23     {
24         QTest::addColumn<int>("poly");
25         QTest::addColumn<int>("symCount");
26         QTest::addColumn<BitVector>("input");
27         QTest::addColumn<BitVector>("output");
28 
29         BitVector in;
30         BitVector out;
31         out.appendMSB(0, 20);
32         QTest::newRow("empty") << (int)ReedSolomon::GF16 << 5 << in << out;
33 
34         in.clear();
35         out.clear();
36         in.appendMSB(0x5c, 8);
37         out.appendMSB(7, 6);
38         out.appendMSB(5, 7);
39         out.appendMSB(0x4d, 7);
40         QTest::newRow("GF16") << (int)ReedSolomon::GF16 << 5 << in << out;
41     }
42 
rsTest()43     void rsTest()
44     {
45         QFETCH(int, poly);
46         QFETCH(int, symCount);
47         QFETCH(BitVector, input);
48         QFETCH(BitVector, output);
49 
50         ReedSolomon rs(poly, symCount);
51         const auto res = rs.encode(input);
52         QCOMPARE(res.size(), output.size());
53         if (res != output) {
54             qDebug() << "Actual  :" << res;
55             qDebug() << "Expected:" << output;
56         }
57         QCOMPARE(res, output);
58     }
59 };
60 
61 QTEST_APPLESS_MAIN(ReedSolomonTest)
62 
63 #include "reedsolomontest.moc"
64