4 #include <boost/test/unit_test.hpp> 18 char buffer[32] = {0};
20 encoder<true, std::uint8_t>::w(16, buffer, 1, std::uint8_t(20));
21 auto actual = decoder<true, std::uint8_t>::r(16, buffer, 1);
22 BOOST_CHECK_EQUAL(actual, 20);
23 BOOST_CHECK_EQUAL(buffer[1], 20);
25 encoder<true, std::uint8_t>::w(16, buffer, 3, std::uint8_t(25));
26 actual = decoder<false, std::uint8_t>::r(16, buffer, 3);
27 BOOST_CHECK_EQUAL(actual, 25);
28 BOOST_CHECK_EQUAL(buffer[3], 25);
30 BOOST_CHECK_NO_THROW((encoder<true, std::uint8_t>::w(16, buffer, 0, 0)));
31 BOOST_CHECK_NO_THROW((encoder<true, std::uint8_t>::w(16, buffer, 8, 0)));
32 BOOST_CHECK_NO_THROW((encoder<true, std::uint8_t>::w(16, buffer, 15, 0)));
34 (encoder<true, std::uint8_t>::w(16, buffer, 16, 0)), std::runtime_error);
35 BOOST_CHECK_NO_THROW((encoder<false, std::uint8_t>::w(16, buffer, 16, 0)));
46 std::uint16_t expected = 0xAA10;
47 encoder<true, std::uint16_t>::w(16, buffer, 0, expected);
48 auto actual = decoder<true, std::uint16_t>::r(16, buffer, 0);
49 BOOST_CHECK_EQUAL(actual, expected);
50 BOOST_CHECK_EQUAL(std::uint8_t(buffer[0]), 0xAA);
51 BOOST_CHECK_EQUAL(std::uint8_t(buffer[1]), 0x10);
53 encoder<false, std::uint16_t>::w(16, buffer, 0, expected);
54 actual = decoder<false, std::uint16_t>::r(16, buffer, 0);
55 BOOST_CHECK_EQUAL(actual, expected);
56 BOOST_CHECK_EQUAL(std::uint8_t(buffer[0]), 0xAA);
57 BOOST_CHECK_EQUAL(std::uint8_t(buffer[1]), 0x10);
59 BOOST_CHECK_NO_THROW((encoder<true, std::uint16_t>::w(16, buffer, 0, 0)));
60 BOOST_CHECK_NO_THROW((encoder<true, std::uint16_t>::w(16, buffer, 8, 0)));
61 BOOST_CHECK_NO_THROW((encoder<true, std::uint16_t>::w(16, buffer, 14, 0)));
63 (encoder<true, std::uint16_t>::w(16, buffer, 15, 0)), std::runtime_error);
64 BOOST_CHECK_NO_THROW((encoder<false, std::uint16_t>::w(16, buffer, 15, 0)));
74 std::uint32_t expected = 0x10203040;
76 unsigned char const contents[] = u8
"\x10\x20\x30\x40";
77 std::size_t
const len =
sizeof(contents) /
sizeof(contents[0]) - 1;
79 encoder<true, std::uint32_t>::w(16, buffer, 0, expected);
80 auto actual = decoder<true, std::uint32_t>::r(16, buffer, 0);
81 BOOST_CHECK_EQUAL(actual, expected);
82 BOOST_CHECK_EQUAL_COLLECTIONS(buffer, buffer + 4, contents, contents + len);
84 encoder<false, std::uint32_t>::w(16, buffer, 0, expected);
85 actual = decoder<false, std::uint32_t>::r(16, buffer, 0);
86 BOOST_CHECK_EQUAL(actual, expected);
87 BOOST_CHECK_EQUAL_COLLECTIONS(buffer, buffer + 4, contents, contents + len);
89 BOOST_CHECK_NO_THROW((encoder<true, std::uint32_t>::w(16, buffer, 0, 0)));
90 BOOST_CHECK_NO_THROW((encoder<true, std::uint32_t>::w(16, buffer, 8, 0)));
91 BOOST_CHECK_NO_THROW((encoder<true, std::uint32_t>::w(16, buffer, 12, 0)));
93 (encoder<true, std::uint32_t>::w(16, buffer, 13, 0)), std::runtime_error);
94 BOOST_CHECK_NO_THROW((encoder<false, std::uint32_t>::w(16, buffer, 13, 0)));
103 unsigned char buffer[32];
104 std::uint64_t expected = 0xAABBCCDDEEFF0011ULL;
105 encoder<true, std::uint64_t>::w(16, buffer, 0, expected);
107 unsigned char const contents[] = u8
"\xAA\xBB\xCC\xDD\xEE\xFF\x00\x11";
108 std::size_t
const len =
sizeof(contents) /
sizeof(contents[0]) - 1;
110 auto actual = decoder<true, std::uint64_t>::r(16, buffer, 0);
111 BOOST_CHECK_EQUAL(actual, expected);
112 BOOST_CHECK_EQUAL_COLLECTIONS(buffer, buffer + 8, contents, contents + len);
114 encoder<false, std::uint64_t>::w(16, buffer, 0, expected);
115 actual = decoder<false, std::uint64_t>::r(16, buffer, 0);
116 BOOST_CHECK_EQUAL(actual, expected);
117 BOOST_CHECK_EQUAL_COLLECTIONS(buffer, buffer + 8, contents, contents + len);
119 BOOST_CHECK_NO_THROW((encoder<true, std::uint64_t>::w(16, buffer, 2, 0)));
120 BOOST_CHECK_NO_THROW((encoder<true, std::uint64_t>::w(16, buffer, 7, 0)));
122 (encoder<true, std::uint64_t>::w(16, buffer, 9, 0)), std::runtime_error);
123 BOOST_CHECK_NO_THROW((encoder<false, std::uint64_t>::w(16, buffer, 9, 0)));
BOOST_AUTO_TEST_CASE(encode_uint8)
TODO(#19) all this code should be replaced with Boost.Endian.
Define the interface to decode ITCH-5.0 messages and message fields.