mirror of
https://github.com/romixlab/qmsgpack.git
synced 2025-08-01 11:24:26 +02:00
MsgPackStream integers pack and unpack
User types packers now called only once, and return QByteArray
This commit is contained in:
@@ -8,7 +8,7 @@ if (Qt5Core_FOUND)
|
||||
set(TEST_LIBRARIES ${Qt5Test_LIBRARIES})
|
||||
endif ()
|
||||
|
||||
set(TEST_SUBDIRS pack unpack mixed qttypes)
|
||||
set(TEST_SUBDIRS pack unpack mixed qttypes stream)
|
||||
|
||||
foreach(subdir ${TEST_SUBDIRS})
|
||||
add_subdirectory(${subdir})
|
||||
|
@@ -66,17 +66,15 @@ private:
|
||||
|
||||
Q_DECLARE_METATYPE(CustomType)
|
||||
|
||||
quint32 pack_custom_type(const QVariant &variant, QByteArray &data, bool write)
|
||||
QByteArray pack_custom_type(const QVariant &variant)
|
||||
{
|
||||
CustomType ct = variant.value<CustomType>();
|
||||
if (write) {
|
||||
data.resize(ct.size());
|
||||
quint8 *p = (quint8 *)data.data();
|
||||
for (int i = 0; i < ct.size(); ++i)
|
||||
p[i] = 7;
|
||||
}
|
||||
|
||||
return ct.size();
|
||||
QByteArray data;
|
||||
data.resize(ct.size());
|
||||
quint8 *p = (quint8 *)data.data();
|
||||
for (int i = 0; i < ct.size(); ++i)
|
||||
p[i] = 7;
|
||||
return data;
|
||||
}
|
||||
|
||||
QVariant unpack_custom_type(const QByteArray &data)
|
||||
|
24
tests/stream/CMakeLists.txt
Normal file
24
tests/stream/CMakeLists.txt
Normal file
@@ -0,0 +1,24 @@
|
||||
set(QT_USE_QTTEST TRUE)
|
||||
|
||||
if (NOT Qt5Core_FOUND)
|
||||
include( ${QT_USE_FILE} )
|
||||
endif()
|
||||
|
||||
include(AddFileDependencies)
|
||||
|
||||
include_directories(../../src ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
set(UNIT_TESTS stream_test)
|
||||
|
||||
foreach(test ${UNIT_TESTS})
|
||||
message(status "Building ${test}")
|
||||
add_executable(${test} ${test}.cpp)
|
||||
|
||||
target_link_libraries(${test}
|
||||
${QT_LIBRARIES}
|
||||
${TEST_LIBRARIES}
|
||||
qmsgpack
|
||||
)
|
||||
|
||||
add_test(${test} ${test})
|
||||
endforeach()
|
141
tests/stream/stream_test.cpp
Normal file
141
tests/stream/stream_test.cpp
Normal file
@@ -0,0 +1,141 @@
|
||||
#include <QString>
|
||||
#include <QtTest>
|
||||
#include <QDebug>
|
||||
#include <stream.h>
|
||||
#include <msgpack.h>
|
||||
#include <limits>
|
||||
|
||||
class StreamTest : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private Q_SLOTS:
|
||||
void test_unpack_integers();
|
||||
void test_pack_integers();
|
||||
|
||||
};
|
||||
|
||||
void StreamTest::test_unpack_integers()
|
||||
{
|
||||
QByteArray ints = QByteArray::fromBase64("AH//4cyAzP/Q39CAzQEAzf//0f9/0YAAz"
|
||||
"gABAADO/////9L//3//0oAAAADPAAAAAQ"
|
||||
"AAAADP///////////T/////3/////TgAA"
|
||||
"AAAAAAAA=");
|
||||
MsgPackStream stream(ints);
|
||||
quint8 u8;
|
||||
quint16 u16;
|
||||
quint32 u32;
|
||||
quint64 u64;
|
||||
qint8 i8;
|
||||
qint16 i16;
|
||||
qint32 i32;
|
||||
qint64 i64;
|
||||
|
||||
stream >> u8;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(u8 == 0);
|
||||
stream >> u8;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(u8 == 127);
|
||||
stream >> i8;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(i8 == -1);
|
||||
stream >> i8;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(i8 == -31);
|
||||
stream >> u8;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(u8 == 128);
|
||||
stream >> u8;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(u8 == 255);
|
||||
stream >> i8;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(i8 == -33);
|
||||
stream >> i8;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(i8 == -128);
|
||||
stream >> u16;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(u16 == 256);
|
||||
stream >> u32;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(u32 == 65535);
|
||||
stream >> i16;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(i16 == -129);
|
||||
stream >> i16;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(i16 == -32768);
|
||||
stream >> u32;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(u32 == 65536);
|
||||
stream >> u32;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(u32 == 4294967295);
|
||||
stream >> i32;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(i32 == -32769);
|
||||
stream >> i32;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(i32 == -2147483648);
|
||||
stream >> u64;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(u64 == 4294967296);
|
||||
stream >> u64;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(u64 == std::numeric_limits<quint64>::max());
|
||||
stream >> i64;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(i64 == -2147483649);
|
||||
stream >> i64;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
QVERIFY(i64 == std::numeric_limits<qint64>::min());
|
||||
}
|
||||
|
||||
void StreamTest::test_pack_integers()
|
||||
{
|
||||
QByteArray packed;
|
||||
MsgPackStream stream(&packed, QIODevice::WriteOnly);
|
||||
stream << 0 << 127 << -1 << -31 << 128 << 255 << -33 << -128 << 256;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
stream << 65535 << -129 << -32768 << 65536;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
stream << (quint32)4294967295 << -32769 << (qint32)-2147483648;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
stream << (quint64)4294967296;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
stream << std::numeric_limits<quint64>::max();
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
stream << (qint64)-2147483649;
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
stream << std::numeric_limits<qint64>::min();
|
||||
QVERIFY(stream.status() == MsgPackStream::Ok);
|
||||
|
||||
QVariantList l = MsgPack::unpack(packed).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());
|
||||
}
|
||||
|
||||
|
||||
QTEST_APPLESS_MAIN(StreamTest)
|
||||
|
||||
#include "stream_test.moc"
|
Reference in New Issue
Block a user