32 #define TEST_NAME "util/endian"
41 for (
size_t i = 0; i < 256; ++i) {
42 BOOST_CHECK_EQUAL(ReverseBytes<int8_t>(i),
static_cast<int8_t
>(i));
43 BOOST_CHECK_EQUAL(ReverseBytes<uint8_t>(i),
static_cast<uint8_t
>(i));
46 BOOST_CHECK_EQUAL(ReverseBytes<int16_t>(0), 0);
47 BOOST_CHECK_EQUAL(ReverseBytes<int16_t>(1), 256);
48 BOOST_CHECK_EQUAL(ReverseBytes<int16_t>(2), 512);
49 BOOST_CHECK_EQUAL(ReverseBytes<int16_t>(3), 768);
50 BOOST_CHECK_EQUAL(ReverseBytes<int16_t>(256), 1);
51 BOOST_CHECK_EQUAL(ReverseBytes<int16_t>(512), 2);
52 BOOST_CHECK_EQUAL(ReverseBytes<int16_t>(768), 3);
54 BOOST_CHECK_EQUAL(ReverseBytes<uint16_t>(0), 0);
55 BOOST_CHECK_EQUAL(ReverseBytes<uint16_t>(1), 256);
56 BOOST_CHECK_EQUAL(ReverseBytes<uint16_t>(2), 512);
57 BOOST_CHECK_EQUAL(ReverseBytes<uint16_t>(3), 768);
58 BOOST_CHECK_EQUAL(ReverseBytes<uint16_t>(256), 1);
59 BOOST_CHECK_EQUAL(ReverseBytes<uint16_t>(512), 2);
60 BOOST_CHECK_EQUAL(ReverseBytes<uint16_t>(768), 3);
62 BOOST_CHECK_EQUAL(ReverseBytes<int32_t>(0), 0);
63 BOOST_CHECK_EQUAL(ReverseBytes<int32_t>(1), 16777216);
64 BOOST_CHECK_EQUAL(ReverseBytes<int32_t>(2), 33554432);
65 BOOST_CHECK_EQUAL(ReverseBytes<int32_t>(3), 50331648);
66 BOOST_CHECK_EQUAL(ReverseBytes<int32_t>(16777216), 1);
67 BOOST_CHECK_EQUAL(ReverseBytes<int32_t>(33554432), 2);
68 BOOST_CHECK_EQUAL(ReverseBytes<int32_t>(50331648), 3);
70 BOOST_CHECK_EQUAL(ReverseBytes<uint32_t>(0), 0);
71 BOOST_CHECK_EQUAL(ReverseBytes<uint32_t>(1), 16777216);
72 BOOST_CHECK_EQUAL(ReverseBytes<uint32_t>(2), 33554432);
73 BOOST_CHECK_EQUAL(ReverseBytes<uint32_t>(3), 50331648);
74 BOOST_CHECK_EQUAL(ReverseBytes<uint32_t>(16777216), 1);
75 BOOST_CHECK_EQUAL(ReverseBytes<uint32_t>(33554432), 2);
76 BOOST_CHECK_EQUAL(ReverseBytes<uint32_t>(50331648), 3);
78 BOOST_CHECK_EQUAL(ReverseBytes<int64_t>(0), 0);
79 BOOST_CHECK_EQUAL(ReverseBytes<int64_t>(1), 72057594037927936);
80 BOOST_CHECK_EQUAL(ReverseBytes<int64_t>(2), 144115188075855872);
81 BOOST_CHECK_EQUAL(ReverseBytes<int64_t>(3), 216172782113783808);
82 BOOST_CHECK_EQUAL(ReverseBytes<int64_t>(72057594037927936), 1);
83 BOOST_CHECK_EQUAL(ReverseBytes<int64_t>(144115188075855872), 2);
84 BOOST_CHECK_EQUAL(ReverseBytes<int64_t>(216172782113783808), 3);
86 BOOST_CHECK_EQUAL(ReverseBytes<uint64_t>(0), 0);
87 BOOST_CHECK_EQUAL(ReverseBytes<uint64_t>(1), 72057594037927936);
88 BOOST_CHECK_EQUAL(ReverseBytes<uint64_t>(2), 144115188075855872);
89 BOOST_CHECK_EQUAL(ReverseBytes<uint64_t>(3), 216172782113783808);
90 BOOST_CHECK_EQUAL(ReverseBytes<uint64_t>(72057594037927936), 1);
91 BOOST_CHECK_EQUAL(ReverseBytes<uint64_t>(144115188075855872), 2);
92 BOOST_CHECK_EQUAL(ReverseBytes<uint64_t>(216172782113783808), 3);
101 const T
x = RandomInteger<T>(std::numeric_limits<T>::lowest(),
102 std::numeric_limits<T>::max());
103 BOOST_CHECK_EQUAL(LittleEndianToNative<T>(NativeToLittleEndian<T>(
x)),
x);
104 BOOST_CHECK_EQUAL(BigEndianToNative<T>(NativeToBigEndian<T>(
x)),
x);
107 template <
typename T>
109 const T
x = RandomReal<T>(std::numeric_limits<T>::lowest(),
110 std::numeric_limits<T>::max());
111 BOOST_CHECK_EQUAL(LittleEndianToNative<T>(NativeToLittleEndian<T>(
x)),
x);
112 BOOST_CHECK_EQUAL(BigEndianToNative<T>(NativeToBigEndian<T>(
x)),
x);
113 BOOST_CHECK_EQUAL(NativeToLittleEndian<T>(LittleEndianToNative<T>(
x)),
x);
114 BOOST_CHECK_EQUAL(NativeToBigEndian<T>(BigEndianToNative<T>(
x)),
x);
119 TestIntNativeToLitteBigEndian<int8_t>();
121 TestIntNativeToLitteBigEndian<int16_t>();
122 TestIntNativeToLitteBigEndian<int32_t>();
123 TestIntNativeToLitteBigEndian<int64_t>();
125 TestIntNativeToLitteBigEndian<uint8_t>();
127 TestIntNativeToLitteBigEndian<uint16_t>();
128 TestIntNativeToLitteBigEndian<uint32_t>();
129 TestIntNativeToLitteBigEndian<uint64_t>();
130 TestRealNativeToLitteBigEndian<float>();
131 TestRealNativeToLitteBigEndian<double>();
134 template <
typename T>
136 std::stringstream file;
137 const T orig_value = RandomInteger<T>(std::numeric_limits<T>::lowest(),
138 std::numeric_limits<T>::max());
139 WriteBinaryLittleEndian<T>(&file, orig_value);
140 const T read_value = ReadBinaryLittleEndian<T>(&file);
141 BOOST_CHECK_EQUAL(orig_value, read_value);
143 std::stringstream file_vector;
144 std::vector<T> orig_vector(100);
145 std::generate(orig_vector.begin(), orig_vector.end(), []() {
146 return RandomInteger<T>(std::numeric_limits<T>::lowest(),
147 std::numeric_limits<T>::max());
149 WriteBinaryLittleEndian<T>(&file_vector, orig_vector);
150 std::vector<T> read_vector(orig_vector.size());
151 ReadBinaryLittleEndian<T>(&file_vector, &read_vector);
152 for (
size_t i = 0; i < orig_vector.size(); ++i) {
153 BOOST_CHECK_EQUAL(orig_vector[i], read_vector[i]);
157 template <
typename T>
159 std::stringstream file;
160 const T orig_value = RandomReal<T>(std::numeric_limits<T>::lowest(),
161 std::numeric_limits<T>::max());
162 WriteBinaryLittleEndian<T>(&file, orig_value);
163 const T read_value = ReadBinaryLittleEndian<T>(&file);
164 BOOST_CHECK_EQUAL(orig_value, read_value);
166 std::stringstream file_vector;
167 std::vector<T> orig_vector(100);
168 std::generate(orig_vector.begin(), orig_vector.end(), []() {
169 return RandomReal<T>(std::numeric_limits<T>::lowest(),
170 std::numeric_limits<T>::max());
172 WriteBinaryLittleEndian<T>(&file_vector, orig_vector);
173 std::vector<T> read_vector(orig_vector.size());
174 ReadBinaryLittleEndian<T>(&file_vector, &read_vector);
175 for (
size_t i = 0; i < orig_vector.size(); ++i) {
176 BOOST_CHECK_EQUAL(orig_vector[i], read_vector[i]);
182 TestIntReadWriteBinaryLittleEndian<int8_t>();
184 TestIntReadWriteBinaryLittleEndian<int16_t>();
185 TestIntReadWriteBinaryLittleEndian<int32_t>();
186 TestIntReadWriteBinaryLittleEndian<int64_t>();
188 TestIntReadWriteBinaryLittleEndian<uint8_t>();
190 TestIntReadWriteBinaryLittleEndian<uint16_t>();
191 TestIntReadWriteBinaryLittleEndian<uint32_t>();
192 TestIntReadWriteBinaryLittleEndian<uint64_t>();
193 TestFloatReadWriteBinaryLittleEndian<float>();
194 TestFloatReadWriteBinaryLittleEndian<double>();
void TestIntReadWriteBinaryLittleEndian()
void TestFloatReadWriteBinaryLittleEndian()
void TestRealNativeToLitteBigEndian()
void TestIntNativeToLitteBigEndian()
BOOST_AUTO_TEST_CASE(TestReverseBytes)