]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/endian/test/buffer_test.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / endian / test / buffer_test.cpp
1 // buffer_test.cpp -------------------------------------------------------------------//
2
3 // Copyright Beman Dawes 2014
4
5 // Distributed under the Boost Software License, Version 1.0.
6 // See http://www.boost.org/LICENSE_1_0.txt
7
8 // See library home page at http://www.boost.org/libs/endian
9
10 //--------------------------------------------------------------------------------------//
11
12 #include <boost/endian/detail/disable_warnings.hpp>
13
14 //#define BOOST_ENDIAN_LOG
15 #include <boost/endian/buffers.hpp>
16 #include <boost/detail/lightweight_main.hpp>
17 #include <boost/core/lightweight_test.hpp>
18 #include <boost/cstdint.hpp>
19 #include <iostream>
20 #include <sstream>
21
22 using namespace boost::endian;
23 using std::cout;
24 using std::endl;
25
26 namespace
27 {
28
29 // check_size ------------------------------------------------------------//
30
31 void check_size()
32 {
33
34 BOOST_TEST_EQ(sizeof(big_int8_buf_t), 1u);
35 BOOST_TEST_EQ(sizeof(big_int16_buf_t), 2u);
36 BOOST_TEST_EQ(sizeof(big_int24_buf_t), 3u);
37 BOOST_TEST_EQ(sizeof(big_int32_buf_t), 4u);
38 BOOST_TEST_EQ(sizeof(big_int40_buf_t), 5u);
39 BOOST_TEST_EQ(sizeof(big_int48_buf_t), 6u);
40 BOOST_TEST_EQ(sizeof(big_int56_buf_t), 7u);
41 BOOST_TEST_EQ(sizeof(big_int64_buf_t), 8u);
42
43 BOOST_TEST_EQ(sizeof(big_uint8_buf_t), 1u);
44 BOOST_TEST_EQ(sizeof(big_uint16_buf_t), 2u);
45 BOOST_TEST_EQ(sizeof(big_uint24_buf_t), 3u);
46 BOOST_TEST_EQ(sizeof(big_uint32_buf_t), 4u);
47 BOOST_TEST_EQ(sizeof(big_uint40_buf_t), 5u);
48 BOOST_TEST_EQ(sizeof(big_uint48_buf_t), 6u);
49 BOOST_TEST_EQ(sizeof(big_uint56_buf_t), 7u);
50 BOOST_TEST_EQ(sizeof(big_uint64_buf_t), 8u);
51
52 BOOST_TEST_EQ(sizeof(little_int8_buf_t), 1u);
53 BOOST_TEST_EQ(sizeof(little_int16_buf_t), 2u);
54 BOOST_TEST_EQ(sizeof(little_int24_buf_t), 3u);
55 BOOST_TEST_EQ(sizeof(little_int32_buf_t), 4u);
56 BOOST_TEST_EQ(sizeof(little_int40_buf_t), 5u);
57 BOOST_TEST_EQ(sizeof(little_int48_buf_t), 6u);
58 BOOST_TEST_EQ(sizeof(little_int56_buf_t), 7u);
59 BOOST_TEST_EQ(sizeof(little_int64_buf_t), 8u);
60
61 BOOST_TEST_EQ(sizeof(little_uint8_buf_t), 1u);
62 BOOST_TEST_EQ(sizeof(little_uint16_buf_t), 2u);
63 BOOST_TEST_EQ(sizeof(little_uint24_buf_t), 3u);
64 BOOST_TEST_EQ(sizeof(little_uint32_buf_t), 4u);
65 BOOST_TEST_EQ(sizeof(little_uint40_buf_t), 5u);
66 BOOST_TEST_EQ(sizeof(little_uint48_buf_t), 6u);
67 BOOST_TEST_EQ(sizeof(little_uint56_buf_t), 7u);
68 BOOST_TEST_EQ(sizeof(little_uint64_buf_t), 8u);
69
70 BOOST_TEST_EQ(sizeof(native_int8_buf_t), 1u);
71 BOOST_TEST_EQ(sizeof(native_int16_buf_t), 2u);
72 BOOST_TEST_EQ(sizeof(native_int24_buf_t), 3u);
73 BOOST_TEST_EQ(sizeof(native_int32_buf_t), 4u);
74 BOOST_TEST_EQ(sizeof(native_int40_buf_t), 5u);
75 BOOST_TEST_EQ(sizeof(native_int48_buf_t), 6u);
76 BOOST_TEST_EQ(sizeof(native_int56_buf_t), 7u);
77 BOOST_TEST_EQ(sizeof(native_int64_buf_t), 8u);
78
79 BOOST_TEST_EQ(sizeof(native_uint8_buf_t), 1u);
80 BOOST_TEST_EQ(sizeof(native_uint16_buf_t), 2u);
81 BOOST_TEST_EQ(sizeof(native_uint24_buf_t), 3u);
82 BOOST_TEST_EQ(sizeof(native_uint32_buf_t), 4u);
83 BOOST_TEST_EQ(sizeof(native_uint40_buf_t), 5u);
84 BOOST_TEST_EQ(sizeof(native_uint48_buf_t), 6u);
85 BOOST_TEST_EQ(sizeof(native_uint56_buf_t), 7u);
86 BOOST_TEST_EQ(sizeof(native_uint64_buf_t), 8u);
87
88 BOOST_TEST_EQ(sizeof(big_int8_buf_at), 1u);
89 BOOST_TEST_EQ(sizeof(big_int16_buf_at), 2u);
90 BOOST_TEST_EQ(sizeof(big_int32_buf_at), 4u);
91 BOOST_TEST_EQ(sizeof(big_int64_buf_at), 8u);
92
93 BOOST_TEST_EQ(sizeof(big_uint8_buf_at), 1u);
94 BOOST_TEST_EQ(sizeof(big_uint16_buf_at), 2u);
95 BOOST_TEST_EQ(sizeof(big_uint32_buf_at), 4u);
96 BOOST_TEST_EQ(sizeof(big_uint64_buf_at), 8u);
97
98 BOOST_TEST_EQ(sizeof(little_int8_buf_at), 1u);
99 BOOST_TEST_EQ(sizeof(little_int16_buf_at), 2u);
100 BOOST_TEST_EQ(sizeof(little_int32_buf_at), 4u);
101 BOOST_TEST_EQ(sizeof(little_int64_buf_at), 8u);
102
103 BOOST_TEST_EQ(sizeof(little_uint8_buf_at), 1u);
104 BOOST_TEST_EQ(sizeof(little_uint16_buf_at), 2u);
105 BOOST_TEST_EQ(sizeof(little_uint32_buf_at), 4u);
106 BOOST_TEST_EQ(sizeof(little_uint64_buf_at), 8u);
107 } // check_size
108
109 // test_inserter_and_extractor -----------------------------------------------------//
110
111 void test_inserter_and_extractor()
112 {
113 std::cout << "test inserter and extractor..." << std::endl;
114
115 big_uint64_buf_t bu64(0x010203040506070ULL);
116 little_uint64_buf_t lu64(0x010203040506070ULL);
117
118 boost::uint64_t x;
119
120 std::stringstream ss;
121
122 ss << bu64;
123 ss >> x;
124 BOOST_TEST_EQ(x, 0x010203040506070ULL);
125
126 ss.clear();
127 ss << lu64;
128 ss >> x;
129 BOOST_TEST_EQ(x, 0x010203040506070ULL);
130
131 ss.clear();
132 ss << 0x010203040506070ULL;
133 big_uint64_buf_t bu64z(0);
134 ss >> bu64z;
135 BOOST_TEST_EQ(bu64z.value(), bu64.value());
136
137 ss.clear();
138 ss << 0x010203040506070ULL;
139 little_uint64_buf_t lu64z(0);
140 ss >> lu64z;
141 BOOST_TEST_EQ(lu64z.value(), lu64.value());
142
143 std::cout << "test inserter and extractor complete" << std::endl;
144
145 }
146
147 } // unnamed namespace
148
149 //--------------------------------------------------------------------------------------//
150
151 int cpp_main(int, char *[])
152 {
153 cout << "byte swap intrinsics: " BOOST_ENDIAN_INTRINSIC_MSG << endl;
154
155 cout << " construct big endian aligned" << endl;
156 big_int32_buf_at x(1122334455);
157
158 cout << " assign to buffer from built-in integer" << endl;
159 x = 1234567890;
160
161 cout << " operator==(buffer.value(), built-in)" << endl;
162 bool b1(x.value() == 1234567890);
163 BOOST_TEST(b1);
164
165 cout << " construct little endian unaligned" << endl;
166 little_int32_buf_t x2(1122334455);
167
168 cout << " assign to buffer from built-in integer" << endl;
169 x2 = 1234567890;
170
171 cout << " operator==(buffer.value(), built-in)" << endl;
172 bool b2(x2.value() == 1234567890);
173 BOOST_TEST(b2);
174
175 check_size();
176 test_inserter_and_extractor();
177
178 cout << " done" << endl;
179
180 return ::boost::report_errors();
181 }
182
183 #include <boost/endian/detail/disable_warnings_pop.hpp>