diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/tst_GZip.cpp | 55 |
2 files changed, 56 insertions, 0 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index d6487a65..31537c75 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -31,6 +31,7 @@ add_unit_test(UpdateChecker tst_UpdateChecker.cpp) add_unit_test(DownloadTask tst_DownloadTask.cpp) add_unit_test(filematchers tst_filematchers.cpp) add_unit_test(Resource tst_Resource.cpp) +add_unit_test(GZip tst_GZip.cpp) # Tests END # diff --git a/tests/tst_GZip.cpp b/tests/tst_GZip.cpp new file mode 100644 index 00000000..23c749ef --- /dev/null +++ b/tests/tst_GZip.cpp @@ -0,0 +1,55 @@ +#include <QTest> +#include "TestUtil.h" + +#include "GZip.h" +#include <random> + +void fib(int &prev, int &cur) +{ + auto ret = prev + cur; + prev = cur; + cur = ret; +} + +class GZipTest : public QObject +{ + Q_OBJECT +private +slots: + + void test_Through() + { + // test up to 10 MB + static const int size = 10 * 1024 * 1024; + QByteArray random; + QByteArray compressed; + QByteArray decompressed; + std::default_random_engine eng((std::random_device())()); + std::uniform_int_distribution<uint8_t> idis(0, std::numeric_limits<uint8_t>::max()); + + // initialize random buffer + for(int i = 0; i < size; i++) + { + random.append((char)idis(eng)); + } + + // initialize fibonacci + int prev = 1; + int cur = 1; + + // test if fibonacci long random buffers pass through GZip + do + { + QByteArray copy = random; + copy.resize(cur); + QVERIFY(GZip::compress(copy, compressed)); + QVERIFY(GZip::decompress(compressed, decompressed)); + QCOMPARE(decompressed, copy); + fib(prev, cur); + } while (cur < size); + } +}; + +QTEST_GUILESS_MAIN(GZipTest) + +#include "tst_GZip.moc" |