8 #include "gtest/gtest.h"
12 template <visionary::endian par>
17 BE() :
bytes{0x01u, 0x02u, 0x03u, 0x04u, 0x05u, 0x06u, 0x07u, 0x08u}
34 LE() :
bytes{0x08u, 0x07u, 0x06u, 0x05u, 0x04u, 0x03u, 0x02u, 0x01u}
49 TEST(VisionaryEndian, convertFrom_little)
54 EXPECT_EQ(EndianDut::convertFrom<std::uint8_t>(
le.
bytes), 0x08u);
55 EXPECT_EQ(EndianDut::convertFrom<std::int16_t>(
le.
bytes), 0x0708);
56 EXPECT_EQ(EndianDut::convertFrom<std::uint32_t>(
le.
bytes), 0x05060708u);
57 EXPECT_EQ(EndianDut::convertFrom<std::int64_t>(
le.
bytes), 0x0102030405060708ll);
60 TEST(VisionaryEndian, convertFrom_big)
65 EXPECT_EQ(EndianDut::convertFrom<std::uint8_t>(
be.
bytes), 0x01u);
66 EXPECT_EQ(EndianDut::convertFrom<std::int16_t>(
be.
bytes), 0x0102);
67 EXPECT_EQ(EndianDut::convertFrom<std::uint32_t>(
be.
bytes), 0x01020304u);
68 EXPECT_EQ(EndianDut::convertFrom<std::int64_t>(
be.
bytes), 0x0102030405060708ll);
71 TEST(VisionaryEndian, readUnalignedLittleEndian_is_same_as_convertFrom_little)
77 EXPECT_EQ(EndianDut::convertFrom<std::uint8_t>(
le.
bytes), readUnalignLittleEndian<std::uint8_t>(
le.
bytes));
78 EXPECT_EQ(EndianDut::convertFrom<std::int16_t>(
le.
bytes), readUnalignLittleEndian<std::int16_t>(
le.
bytes));
79 EXPECT_EQ(EndianDut::convertFrom<std::uint32_t>(
le.
bytes), readUnalignLittleEndian<std::uint32_t>(
le.
bytes));
80 EXPECT_EQ(EndianDut::convertFrom<std::int64_t>(
le.
bytes), readUnalignLittleEndian<std::int64_t>(
le.
bytes));
83 TEST(VisionaryEndian, readUnalignedBigEndian_is_same_as_convertFrom_big)
89 EXPECT_EQ(EndianDut::convertFrom<std::uint8_t>(
be.
bytes), readUnalignBigEndian<std::uint8_t>(
be.
bytes));
90 EXPECT_EQ(EndianDut::convertFrom<std::int16_t>(
be.
bytes), readUnalignBigEndian<std::int16_t>(
be.
bytes));
91 EXPECT_EQ(EndianDut::convertFrom<std::uint32_t>(
be.
bytes), readUnalignBigEndian<std::uint32_t>(
be.
bytes));
92 EXPECT_EQ(EndianDut::convertFrom<std::int64_t>(
be.
bytes), readUnalignBigEndian<std::int64_t>(
be.
bytes));
95 TEST(VisionaryEndian, writeUnalignedLittleEndian_is_same_as_convertTo_little)
107 EndianDut::convertTo<char>(buf.cf,
sizeof(buf),
'A');
108 writeUnalignLittleEndian<char>(buf.ru,
sizeof(buf),
'A');
109 EXPECT_EQ(0, std::memcmp(buf.cf, buf.ru, 1u));
111 EndianDut::convertTo<std::uint16_t>(buf.cf,
sizeof(buf), 0xbeefu);
112 writeUnalignLittleEndian<std::uint16_t>(buf.ru,
sizeof(buf), 0xbeefu);
113 EXPECT_EQ(0, std::memcmp(buf.cf, buf.ru, 2u));
115 EndianDut::convertTo<std::int32_t>(buf.cf,
sizeof(buf), -123456789);
116 writeUnalignLittleEndian<std::int32_t>(buf.ru,
sizeof(buf), -123456789);
117 EXPECT_EQ(0, std::memcmp(buf.cf, buf.ru, 4u));
119 EndianDut::convertTo<std::uint64_t>(buf.cf,
sizeof(buf), 0xfeedbe117ee14e11ull);
120 writeUnalignLittleEndian<std::uint64_t>(buf.ru,
sizeof(buf), 0xfeedbe117ee14e11ull);
121 EXPECT_EQ(0, std::memcmp(buf.cf, buf.ru, 8u));
124 TEST(VisionaryEndian, writeUnalignedBigEndian_is_same_as_convertTo_big)
136 EndianDut::convertTo<char>(buf.cf,
sizeof(buf),
'b');
137 writeUnalignBigEndian<char>(buf.ru,
sizeof(buf),
'b');
138 EXPECT_EQ(0, std::memcmp(buf.cf, buf.ru, 1u));
140 EndianDut::convertTo<std::uint16_t>(buf.cf,
sizeof(buf), 0xbeefu);
141 writeUnalignBigEndian<std::uint16_t>(buf.ru,
sizeof(buf), 0xbeefu);
142 EXPECT_EQ(0, std::memcmp(buf.cf, buf.ru, 2u));
144 EndianDut::convertTo<std::int32_t>(buf.cf,
sizeof(buf), -123456789);
145 writeUnalignBigEndian<std::int32_t>(buf.ru,
sizeof(buf), -123456789);
146 EXPECT_EQ(0, std::memcmp(buf.cf, buf.ru, 4u));
148 EndianDut::convertTo<std::uint64_t>(buf.cf,
sizeof(buf), 0xfeedbe117ee14e11ull);
149 writeUnalignBigEndian<std::uint64_t>(buf.ru,
sizeof(buf), 0xfeedbe117ee14e11ull);
150 EXPECT_EQ(0, std::memcmp(buf.cf, buf.ru, 8u));
153 TEST(VisionaryEndian, nativeToLittleEndian_is_same_as_convert_native_little)
159 EXPECT_EQ(nativeToLittleEndian<std::int8_t>(0x7f), EndianDut::convert<std::int8_t>(0x7f));
160 EXPECT_EQ(nativeToLittleEndian<std::uint16_t>(0xaffeu), EndianDut::convert<std::uint16_t>(0xaffeu));
161 EXPECT_EQ(nativeToLittleEndian<std::uint32_t>(123456789), EndianDut::convert<std::uint32_t>(123456789));
162 EXPECT_FLOAT_EQ(nativeToLittleEndian<float>(3.14159265e-27
f), EndianDut::convert<float>(3.14159265e-27
f));
163 EXPECT_EQ(nativeToLittleEndian<std::int64_t>(-12345678917636455ll),
164 EndianDut::convert<std::int64_t>(-12345678917636455ll));
165 EXPECT_DOUBLE_EQ(nativeToLittleEndian<double>(3.14159265e-127), EndianDut::convert<double>(3.14159265e-127));
168 TEST(VisionaryEndian, nativeToBigEndian_is_same_as_convert_native_big)
174 EXPECT_EQ(nativeToBigEndian<std::int8_t>(0x7f), EndianDut::convert<std::int8_t>(0x7f));
175 EXPECT_EQ(nativeToBigEndian<std::uint16_t>(0xaffeu), EndianDut::convert<std::uint16_t>(0xaffeu));
176 EXPECT_EQ(nativeToBigEndian<std::uint32_t>(123456789), EndianDut::convert<std::uint32_t>(123456789));
177 EXPECT_FLOAT_EQ(nativeToBigEndian<float>(3.14159265e-27
f), EndianDut::convert<float>(3.14159265e-27
f));
178 EXPECT_EQ(nativeToBigEndian<std::int64_t>(-12345678917636455ll),
179 EndianDut::convert<std::int64_t>(-12345678917636455ll));
180 EXPECT_DOUBLE_EQ(nativeToBigEndian<double>(3.14159265e-127), EndianDut::convert<double>(3.14159265e-127));
183 TEST(VisionaryEndian, littleEndianToNative_is_same_as_convert_little_native)
189 EXPECT_EQ(littleEndianToNative<std::int8_t>(0x7f), EndianDut::convert<std::int8_t>(0x7f));
190 EXPECT_EQ(littleEndianToNative<std::uint16_t>(0xaffeu), EndianDut::convert<std::uint16_t>(0xaffeu));
191 EXPECT_EQ(littleEndianToNative<std::uint32_t>(123456789), EndianDut::convert<std::uint32_t>(123456789));
192 EXPECT_FLOAT_EQ(littleEndianToNative<float>(3.14159265e-27
f), EndianDut::convert<float>(3.14159265e-27
f));
193 EXPECT_EQ(littleEndianToNative<std::int64_t>(-12345678917636455ll),
194 EndianDut::convert<std::int64_t>(-12345678917636455ll));
195 EXPECT_DOUBLE_EQ(littleEndianToNative<double>(3.14159265e-127), EndianDut::convert<double>(3.14159265e-127));
198 TEST(VisionaryEndian, bigEndianToNative_is_same_as_convert_big_native)
204 EXPECT_EQ(bigEndianToNative<std::int8_t>(0x7f), EndianDut::convert<std::int8_t>(0x7f));
205 EXPECT_EQ(bigEndianToNative<std::uint16_t>(0xaffeu), EndianDut::convert<std::uint16_t>(0xaffeu));
206 EXPECT_EQ(bigEndianToNative<std::uint32_t>(123456789), EndianDut::convert<std::uint32_t>(123456789));
207 EXPECT_FLOAT_EQ(bigEndianToNative<float>(3.14159265e-27
f), EndianDut::convert<float>(3.14159265e-27
f));
208 EXPECT_EQ(bigEndianToNative<std::int64_t>(-12345678917636455ll),
209 EndianDut::convert<std::int64_t>(-12345678917636455ll));
210 EXPECT_DOUBLE_EQ(bigEndianToNative<double>(3.14159265e-127), EndianDut::convert<double>(3.14159265e-127));
214 using Implementations1 = ::testing::Types<visionary::Endian<visionary::endian::little, visionary::endian::native>,
219 template <
typename T>
232 using Forward =
typename TestFixture::DUT;
235 EXPECT_EQ(Inverse::template
convert(Forward::template convert<signed char>(-
'A')), -
'A');
236 EXPECT_EQ(Inverse::template
convert(Forward::template convert<std::int16_t>(-12345)), -12345);
237 EXPECT_EQ(Inverse::template
convert(Forward::template convert<std::uint16_t>(55453u)), 55453u);
238 EXPECT_EQ(Inverse::template
convert(Forward::template convert<std::int32_t>(-98765453)), -98765453);
239 EXPECT_FLOAT_EQ(Inverse::template
convert(Forward::template convert<float>(-2.7182818e32f)), -2.7182818e32f);
240 EXPECT_EQ(Inverse::template
convert(Forward::template convert<std::uint64_t>(9876545367236465ull)),
241 9876545367236465ull);
242 EXPECT_DOUBLE_EQ(Inverse::template
convert(Forward::template convert<double>(-2.7182818e132)), -2.7182818e132);
245 using Implementations2 = ::testing::Types<visionary::Endian<visionary::endian::little, visionary::endian::little>,
249 template <
typename T>
262 using Forward =
typename TestFixture::DUT;
264 EXPECT_EQ(Forward::template convert<unsigned char>(
'A'),
'A');
265 EXPECT_EQ(Forward::template convert<std::int16_t>(-12345), -12345);
266 EXPECT_EQ(Forward::template convert<std::uint16_t>(55453u), 55453u);
267 EXPECT_EQ(Forward::template convert<std::int32_t>(-98765453), -98765453);
268 EXPECT_EQ(Forward::template convert<float>(-2.7182818e32f), -2.7182818e32f);
269 EXPECT_EQ(Forward::template convert<std::uint64_t>(9876545367236465ull), 9876545367236465ull);
270 EXPECT_EQ(Forward::template convert<double>(-2.7182818e132), -2.7182818e132);
277 using Forward =
typename TestFixture::DUT;
285 Forward::template convertTo<unsigned char>(buf.cf,
sizeof(buf.cf),
'A');
286 writeUnaligned<unsigned char>(buf.ru,
sizeof(buf.ru),
'A');
287 EXPECT_EQ(0, std::memcmp(buf.cf, buf.ru, 1u));
289 Forward::template convertTo<std::int16_t>(buf.cf,
sizeof(buf.cf), -12345);
290 writeUnaligned<std::int16_t>(buf.ru,
sizeof(buf.ru), -12345);
291 EXPECT_EQ(0, std::memcmp(buf.cf, buf.ru, 2u));
293 Forward::template convertTo<float>(buf.cf,
sizeof(buf.cf), -2.7182818e32f);
294 writeUnaligned<float>(buf.ru,
sizeof(buf.ru), -2.7182818e32f);
295 EXPECT_EQ(0, std::memcmp(buf.cf, buf.ru, 4u));
297 Forward::template convertTo<std::uint64_t>(buf.cf,
sizeof(buf.cf), 9876545367236465ull);
298 writeUnaligned<std::uint64_t>(buf.ru,
sizeof(buf.ru), 9876545367236465ull);
299 EXPECT_EQ(0, std::memcmp(buf.cf, buf.ru, 4u));