1 // Copyright 2019 Peter Dimov
3 // Distributed under the Boost Software License, Version 1.0.
4 // http://www.boost.org/LICENSE_1_0.txt
6 #include <boost/endian/arithmetic.hpp>
7 #include <boost/endian/buffers.hpp>
8 #include <boost/core/lightweight_test.hpp>
9 #include <boost/config.hpp>
10 #include <boost/cstdint.hpp>
13 template<class U> void test()
18 unsigned char * p1 = u.data();
21 BOOST_TEST_EQ( p1, p2 );
27 unsigned char const * p1 = u.data();
30 BOOST_TEST_EQ( p1, p2 );
34 template<class T, std::size_t Bits> void test_unaligned()
36 using namespace boost::endian;
38 test< endian_buffer<order::big, T, Bits, align::no> >();
39 test< endian_buffer<order::little, T, Bits, align::no> >();
40 test< endian_buffer<order::native, T, Bits, align::no> >();
42 test< endian_arithmetic<order::big, T, Bits, align::no> >();
43 test< endian_arithmetic<order::little, T, Bits, align::no> >();
44 test< endian_arithmetic<order::native, T, Bits, align::no> >();
47 template<class T, std::size_t Bits> void test_aligned()
49 using namespace boost::endian;
51 test< endian_buffer<order::big, T, Bits, align::yes> >();
52 test< endian_buffer<order::little, T, Bits, align::yes> >();
54 test< endian_arithmetic<order::big, T, Bits, align::yes> >();
55 test< endian_arithmetic<order::little, T, Bits, align::yes> >();
60 test_unaligned<boost::int_least8_t, 8>();
61 test_unaligned<boost::int_least16_t, 16>();
62 test_unaligned<boost::int_least32_t, 24>();
63 test_unaligned<boost::int_least32_t, 32>();
64 test_unaligned<boost::int_least64_t, 40>();
65 test_unaligned<boost::int_least64_t, 48>();
66 test_unaligned<boost::int_least64_t, 56>();
67 test_unaligned<boost::int_least64_t, 64>();
69 test_unaligned<boost::uint_least8_t, 8>();
70 test_unaligned<boost::uint_least16_t, 16>();
71 test_unaligned<boost::uint_least32_t, 24>();
72 test_unaligned<boost::uint_least32_t, 32>();
73 test_unaligned<boost::uint_least64_t, 40>();
74 test_unaligned<boost::uint_least64_t, 48>();
75 test_unaligned<boost::uint_least64_t, 56>();
76 test_unaligned<boost::uint_least64_t, 64>();
78 test_unaligned<float, 32>();
79 test_unaligned<double, 64>();
81 test_aligned<boost::int8_t, 8>();
82 test_aligned<boost::int16_t, 16>();
83 test_aligned<boost::int32_t, 32>();
84 test_aligned<boost::int64_t, 64>();
86 test_aligned<boost::uint8_t, 8>();
87 test_aligned<boost::uint16_t, 16>();
88 test_aligned<boost::uint32_t, 32>();
89 test_aligned<boost::uint64_t, 64>();
91 test_aligned<float, 32>();
92 test_aligned<double, 64>();
94 return boost::report_errors();