mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-10-14 15:05:37 +02:00
Added steady_clock and high_resolution_clock support.
This commit is contained in:
@@ -1053,6 +1053,385 @@ TEST(MSGPACK_CHRONO, system_clock_impl_now)
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
|
||||
TEST(MSGPACK_CHRONO, steady_clock)
|
||||
{
|
||||
std::chrono::steady_clock::time_point val1;
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, val1);
|
||||
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
std::chrono::steady_clock::time_point val2 = oh.get().as<std::chrono::steady_clock::time_point>();
|
||||
EXPECT_EQ(val1, val2);
|
||||
|
||||
std::chrono::steady_clock::time_point val3;
|
||||
oh.get().convert(val3);
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CHRONO, steady_clock_32)
|
||||
{
|
||||
std::chrono::steady_clock::time_point val1(std::chrono::seconds(0x12345678L));
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, val1);
|
||||
char packed[] = {
|
||||
static_cast<char>(0xd6u),
|
||||
static_cast<char>(-1),
|
||||
static_cast<char>(0x12),
|
||||
static_cast<char>(0x34),
|
||||
static_cast<char>(0x56),
|
||||
static_cast<char>(0x78)
|
||||
};
|
||||
EXPECT_EQ(memcmp(sbuf.data(), packed, sizeof(packed)), 0);
|
||||
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
std::chrono::steady_clock::time_point val2 = oh.get().as<std::chrono::steady_clock::time_point>();
|
||||
EXPECT_EQ(val1, val2);
|
||||
|
||||
std::chrono::steady_clock::time_point val3;
|
||||
oh.get().convert(val3);
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CHRONO, steady_clock_32_max)
|
||||
{
|
||||
std::chrono::steady_clock::time_point val1(std::chrono::seconds(0xffffffffL));
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, val1);
|
||||
char packed[] = {
|
||||
static_cast<char>(0xd6u),
|
||||
static_cast<char>(-1),
|
||||
static_cast<char>(0xffu),
|
||||
static_cast<char>(0xffu),
|
||||
static_cast<char>(0xffu),
|
||||
static_cast<char>(0xffu)
|
||||
};
|
||||
EXPECT_EQ(memcmp(sbuf.data(), packed, sizeof(packed)), 0);
|
||||
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
std::chrono::steady_clock::time_point val2 = oh.get().as<std::chrono::steady_clock::time_point>();
|
||||
EXPECT_EQ(val1, val2);
|
||||
|
||||
std::chrono::steady_clock::time_point val3;
|
||||
oh.get().convert(val3);
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
|
||||
TEST(MSGPACK_CHRONO, steady_clock_64)
|
||||
{
|
||||
std::chrono::steady_clock::time_point val1(std::chrono::seconds(0x31234567L));
|
||||
val1 +=
|
||||
std::chrono::duration_cast<std::chrono::steady_clock::duration>(
|
||||
std::chrono::nanoseconds(0x312345678L)
|
||||
);
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, val1);
|
||||
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
std::chrono::steady_clock::time_point val2 = oh.get().as<std::chrono::steady_clock::time_point>();
|
||||
EXPECT_EQ(val1, val2);
|
||||
|
||||
std::chrono::steady_clock::time_point val3;
|
||||
oh.get().convert(val3);
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CHRONO, steady_clock_64_max)
|
||||
{
|
||||
std::chrono::steady_clock::time_point val1(std::chrono::seconds(0xffffffffL));
|
||||
|
||||
val1 +=
|
||||
std::chrono::duration_cast<std::chrono::steady_clock::duration>(
|
||||
std::chrono::nanoseconds(0x3b9ac9ffL) // 999,999,999
|
||||
);
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, val1);
|
||||
char packed_nano[] = {
|
||||
static_cast<char>(0xd7u),
|
||||
static_cast<char>(-1),
|
||||
static_cast<char>(0xeeu), // 999,999,999 << 2
|
||||
static_cast<char>(0x6b),
|
||||
static_cast<char>(0x27),
|
||||
static_cast<char>(0xfcu),
|
||||
static_cast<char>(0xffu), // 32 bit sec
|
||||
static_cast<char>(0xffu),
|
||||
static_cast<char>(0xffu),
|
||||
static_cast<char>(0xffu)
|
||||
};
|
||||
char packed_micro[] = {
|
||||
static_cast<char>(0xd7u),
|
||||
static_cast<char>(-1),
|
||||
static_cast<char>(0xeeu), // 999,999,000 << 2
|
||||
static_cast<char>(0x6b),
|
||||
static_cast<char>(0x18),
|
||||
static_cast<char>(0x60),
|
||||
static_cast<char>(0xffu), // 32 bit sec
|
||||
static_cast<char>(0xffu),
|
||||
static_cast<char>(0xffu),
|
||||
static_cast<char>(0xffu)
|
||||
};
|
||||
if (std::chrono::steady_clock::duration::period::ratio::den == 1000000000) {
|
||||
EXPECT_EQ(memcmp(sbuf.data(), packed_nano, sizeof(packed_nano)), 0);
|
||||
}
|
||||
else if (std::chrono::steady_clock::duration::period::ratio::den == 1000000) {
|
||||
EXPECT_EQ(memcmp(sbuf.data(), packed_micro, sizeof(packed_micro)), 0);
|
||||
}
|
||||
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
std::chrono::steady_clock::time_point val2 = oh.get().as<std::chrono::steady_clock::time_point>();
|
||||
EXPECT_EQ(val1, val2);
|
||||
|
||||
std::chrono::steady_clock::time_point val3;
|
||||
oh.get().convert(val3);
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CHRONO, steady_clock_impl_min)
|
||||
{
|
||||
std::chrono::steady_clock::time_point val1(std::chrono::steady_clock::time_point::min());
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, val1);
|
||||
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
std::chrono::steady_clock::time_point val2 = oh.get().as<std::chrono::steady_clock::time_point>();
|
||||
EXPECT_EQ(val1, val2);
|
||||
|
||||
std::chrono::steady_clock::time_point val3;
|
||||
oh.get().convert(val3);
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CHRONO, steady_clock_impl_max)
|
||||
{
|
||||
std::chrono::steady_clock::time_point val1(std::chrono::steady_clock::time_point::max());
|
||||
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, val1);
|
||||
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
std::chrono::steady_clock::time_point val2 = oh.get().as<std::chrono::steady_clock::time_point>();
|
||||
EXPECT_EQ(val1, val2);
|
||||
|
||||
std::chrono::steady_clock::time_point val3;
|
||||
oh.get().convert(val3);
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CHRONO, steady_clock_impl_now)
|
||||
{
|
||||
std::chrono::steady_clock::time_point val1(std::chrono::steady_clock::now());
|
||||
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, val1);
|
||||
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
std::chrono::steady_clock::time_point val2 = oh.get().as<std::chrono::steady_clock::time_point>();
|
||||
EXPECT_EQ(val1, val2);
|
||||
|
||||
std::chrono::steady_clock::time_point val3;
|
||||
oh.get().convert(val3);
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
|
||||
TEST(MSGPACK_CHRONO, high_resolution_clock)
|
||||
{
|
||||
std::chrono::high_resolution_clock::time_point val1;
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, val1);
|
||||
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
std::chrono::high_resolution_clock::time_point val2 = oh.get().as<std::chrono::high_resolution_clock::time_point>();
|
||||
EXPECT_EQ(val1, val2);
|
||||
|
||||
std::chrono::high_resolution_clock::time_point val3;
|
||||
oh.get().convert(val3);
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CHRONO, high_resolution_clock_32)
|
||||
{
|
||||
std::chrono::high_resolution_clock::time_point val1(std::chrono::seconds(0x12345678L));
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, val1);
|
||||
char packed[] = {
|
||||
static_cast<char>(0xd6u),
|
||||
static_cast<char>(-1),
|
||||
static_cast<char>(0x12),
|
||||
static_cast<char>(0x34),
|
||||
static_cast<char>(0x56),
|
||||
static_cast<char>(0x78)
|
||||
};
|
||||
EXPECT_EQ(memcmp(sbuf.data(), packed, sizeof(packed)), 0);
|
||||
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
std::chrono::high_resolution_clock::time_point val2 = oh.get().as<std::chrono::high_resolution_clock::time_point>();
|
||||
EXPECT_EQ(val1, val2);
|
||||
|
||||
std::chrono::high_resolution_clock::time_point val3;
|
||||
oh.get().convert(val3);
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CHRONO, high_resolution_clock_32_max)
|
||||
{
|
||||
std::chrono::high_resolution_clock::time_point val1(std::chrono::seconds(0xffffffffL));
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, val1);
|
||||
char packed[] = {
|
||||
static_cast<char>(0xd6u),
|
||||
static_cast<char>(-1),
|
||||
static_cast<char>(0xffu),
|
||||
static_cast<char>(0xffu),
|
||||
static_cast<char>(0xffu),
|
||||
static_cast<char>(0xffu)
|
||||
};
|
||||
EXPECT_EQ(memcmp(sbuf.data(), packed, sizeof(packed)), 0);
|
||||
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
std::chrono::high_resolution_clock::time_point val2 = oh.get().as<std::chrono::high_resolution_clock::time_point>();
|
||||
EXPECT_EQ(val1, val2);
|
||||
|
||||
std::chrono::high_resolution_clock::time_point val3;
|
||||
oh.get().convert(val3);
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
|
||||
TEST(MSGPACK_CHRONO, high_resolution_clock_64)
|
||||
{
|
||||
std::chrono::high_resolution_clock::time_point val1(std::chrono::seconds(0x31234567L));
|
||||
val1 +=
|
||||
std::chrono::duration_cast<std::chrono::high_resolution_clock::duration>(
|
||||
std::chrono::nanoseconds(0x312345678L)
|
||||
);
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, val1);
|
||||
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
std::chrono::high_resolution_clock::time_point val2 = oh.get().as<std::chrono::high_resolution_clock::time_point>();
|
||||
EXPECT_EQ(val1, val2);
|
||||
|
||||
std::chrono::high_resolution_clock::time_point val3;
|
||||
oh.get().convert(val3);
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CHRONO, high_resolution_clock_64_max)
|
||||
{
|
||||
std::chrono::high_resolution_clock::time_point val1(std::chrono::seconds(0xffffffffL));
|
||||
|
||||
val1 +=
|
||||
std::chrono::duration_cast<std::chrono::high_resolution_clock::duration>(
|
||||
std::chrono::nanoseconds(0x3b9ac9ffL) // 999,999,999
|
||||
);
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, val1);
|
||||
char packed_nano[] = {
|
||||
static_cast<char>(0xd7u),
|
||||
static_cast<char>(-1),
|
||||
static_cast<char>(0xeeu), // 999,999,999 << 2
|
||||
static_cast<char>(0x6b),
|
||||
static_cast<char>(0x27),
|
||||
static_cast<char>(0xfcu),
|
||||
static_cast<char>(0xffu), // 32 bit sec
|
||||
static_cast<char>(0xffu),
|
||||
static_cast<char>(0xffu),
|
||||
static_cast<char>(0xffu)
|
||||
};
|
||||
char packed_micro[] = {
|
||||
static_cast<char>(0xd7u),
|
||||
static_cast<char>(-1),
|
||||
static_cast<char>(0xeeu), // 999,999,000 << 2
|
||||
static_cast<char>(0x6b),
|
||||
static_cast<char>(0x18),
|
||||
static_cast<char>(0x60),
|
||||
static_cast<char>(0xffu), // 32 bit sec
|
||||
static_cast<char>(0xffu),
|
||||
static_cast<char>(0xffu),
|
||||
static_cast<char>(0xffu)
|
||||
};
|
||||
if (std::chrono::high_resolution_clock::duration::period::ratio::den == 1000000000) {
|
||||
EXPECT_EQ(memcmp(sbuf.data(), packed_nano, sizeof(packed_nano)), 0);
|
||||
}
|
||||
else if (std::chrono::high_resolution_clock::duration::period::ratio::den == 1000000) {
|
||||
EXPECT_EQ(memcmp(sbuf.data(), packed_micro, sizeof(packed_micro)), 0);
|
||||
}
|
||||
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
std::chrono::high_resolution_clock::time_point val2 = oh.get().as<std::chrono::high_resolution_clock::time_point>();
|
||||
EXPECT_EQ(val1, val2);
|
||||
|
||||
std::chrono::high_resolution_clock::time_point val3;
|
||||
oh.get().convert(val3);
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CHRONO, high_resolution_clock_impl_min)
|
||||
{
|
||||
std::chrono::high_resolution_clock::time_point val1(std::chrono::high_resolution_clock::time_point::min());
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, val1);
|
||||
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
std::chrono::high_resolution_clock::time_point val2 = oh.get().as<std::chrono::high_resolution_clock::time_point>();
|
||||
EXPECT_EQ(val1, val2);
|
||||
|
||||
std::chrono::high_resolution_clock::time_point val3;
|
||||
oh.get().convert(val3);
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CHRONO, high_resolution_clock_impl_max)
|
||||
{
|
||||
std::chrono::high_resolution_clock::time_point val1(std::chrono::high_resolution_clock::time_point::max());
|
||||
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, val1);
|
||||
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
std::chrono::high_resolution_clock::time_point val2 = oh.get().as<std::chrono::high_resolution_clock::time_point>();
|
||||
EXPECT_EQ(val1, val2);
|
||||
|
||||
std::chrono::high_resolution_clock::time_point val3;
|
||||
oh.get().convert(val3);
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CHRONO, high_resolution_clock_impl_now)
|
||||
{
|
||||
std::chrono::high_resolution_clock::time_point val1(std::chrono::high_resolution_clock::now());
|
||||
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, val1);
|
||||
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
std::chrono::high_resolution_clock::time_point val2 = oh.get().as<std::chrono::high_resolution_clock::time_point>();
|
||||
EXPECT_EQ(val1, val2);
|
||||
|
||||
std::chrono::high_resolution_clock::time_point val3;
|
||||
oh.get().convert(val3);
|
||||
EXPECT_EQ(val1, val3);
|
||||
}
|
||||
|
||||
|
||||
TEST(MSGPACK_TIMESPEC, timespec_pack_convert_zero)
|
||||
{
|
||||
std::stringstream ss;
|
||||
|
Reference in New Issue
Block a user