mirror of
https://github.com/romixlab/qmsgpack.git
synced 2025-06-25 01:21:33 +02:00
199 lines
5.3 KiB
C++
199 lines
5.3 KiB
C++
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
|
|
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
|
#include <QString>
|
|
#include <QtTest>
|
|
#include <QDebug>
|
|
#include <msgpack.h>
|
|
#include <limits>
|
|
|
|
class UnpackTest : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
private Q_SLOTS:
|
|
void test_booleans();
|
|
void test_integers();
|
|
void test_floats();
|
|
void test_strings();
|
|
void test_binary();
|
|
void test_array();
|
|
void test_map();
|
|
};
|
|
|
|
|
|
void UnpackTest::test_booleans()
|
|
{
|
|
QByteArray pack = MsgPack::pack(QVariantList() << true << false);
|
|
QVariantList u = MsgPack::unpack(pack).toList();
|
|
QVERIFY(u[0] == true);
|
|
QVERIFY(u[1] == false);
|
|
}
|
|
|
|
void UnpackTest::test_integers()
|
|
{
|
|
QByteArray ints = QByteArray::fromBase64("3AAUAH//4cyAzP/Q39CAzQEAzf//0f9/"
|
|
"0YAAzgABAADO/////9L//3//0oAAAADP"
|
|
"AAAAAQAAAADP///////////T/////3//"
|
|
"///TgAAAAAAAAAA=");
|
|
QVariantList l = MsgPack::unpack(ints).toList();
|
|
QVERIFY(l[0].toInt() == 0);
|
|
QVERIFY(l[1].toInt() == 127);
|
|
QVERIFY(l[2].toInt() == -1);
|
|
QVERIFY(l[3].toInt() == -31);
|
|
QVERIFY(l[4].toInt() == 128);
|
|
QVERIFY(l[5].toInt() == 255);
|
|
QVERIFY(l[6].toInt() == -33);
|
|
QVERIFY(l[7].toInt() == -128);
|
|
QVERIFY(l[8].toInt() == 256);
|
|
QVERIFY(l[9].toInt() == 65535);
|
|
QVERIFY(l[10].toInt() == -129);
|
|
QVERIFY(l[11].toInt() == -32768);
|
|
QVERIFY(l[12].toInt() == 65536);
|
|
QVERIFY(l[13].toUInt() == 4294967295);
|
|
QVERIFY(l[14].toInt() == -32769);
|
|
QVERIFY(l[15].toInt() == -2147483648);
|
|
QVERIFY(l[16].toLongLong() == 4294967296);
|
|
QVERIFY(l[17].toULongLong() == std::numeric_limits<quint64>::max());
|
|
QVERIFY(l[18].toLongLong() == -2147483649);
|
|
QVERIFY(l[19].toLongLong() == std::numeric_limits<qint64>::min());
|
|
|
|
QByteArray pack = MsgPack::pack((qint64)1111111111);
|
|
qint64 u = MsgPack::unpack(pack).toLongLong();
|
|
QVERIFY(u == 1111111111);
|
|
|
|
pack = MsgPack::pack((qint64)-3333333333);
|
|
u = MsgPack::unpack(pack).toLongLong();
|
|
QVERIFY(u == -3333333333);
|
|
|
|
pack = MsgPack::pack((qint64)3333333333);
|
|
u = MsgPack::unpack(pack).toLongLong();
|
|
QVERIFY(u == 3333333333);
|
|
}
|
|
|
|
void UnpackTest::test_floats()
|
|
{
|
|
QByteArray packed = QByteArray::fromBase64("k8sAAAAAAAAAAMtAHTMzMzMzM8tHM"
|
|
"0JhcsdNgg==");
|
|
QVariantList l = MsgPack::unpack(packed).toList();
|
|
QVERIFY(l[0].toDouble() == 0.0);
|
|
QVERIFY(l[1].toDouble() == 7.3);
|
|
QVERIFY(l[2].toDouble() == pow(10, 35));
|
|
}
|
|
|
|
void UnpackTest::test_strings()
|
|
{
|
|
QStringList strs;
|
|
strs << "abc";
|
|
QString s;
|
|
for (int i = 0; i < 8; ++i)
|
|
s += "xy";
|
|
strs << s;
|
|
s = QString();
|
|
for (int i = 0; i < 64; ++i)
|
|
s += "msgp";
|
|
strs << s;
|
|
s = QString();
|
|
for (int i = 0; i < 4096; ++i)
|
|
s += "messagepack test";
|
|
strs << s;
|
|
strs << "";
|
|
|
|
QByteArray arr = MsgPack::pack(strs);
|
|
|
|
QStringList l = MsgPack::unpack(arr).toStringList();
|
|
QVERIFY(l[0] == strs[0]);
|
|
QVERIFY(l[1] == strs[1]);
|
|
QVERIFY(l[2] == strs[2]);
|
|
QVERIFY(l[3] == strs[3]);
|
|
QVERIFY(l[4].isEmpty());
|
|
}
|
|
|
|
void UnpackTest::test_binary()
|
|
{
|
|
QVariantList l;
|
|
l << QByteArray(16, 'm');
|
|
l << QByteArray(256, 's');
|
|
l << QByteArray(65536, 'g');
|
|
l << QByteArray(0, 'p');
|
|
|
|
QByteArray arr = MsgPack::pack(l);
|
|
QVariantList u = MsgPack::unpack(arr).toList();
|
|
|
|
QVERIFY(u[0].toByteArray() == l[0].toByteArray());
|
|
QVERIFY(u[1].toByteArray() == l[1].toByteArray());
|
|
QVERIFY(u[2].toByteArray() == l[2].toByteArray());
|
|
QVERIFY(u[3].toByteArray().isEmpty());
|
|
}
|
|
|
|
void UnpackTest::test_array()
|
|
{
|
|
QVariantList l;
|
|
QVERIFY(MsgPack::unpack(MsgPack::pack(l)).toList().isEmpty());
|
|
|
|
l << 0;
|
|
QByteArray pack = MsgPack::pack(l);
|
|
QVariantList lu = MsgPack::unpack(pack).toList();
|
|
QVERIFY(lu.size() == 1);
|
|
QVERIFY(lu[0] == 0);
|
|
|
|
l = QVariantList();
|
|
for (int i = 0; i < 256; ++i)
|
|
l << i;
|
|
pack = MsgPack::pack(l);
|
|
lu = MsgPack::unpack(pack).toList();
|
|
QVERIFY(lu.size() == 256);
|
|
for (int i = 0; i < 256; ++i)
|
|
QVERIFY(lu[i] == i);
|
|
|
|
l = QVariantList();
|
|
for(int i = 0; i < 65536; ++i)
|
|
l << i;
|
|
pack = MsgPack::pack(l);
|
|
lu = MsgPack::unpack(pack).toList();
|
|
QVERIFY(lu.size() == 65536);
|
|
for (int i = 0; i < 65536; ++i)
|
|
QVERIFY(lu[i] == i);
|
|
}
|
|
|
|
void UnpackTest::test_map()
|
|
{
|
|
QVariantMap m;
|
|
QVariantMap unpacked_m;
|
|
|
|
qint64 ll = 339625541;
|
|
m["ll"] = ll;
|
|
|
|
unpacked_m = MsgPack::unpack(MsgPack::pack(m)).toMap();
|
|
qDebug() << m << "<=>" << unpacked_m;
|
|
QVERIFY(m == unpacked_m);
|
|
|
|
m.clear();
|
|
ll = 3333642741;
|
|
m["ll"] = ll;
|
|
|
|
QByteArray packArray = MsgPack::pack(m);
|
|
unpacked_m = MsgPack::unpack(packArray).toMap();
|
|
qDebug() << m << "<=>" << unpacked_m;
|
|
QVERIFY(m == unpacked_m);
|
|
|
|
m.clear();
|
|
ll = 33336427413;
|
|
m["ll"] = ll;
|
|
|
|
unpacked_m = MsgPack::unpack(MsgPack::pack(m)).toMap();
|
|
qDebug() << m << "<=>" << unpacked_m;
|
|
QVERIFY(m == unpacked_m);
|
|
|
|
m.clear();
|
|
ll = 932838457459459;
|
|
m["ll"] = ll;
|
|
|
|
unpacked_m = MsgPack::unpack(MsgPack::pack(m)).toMap();
|
|
qDebug() << m << "<=>" << unpacked_m;
|
|
QVERIFY(m == unpacked_m);
|
|
}
|
|
|
|
QTEST_APPLESS_MAIN(UnpackTest)
|
|
|
|
#include "unpack_test.moc"
|