1 //  deprecated_test.cpp  ---------------------------------------------------------------//
2 
3 //  Copyright Beman Dawes 2014, 2015
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_DEPRECATED_NAMES
15 #include <boost/endian/endian.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 
check_size()31   void check_size()
32   {
33     BOOST_TEST_EQ(sizeof(big8_t), 1);
34     BOOST_TEST_EQ(sizeof(big16_t), 2);
35     BOOST_TEST_EQ(sizeof(big24_t), 3);
36     BOOST_TEST_EQ(sizeof(big32_t), 4);
37     BOOST_TEST_EQ(sizeof(big40_t), 5);
38     BOOST_TEST_EQ(sizeof(big48_t), 6);
39     BOOST_TEST_EQ(sizeof(big56_t), 7);
40     BOOST_TEST_EQ(sizeof(big64_t), 8);
41 
42     BOOST_TEST_EQ(sizeof(ubig8_t), 1);
43     BOOST_TEST_EQ(sizeof(ubig16_t), 2);
44     BOOST_TEST_EQ(sizeof(ubig24_t), 3);
45     BOOST_TEST_EQ(sizeof(ubig32_t), 4);
46     BOOST_TEST_EQ(sizeof(ubig40_t), 5);
47     BOOST_TEST_EQ(sizeof(ubig48_t), 6);
48     BOOST_TEST_EQ(sizeof(ubig56_t), 7);
49     BOOST_TEST_EQ(sizeof(ubig64_t), 8);
50 
51     BOOST_TEST_EQ(sizeof(little8_t), 1);
52     BOOST_TEST_EQ(sizeof(little16_t), 2);
53     BOOST_TEST_EQ(sizeof(little24_t), 3);
54     BOOST_TEST_EQ(sizeof(little32_t), 4);
55     BOOST_TEST_EQ(sizeof(little40_t), 5);
56     BOOST_TEST_EQ(sizeof(little48_t), 6);
57     BOOST_TEST_EQ(sizeof(little56_t), 7);
58     BOOST_TEST_EQ(sizeof(little64_t), 8);
59 
60     BOOST_TEST_EQ(sizeof(ulittle8_t), 1);
61     BOOST_TEST_EQ(sizeof(ulittle16_t), 2);
62     BOOST_TEST_EQ(sizeof(ulittle24_t), 3);
63     BOOST_TEST_EQ(sizeof(ulittle32_t), 4);
64     BOOST_TEST_EQ(sizeof(ulittle40_t), 5);
65     BOOST_TEST_EQ(sizeof(ulittle48_t), 6);
66     BOOST_TEST_EQ(sizeof(ulittle56_t), 7);
67     BOOST_TEST_EQ(sizeof(ulittle64_t), 8);
68 
69     BOOST_TEST_EQ(sizeof(native8_t), 1);
70     BOOST_TEST_EQ(sizeof(native16_t), 2);
71     BOOST_TEST_EQ(sizeof(native24_t), 3);
72     BOOST_TEST_EQ(sizeof(native32_t), 4);
73     BOOST_TEST_EQ(sizeof(native40_t), 5);
74     BOOST_TEST_EQ(sizeof(native48_t), 6);
75     BOOST_TEST_EQ(sizeof(native56_t), 7);
76     BOOST_TEST_EQ(sizeof(native64_t), 8);
77 
78     BOOST_TEST_EQ(sizeof(unative8_t), 1);
79     BOOST_TEST_EQ(sizeof(unative16_t), 2);
80     BOOST_TEST_EQ(sizeof(unative24_t), 3);
81     BOOST_TEST_EQ(sizeof(unative32_t), 4);
82     BOOST_TEST_EQ(sizeof(unative40_t), 5);
83     BOOST_TEST_EQ(sizeof(unative48_t), 6);
84     BOOST_TEST_EQ(sizeof(unative56_t), 7);
85     BOOST_TEST_EQ(sizeof(unative64_t), 8);
86 
87     BOOST_TEST_EQ(sizeof(aligned_big16_t), 2);
88     BOOST_TEST_EQ(sizeof(aligned_big32_t), 4);
89     BOOST_TEST_EQ(sizeof(aligned_big64_t), 8);
90 
91     BOOST_TEST_EQ(sizeof(aligned_ubig16_t), 2);
92     BOOST_TEST_EQ(sizeof(aligned_ubig32_t), 4);
93     BOOST_TEST_EQ(sizeof(aligned_ubig64_t), 8);
94 
95     BOOST_TEST_EQ(sizeof(aligned_little16_t), 2);
96     BOOST_TEST_EQ(sizeof(aligned_little32_t), 4);
97     BOOST_TEST_EQ(sizeof(aligned_little64_t), 8);
98 
99     BOOST_TEST_EQ(sizeof(aligned_ulittle16_t), 2);
100     BOOST_TEST_EQ(sizeof(aligned_ulittle32_t), 4);
101     BOOST_TEST_EQ(sizeof(aligned_ulittle64_t), 8);
102 
103 # ifndef BOOST_NO_CXX11_TEMPLATE_ALIASES
104     BOOST_TEST_EQ(sizeof(endian<endianness::big, int_least16_t, 16>), 2);
105     BOOST_TEST_EQ(sizeof(endian<endianness::big,
106       int_least16_t, 16, alignment::unaligned>), 2);
107 # endif
108   } // check_size
109 
110   //  test_inserter_and_extractor  -----------------------------------------------------//
111 
test_inserter_and_extractor()112   void test_inserter_and_extractor()
113   {
114     std::cout << "test inserter and extractor..." << std::endl;
115 
116     ubig64_t bu64(0x010203040506070ULL);
117     ulittle64_t lu64(0x010203040506070ULL);
118 
119     boost::uint64_t x;
120 
121     std::stringstream ss;
122 
123     ss << bu64;
124     ss >> x;
125     BOOST_TEST_EQ(x, 0x010203040506070ULL);
126 
127     ss.clear();
128     ss << lu64;
129     ss >> x;
130     BOOST_TEST_EQ(x, 0x010203040506070ULL);
131 
132     ss.clear();
133     ss << 0x010203040506070ULL;
134     ubig64_t bu64z(0);
135     ss >> bu64z;
136     BOOST_TEST_EQ(bu64z, bu64);
137 
138     ss.clear();
139     ss << 0x010203040506070ULL;
140     ulittle64_t lu64z(0);
141     ss >> lu64z;
142     BOOST_TEST_EQ(lu64z, lu64);
143 
144     std::cout << "test inserter and extractor complete" << std::endl;
145 
146   }
147 
148 }  // unnamed namespace
149 
150    //--------------------------------------------------------------------------------------//
151 
cpp_main(int,char * [])152 int cpp_main(int, char *[])
153 {
154   cout << "byte swap intrinsics: " BOOST_ENDIAN_INTRINSIC_MSG << endl;
155 
156   cout << "  construct big endian aligned" << endl;
157   big32_t x(1122334455);
158 
159   cout << "  assign to buffer from built-in integer" << endl;
160   x = 1234567890;
161 
162   cout << "  operator==(buffer.value(), built-in)" << endl;
163   bool b1(x == 1234567890);
164   BOOST_TEST(b1);
165 
166   cout << "  construct little endian unaligned" << endl;
167   little32_t x2(1122334455);
168 
169   cout << "  assign to buffer from built-in integer" << endl;
170   x2 = 1234567890;
171 
172   cout << "  operator==(buffer.value(), built-in)" << endl;
173   bool b2(x2 == 1234567890);
174   BOOST_TEST(b2);
175 
176   check_size();
177   test_inserter_and_extractor();
178 
179   cout << "  done" << endl;
180 
181   return ::boost::report_errors();
182 }
183 
184 #include <boost/endian/detail/disable_warnings_pop.hpp>
185