1 | // Copyright 2020 Peter Dimov |
---|---|
2 | // Distributed under the Boost Software License, Version 1.0. |
3 | // https://www.boost.org/LICENSE_1_0.txt |
4 | |
5 | #include <boost/endian/conversion.hpp> |
6 | #include <boost/core/lightweight_test.hpp> |
7 | #include <boost/config.hpp> |
8 | #include <cstddef> |
9 | |
10 | template<class T> void test_reverse( T x ) |
11 | { |
12 | using boost::endian::endian_reverse; |
13 | |
14 | T x2( x ); |
15 | |
16 | x2 = endian_reverse( endian_reverse( x2 ) ); |
17 | BOOST_TEST( x == x2 ); |
18 | |
19 | x2 = boost::endian::native_to_little( boost::endian::little_to_native( x2 ) ); |
20 | BOOST_TEST( x == x2 ); |
21 | |
22 | x2 = boost::endian::native_to_big( boost::endian::big_to_native( x2 ) ); |
23 | BOOST_TEST( x == x2 ); |
24 | } |
25 | |
26 | template<class T> void test_reverse_inplace( T x ) |
27 | { |
28 | using boost::endian::endian_reverse_inplace; |
29 | |
30 | T x2( x ); |
31 | |
32 | endian_reverse_inplace( x2 ); |
33 | endian_reverse_inplace( x2 ); |
34 | BOOST_TEST( x == x2 ); |
35 | |
36 | boost::endian::native_to_little_inplace( x2 ); |
37 | boost::endian::little_to_native_inplace( x2 ); |
38 | BOOST_TEST( x == x2 ); |
39 | |
40 | boost::endian::native_to_big_inplace( x2 ); |
41 | boost::endian::big_to_native_inplace( x2 ); |
42 | BOOST_TEST( x == x2 ); |
43 | } |
44 | |
45 | enum E1 { e1 }; |
46 | |
47 | #if !defined(BOOST_NO_CXX11_SCOPED_ENUMS) |
48 | |
49 | enum E2: long { e2 }; |
50 | enum class E3 { e3 }; |
51 | enum class E4: long { e4 }; |
52 | |
53 | #endif |
54 | |
55 | int main() |
56 | { |
57 | test_reverse( x: 1 ); |
58 | |
59 | #if !defined(BOOST_NO_CXX11_SCOPED_ENUMS) |
60 | |
61 | test_reverse( x: E3::e3 ); |
62 | test_reverse( x: E4::e4 ); |
63 | |
64 | #endif |
65 | |
66 | test_reverse_inplace( x: 1 ); |
67 | test_reverse_inplace( x: true ); |
68 | |
69 | test_reverse_inplace( x: 1.0f ); |
70 | test_reverse_inplace( x: 1.0 ); |
71 | |
72 | test_reverse_inplace( x: e1 ); |
73 | |
74 | #if !defined(BOOST_NO_CXX11_SCOPED_ENUMS) |
75 | |
76 | test_reverse_inplace( x: e2 ); |
77 | test_reverse_inplace( x: E3::e3 ); |
78 | test_reverse_inplace( x: E4::e4 ); |
79 | |
80 | #endif |
81 | |
82 | return boost::report_errors(); |
83 | } |
84 |