Changeset View
Changeset View
Standalone View
Standalone View
src/test/serialize_tests.cpp
Show First 20 Lines • Show All 180 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
BOOST_AUTO_TEST_CASE(varints) { | BOOST_AUTO_TEST_CASE(varints) { | ||||
// encode | // encode | ||||
CDataStream ss(SER_DISK, 0); | CDataStream ss(SER_DISK, 0); | ||||
CDataStream::size_type size = 0; | CDataStream::size_type size = 0; | ||||
for (int i = 0; i < 100000; i++) { | for (int i = 0; i < 100000; i++) { | ||||
ss << VARINT(i); | ss << VARINT(i, VarIntMode::NONNEGATIVE_SIGNED); | ||||
size += ::GetSerializeSize(VARINT(i), 0, 0); | size += | ||||
::GetSerializeSize(VARINT(i, VarIntMode::NONNEGATIVE_SIGNED), 0, 0); | |||||
BOOST_CHECK(size == ss.size()); | BOOST_CHECK(size == ss.size()); | ||||
} | } | ||||
for (uint64_t i = 0; i < 100000000000ULL; i += 999999937) { | for (uint64_t i = 0; i < 100000000000ULL; i += 999999937) { | ||||
ss << VARINT(i); | ss << VARINT(i); | ||||
size += ::GetSerializeSize(VARINT(i), 0, 0); | size += ::GetSerializeSize(VARINT(i), 0, 0); | ||||
BOOST_CHECK(size == ss.size()); | BOOST_CHECK(size == ss.size()); | ||||
} | } | ||||
// decode | // decode | ||||
for (int i = 0; i < 100000; i++) { | for (int i = 0; i < 100000; i++) { | ||||
int j = -1; | int j = -1; | ||||
ss >> VARINT(j); | ss >> VARINT(j, VarIntMode::NONNEGATIVE_SIGNED); | ||||
BOOST_CHECK_MESSAGE(i == j, "decoded:" << j << " expected:" << i); | BOOST_CHECK_MESSAGE(i == j, "decoded:" << j << " expected:" << i); | ||||
} | } | ||||
for (uint64_t i = 0; i < 100000000000ULL; i += 999999937) { | for (uint64_t i = 0; i < 100000000000ULL; i += 999999937) { | ||||
uint64_t j = -1; | uint64_t j = -1; | ||||
ss >> VARINT(j); | ss >> VARINT(j); | ||||
BOOST_CHECK_MESSAGE(i == j, "decoded:" << j << " expected:" << i); | BOOST_CHECK_MESSAGE(i == j, "decoded:" << j << " expected:" << i); | ||||
} | } | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(varints_bitpatterns) { | BOOST_AUTO_TEST_CASE(varints_bitpatterns) { | ||||
CDataStream ss(SER_DISK, 0); | CDataStream ss(SER_DISK, 0); | ||||
ss << VARINT(0); | ss << VARINT(0, VarIntMode::NONNEGATIVE_SIGNED); | ||||
BOOST_CHECK_EQUAL(HexStr(ss), "00"); | BOOST_CHECK_EQUAL(HexStr(ss), "00"); | ||||
ss.clear(); | ss.clear(); | ||||
ss << VARINT(0x7f); | ss << VARINT(0x7f, VarIntMode::NONNEGATIVE_SIGNED); | ||||
BOOST_CHECK_EQUAL(HexStr(ss), "7f"); | BOOST_CHECK_EQUAL(HexStr(ss), "7f"); | ||||
ss.clear(); | ss.clear(); | ||||
ss << VARINT((int8_t)0x7f); | ss << VARINT((int8_t)0x7f, VarIntMode::NONNEGATIVE_SIGNED); | ||||
BOOST_CHECK_EQUAL(HexStr(ss), "7f"); | BOOST_CHECK_EQUAL(HexStr(ss), "7f"); | ||||
ss.clear(); | ss.clear(); | ||||
ss << VARINT(0x80); | ss << VARINT(0x80, VarIntMode::NONNEGATIVE_SIGNED); | ||||
BOOST_CHECK_EQUAL(HexStr(ss), "8000"); | BOOST_CHECK_EQUAL(HexStr(ss), "8000"); | ||||
ss.clear(); | ss.clear(); | ||||
ss << VARINT((uint8_t)0x80); | ss << VARINT((uint8_t)0x80); | ||||
BOOST_CHECK_EQUAL(HexStr(ss), "8000"); | BOOST_CHECK_EQUAL(HexStr(ss), "8000"); | ||||
ss.clear(); | ss.clear(); | ||||
ss << VARINT(0x1234); | ss << VARINT(0x1234, VarIntMode::NONNEGATIVE_SIGNED); | ||||
BOOST_CHECK_EQUAL(HexStr(ss), "a334"); | BOOST_CHECK_EQUAL(HexStr(ss), "a334"); | ||||
ss.clear(); | ss.clear(); | ||||
ss << VARINT((int16_t)0x1234); | ss << VARINT((int16_t)0x1234, VarIntMode::NONNEGATIVE_SIGNED); | ||||
BOOST_CHECK_EQUAL(HexStr(ss), "a334"); | BOOST_CHECK_EQUAL(HexStr(ss), "a334"); | ||||
ss.clear(); | ss.clear(); | ||||
ss << VARINT(0xffff); | ss << VARINT(0xffff, VarIntMode::NONNEGATIVE_SIGNED); | ||||
BOOST_CHECK_EQUAL(HexStr(ss), "82fe7f"); | BOOST_CHECK_EQUAL(HexStr(ss), "82fe7f"); | ||||
ss.clear(); | ss.clear(); | ||||
ss << VARINT((uint16_t)0xffff); | ss << VARINT((uint16_t)0xffff); | ||||
BOOST_CHECK_EQUAL(HexStr(ss), "82fe7f"); | BOOST_CHECK_EQUAL(HexStr(ss), "82fe7f"); | ||||
ss.clear(); | ss.clear(); | ||||
ss << VARINT(0x123456); | ss << VARINT(0x123456, VarIntMode::NONNEGATIVE_SIGNED); | ||||
BOOST_CHECK_EQUAL(HexStr(ss), "c7e756"); | BOOST_CHECK_EQUAL(HexStr(ss), "c7e756"); | ||||
ss.clear(); | ss.clear(); | ||||
ss << VARINT((int32_t)0x123456); | ss << VARINT((int32_t)0x123456, VarIntMode::NONNEGATIVE_SIGNED); | ||||
BOOST_CHECK_EQUAL(HexStr(ss), "c7e756"); | BOOST_CHECK_EQUAL(HexStr(ss), "c7e756"); | ||||
ss.clear(); | ss.clear(); | ||||
ss << VARINT(0x80123456U); | ss << VARINT(0x80123456U); | ||||
BOOST_CHECK_EQUAL(HexStr(ss), "86ffc7e756"); | BOOST_CHECK_EQUAL(HexStr(ss), "86ffc7e756"); | ||||
ss.clear(); | ss.clear(); | ||||
ss << VARINT((uint32_t)0x80123456U); | ss << VARINT((uint32_t)0x80123456U); | ||||
BOOST_CHECK_EQUAL(HexStr(ss), "86ffc7e756"); | BOOST_CHECK_EQUAL(HexStr(ss), "86ffc7e756"); | ||||
ss.clear(); | ss.clear(); | ||||
ss << VARINT(0xffffffff); | ss << VARINT(0xffffffff); | ||||
BOOST_CHECK_EQUAL(HexStr(ss), "8efefefe7f"); | BOOST_CHECK_EQUAL(HexStr(ss), "8efefefe7f"); | ||||
ss.clear(); | ss.clear(); | ||||
ss << VARINT(0x7fffffffffffffffLL); | ss << VARINT(0x7fffffffffffffffLL, VarIntMode::NONNEGATIVE_SIGNED); | ||||
BOOST_CHECK_EQUAL(HexStr(ss), "fefefefefefefefe7f"); | BOOST_CHECK_EQUAL(HexStr(ss), "fefefefefefefefe7f"); | ||||
ss.clear(); | ss.clear(); | ||||
ss << VARINT(0xffffffffffffffffULL); | ss << VARINT(0xffffffffffffffffULL); | ||||
BOOST_CHECK_EQUAL(HexStr(ss), "80fefefefefefefefe7f"); | BOOST_CHECK_EQUAL(HexStr(ss), "80fefefefefefefefe7f"); | ||||
ss.clear(); | ss.clear(); | ||||
} | } | ||||
static bool isTooLargeException(const std::ios_base::failure &ex) { | static bool isTooLargeException(const std::ios_base::failure &ex) { | ||||
▲ Show 20 Lines • Show All 171 Lines • Show Last 20 Lines |