Changeset View
Changeset View
Standalone View
Standalone View
src/test/serialize_tests.cpp
Show First 20 Lines • Show All 74 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(sizes) { | ||||
BOOST_CHECK_EQUAL(sizeof(int64_t), GetSerializeSize(int64_t(0), 0, 0)); | BOOST_CHECK_EQUAL(sizeof(int64_t), GetSerializeSize(int64_t(0), 0, 0)); | ||||
BOOST_CHECK_EQUAL(sizeof(uint64_t), GetSerializeSize(uint64_t(0), 0, 0)); | BOOST_CHECK_EQUAL(sizeof(uint64_t), GetSerializeSize(uint64_t(0), 0, 0)); | ||||
BOOST_CHECK_EQUAL(sizeof(float), GetSerializeSize(float(0), 0, 0)); | BOOST_CHECK_EQUAL(sizeof(float), GetSerializeSize(float(0), 0, 0)); | ||||
BOOST_CHECK_EQUAL(sizeof(double), GetSerializeSize(double(0), 0, 0)); | BOOST_CHECK_EQUAL(sizeof(double), GetSerializeSize(double(0), 0, 0)); | ||||
// Bool is serialized as char | // Bool is serialized as char | ||||
BOOST_CHECK_EQUAL(sizeof(char), GetSerializeSize(bool(0), 0, 0)); | BOOST_CHECK_EQUAL(sizeof(char), GetSerializeSize(bool(0), 0, 0)); | ||||
// Sanity-check GetSerializeSize and c++ type matching | // Sanity-check GetSerializeSize and c++ type matching | ||||
BOOST_CHECK_EQUAL(GetSerializeSize(char(0), 0, 0), 1); | BOOST_CHECK_EQUAL(GetSerializeSize(char(0), 0, 0), 1U); | ||||
BOOST_CHECK_EQUAL(GetSerializeSize(int8_t(0), 0, 0), 1); | BOOST_CHECK_EQUAL(GetSerializeSize(int8_t(0), 0, 0), 1U); | ||||
BOOST_CHECK_EQUAL(GetSerializeSize(uint8_t(0), 0, 0), 1); | BOOST_CHECK_EQUAL(GetSerializeSize(uint8_t(0), 0, 0), 1U); | ||||
BOOST_CHECK_EQUAL(GetSerializeSize(int16_t(0), 0, 0), 2); | BOOST_CHECK_EQUAL(GetSerializeSize(int16_t(0), 0, 0), 2U); | ||||
BOOST_CHECK_EQUAL(GetSerializeSize(uint16_t(0), 0, 0), 2); | BOOST_CHECK_EQUAL(GetSerializeSize(uint16_t(0), 0, 0), 2U); | ||||
BOOST_CHECK_EQUAL(GetSerializeSize(int32_t(0), 0, 0), 4); | BOOST_CHECK_EQUAL(GetSerializeSize(int32_t(0), 0, 0), 4U); | ||||
BOOST_CHECK_EQUAL(GetSerializeSize(uint32_t(0), 0, 0), 4); | BOOST_CHECK_EQUAL(GetSerializeSize(uint32_t(0), 0, 0), 4U); | ||||
BOOST_CHECK_EQUAL(GetSerializeSize(int64_t(0), 0, 0), 8); | BOOST_CHECK_EQUAL(GetSerializeSize(int64_t(0), 0, 0), 8U); | ||||
BOOST_CHECK_EQUAL(GetSerializeSize(uint64_t(0), 0, 0), 8); | BOOST_CHECK_EQUAL(GetSerializeSize(uint64_t(0), 0, 0), 8U); | ||||
BOOST_CHECK_EQUAL(GetSerializeSize(float(0), 0, 0), 4); | BOOST_CHECK_EQUAL(GetSerializeSize(float(0), 0, 0), 4U); | ||||
BOOST_CHECK_EQUAL(GetSerializeSize(double(0), 0, 0), 8); | BOOST_CHECK_EQUAL(GetSerializeSize(double(0), 0, 0), 8U); | ||||
BOOST_CHECK_EQUAL(GetSerializeSize(bool(0), 0, 0), 1); | BOOST_CHECK_EQUAL(GetSerializeSize(bool(0), 0, 0), 1U); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(floats_conversion) { | BOOST_AUTO_TEST_CASE(floats_conversion) { | ||||
// Choose values that map unambiguously to binary floating point to avoid | // Choose values that map unambiguously to binary floating point to avoid | ||||
// rounding issues at the compiler side. | // rounding issues at the compiler side. | ||||
BOOST_CHECK_EQUAL(ser_uint32_to_float(0x00000000), 0.0F); | BOOST_CHECK_EQUAL(ser_uint32_to_float(0x00000000), 0.0F); | ||||
BOOST_CHECK_EQUAL(ser_uint32_to_float(0x3f000000), 0.5F); | BOOST_CHECK_EQUAL(ser_uint32_to_float(0x3f000000), 0.5F); | ||||
BOOST_CHECK_EQUAL(ser_uint32_to_float(0x3f800000), 1.0F); | BOOST_CHECK_EQUAL(ser_uint32_to_float(0x3f800000), 1.0F); | ||||
BOOST_CHECK_EQUAL(ser_uint32_to_float(0x40000000), 2.0F); | BOOST_CHECK_EQUAL(ser_uint32_to_float(0x40000000), 2.0F); | ||||
BOOST_CHECK_EQUAL(ser_uint32_to_float(0x40800000), 4.0F); | BOOST_CHECK_EQUAL(ser_uint32_to_float(0x40800000), 4.0F); | ||||
BOOST_CHECK_EQUAL(ser_uint32_to_float(0x44444444), 785.066650390625F); | BOOST_CHECK_EQUAL(ser_uint32_to_float(0x44444444), 785.066650390625F); | ||||
BOOST_CHECK_EQUAL(ser_float_to_uint32(0.0F), 0x00000000); | BOOST_CHECK_EQUAL(ser_float_to_uint32(0.0F), 0x00000000U); | ||||
BOOST_CHECK_EQUAL(ser_float_to_uint32(0.5F), 0x3f000000); | BOOST_CHECK_EQUAL(ser_float_to_uint32(0.5F), 0x3f000000U); | ||||
BOOST_CHECK_EQUAL(ser_float_to_uint32(1.0F), 0x3f800000); | BOOST_CHECK_EQUAL(ser_float_to_uint32(1.0F), 0x3f800000U); | ||||
BOOST_CHECK_EQUAL(ser_float_to_uint32(2.0F), 0x40000000); | BOOST_CHECK_EQUAL(ser_float_to_uint32(2.0F), 0x40000000U); | ||||
BOOST_CHECK_EQUAL(ser_float_to_uint32(4.0F), 0x40800000); | BOOST_CHECK_EQUAL(ser_float_to_uint32(4.0F), 0x40800000U); | ||||
BOOST_CHECK_EQUAL(ser_float_to_uint32(785.066650390625F), 0x44444444); | BOOST_CHECK_EQUAL(ser_float_to_uint32(785.066650390625F), 0x44444444U); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(doubles_conversion) { | BOOST_AUTO_TEST_CASE(doubles_conversion) { | ||||
// Choose values that map unambiguously to binary floating point to avoid | // Choose values that map unambiguously to binary floating point to avoid | ||||
// rounding issues at the compiler side. | // rounding issues at the compiler side. | ||||
BOOST_CHECK_EQUAL(ser_uint64_to_double(0x0000000000000000ULL), 0.0); | BOOST_CHECK_EQUAL(ser_uint64_to_double(0x0000000000000000ULL), 0.0); | ||||
BOOST_CHECK_EQUAL(ser_uint64_to_double(0x3fe0000000000000ULL), 0.5); | BOOST_CHECK_EQUAL(ser_uint64_to_double(0x3fe0000000000000ULL), 0.5); | ||||
BOOST_CHECK_EQUAL(ser_uint64_to_double(0x3ff0000000000000ULL), 1.0); | BOOST_CHECK_EQUAL(ser_uint64_to_double(0x3ff0000000000000ULL), 1.0); | ||||
▲ Show 20 Lines • Show All 235 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(noncanonical) { | ||||
ss.write("\xff\xff\xff\xff\x01\x00\x00\x00\x00", 9); | ss.write("\xff\xff\xff\xff\x01\x00\x00\x00\x00", 9); | ||||
BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, | BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, | ||||
isCanonicalException); | isCanonicalException); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(insert_delete) { | BOOST_AUTO_TEST_CASE(insert_delete) { | ||||
// Test inserting/deleting bytes. | // Test inserting/deleting bytes. | ||||
CDataStream ss(SER_DISK, 0); | CDataStream ss(SER_DISK, 0); | ||||
BOOST_CHECK_EQUAL(ss.size(), 0); | BOOST_CHECK_EQUAL(ss.size(), 0U); | ||||
ss.write("\x00\x01\x02\xff", 4); | ss.write("\x00\x01\x02\xff", 4); | ||||
BOOST_CHECK_EQUAL(ss.size(), 4); | BOOST_CHECK_EQUAL(ss.size(), 4U); | ||||
char c = (char)11; | char c = (char)11; | ||||
// Inserting at beginning/end/middle: | // Inserting at beginning/end/middle: | ||||
ss.insert(ss.begin(), c); | ss.insert(ss.begin(), c); | ||||
BOOST_CHECK_EQUAL(ss.size(), 5); | BOOST_CHECK_EQUAL(ss.size(), 5U); | ||||
BOOST_CHECK_EQUAL(ss[0], c); | BOOST_CHECK_EQUAL(ss[0], c); | ||||
BOOST_CHECK_EQUAL(ss[1], 0); | BOOST_CHECK_EQUAL(ss[1], 0); | ||||
ss.insert(ss.end(), c); | ss.insert(ss.end(), c); | ||||
BOOST_CHECK_EQUAL(ss.size(), 6); | BOOST_CHECK_EQUAL(ss.size(), 6U); | ||||
BOOST_CHECK_EQUAL(ss[4], (char)0xff); | BOOST_CHECK_EQUAL(ss[4], (char)0xff); | ||||
BOOST_CHECK_EQUAL(ss[5], c); | BOOST_CHECK_EQUAL(ss[5], c); | ||||
ss.insert(ss.begin() + 2, c); | ss.insert(ss.begin() + 2, c); | ||||
BOOST_CHECK_EQUAL(ss.size(), 7); | BOOST_CHECK_EQUAL(ss.size(), 7U); | ||||
BOOST_CHECK_EQUAL(ss[2], c); | BOOST_CHECK_EQUAL(ss[2], c); | ||||
// Delete at beginning/end/middle | // Delete at beginning/end/middle | ||||
ss.erase(ss.begin()); | ss.erase(ss.begin()); | ||||
BOOST_CHECK_EQUAL(ss.size(), 6); | BOOST_CHECK_EQUAL(ss.size(), 6U); | ||||
BOOST_CHECK_EQUAL(ss[0], 0); | BOOST_CHECK_EQUAL(ss[0], 0); | ||||
ss.erase(ss.begin() + ss.size() - 1); | ss.erase(ss.begin() + ss.size() - 1); | ||||
BOOST_CHECK_EQUAL(ss.size(), 5); | BOOST_CHECK_EQUAL(ss.size(), 5U); | ||||
BOOST_CHECK_EQUAL(ss[4], (char)0xff); | BOOST_CHECK_EQUAL(ss[4], (char)0xff); | ||||
ss.erase(ss.begin() + 1); | ss.erase(ss.begin() + 1); | ||||
BOOST_CHECK_EQUAL(ss.size(), 4); | BOOST_CHECK_EQUAL(ss.size(), 4U); | ||||
BOOST_CHECK_EQUAL(ss[0], 0); | BOOST_CHECK_EQUAL(ss[0], 0); | ||||
BOOST_CHECK_EQUAL(ss[1], 1); | BOOST_CHECK_EQUAL(ss[1], 1); | ||||
BOOST_CHECK_EQUAL(ss[2], 2); | BOOST_CHECK_EQUAL(ss[2], 2); | ||||
BOOST_CHECK_EQUAL(ss[3], (char)0xff); | BOOST_CHECK_EQUAL(ss[3], (char)0xff); | ||||
// Make sure GetAndClear does the right thing: | // Make sure GetAndClear does the right thing: | ||||
CSerializeData d; | CSerializeData d; | ||||
ss.GetAndClear(d); | ss.GetAndClear(d); | ||||
BOOST_CHECK_EQUAL(ss.size(), 0); | BOOST_CHECK_EQUAL(ss.size(), 0U); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(class_methods) { | BOOST_AUTO_TEST_CASE(class_methods) { | ||||
int intval(100); | int intval(100); | ||||
bool boolval(true); | bool boolval(true); | ||||
std::string stringval("testing"); | std::string stringval("testing"); | ||||
const char *charstrval("testing charstr"); | const char *charstrval("testing charstr"); | ||||
CMutableTransaction txval; | CMutableTransaction txval; | ||||
Show All 24 Lines |