]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/spirit/test/x3/binary.cpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / libs / spirit / test / x3 / binary.cpp
CommitLineData
7c673cae
FG
1/*=============================================================================
2 Copyright (c) 2001-2011 Hartmut Kaiser
3
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6==============================================================================*/
7#include <boost/detail/lightweight_test.hpp>
8
7c673cae
FG
9#include <boost/spirit/home/x3/binary.hpp>
10#include <boost/cstdint.hpp>
92f5a8d4 11#include <boost/predef/other/endian.h>
7c673cae
FG
12#include "test.hpp"
13
14///////////////////////////////////////////////////////////////////////////////
15int main()
16{
17 using spirit_test::test_attr;
18 using spirit_test::test;
19 using spirit_test::binary_test;
20 using spirit_test::binary_test_attr;
21
22 using boost::spirit::x3::byte_;
23 using boost::spirit::x3::word;
24 using boost::spirit::x3::dword;
25 using boost::spirit::x3::big_word;
26 using boost::spirit::x3::big_dword;
27 using boost::spirit::x3::little_word;
28 using boost::spirit::x3::little_dword;
29#ifdef BOOST_HAS_LONG_LONG
30 using boost::spirit::x3::qword;
31 using boost::spirit::x3::big_qword;
32 using boost::spirit::x3::little_qword;
33#endif
20effc67
TL
34 using boost::spirit::x3::bin_float;
35 using boost::spirit::x3::big_bin_float;
36 using boost::spirit::x3::little_bin_float;
37 using boost::spirit::x3::bin_double;
38 using boost::spirit::x3::big_bin_double;
39 using boost::spirit::x3::little_bin_double;
7c673cae
FG
40
41 boost::uint8_t uc;
42 boost::uint16_t us;
43 boost::uint32_t ui;
44#ifdef BOOST_HAS_LONG_LONG
45 boost::uint64_t ul;
46#endif
20effc67
TL
47 float f;
48 double d;
7c673cae 49
f67539c2
TL
50 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(byte_);
51 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(word);
52 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(dword);
53 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(big_word);
54 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(big_dword);
55 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(little_word);
56 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(little_dword);
57#ifdef BOOST_HAS_LONG_LONG
58 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(qword);
59 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(big_qword);
60 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(little_qword);
20effc67
TL
61 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(bin_float);
62 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(big_bin_float);
63 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(little_bin_float);
64 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(bin_double);
65 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(big_bin_double);
66 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(little_bin_double);
f67539c2
TL
67#endif
68
69// TODO: boost::endian::endian_arithmetic value constructor is not constexpr
70#if 0
71 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(byte_(1));
72 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(word(1));
73 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(dword(1));
74 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(big_word(1));
75 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(big_dword(1));
76 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(little_word(1));
77 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(little_dword(1));
78#ifdef BOOST_HAS_LONG_LONG
79 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(qword(1));
80 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(big_qword(1));
81 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(little_qword(1));
82#endif
20effc67
TL
83 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(bin_float(1.0f));
84 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(big_bin_float(1.0f));
85 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(little_bin_float(1.0f));
86 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(bin_double(1.0));
87 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(big_bin_double(1.0));
88 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(little_bin_double(1.0));
f67539c2
TL
89#endif
90
7c673cae 91 { // test native endian binaries
92f5a8d4 92#if BOOST_ENDIAN_LITTLE_BYTE
7c673cae
FG
93 BOOST_TEST(test_attr("\x01", byte_, uc) && uc == 0x01);
94 BOOST_TEST(test_attr("\x01\x02", word, us) && us == 0x0201);
95 BOOST_TEST(test_attr("\x01\x02\x03\x04", dword, ui) && ui == 0x04030201);
96#ifdef BOOST_HAS_LONG_LONG
97 BOOST_TEST(test_attr("\x01\x02\x03\x04\x05\x06\x07\x08", qword, ul) &&
98 ul == 0x0807060504030201LL);
99#endif
20effc67
TL
100 BOOST_TEST(binary_test_attr("\x00\x00\x80\x3f", 4, bin_float, f) &&
101 f == 1.0f);
102 BOOST_TEST(binary_test_attr("\x00\x00\x00\x00\x00\x00\xf0\x3f",
103 8, bin_double, d) && f == 1.0);
7c673cae
FG
104#else
105 BOOST_TEST(test_attr("\x01", byte_, uc) && uc == 0x01);
106 BOOST_TEST(test_attr("\x01\x02", word, us) && us == 0x0102);
107 BOOST_TEST(test_attr("\x01\x02\x03\x04", dword, ui) && ui == 0x01020304);
108#ifdef BOOST_HAS_LONG_LONG
109 BOOST_TEST(test_attr("\x01\x02\x03\x04\x05\x06\x07\x08", qword, ul) &&
110 ul == 0x0102030405060708LL);
111#endif
20effc67
TL
112 BOOST_TEST(binary_test_attr("\x3f\x80\x00\x00", 4, bin_float, f) &&
113 f == 1.0f);
114 BOOST_TEST(binary_test_attr("\x3f\xf0\x00\x00\x00\x00\x00\x00",
115 8, bin_double, d) && f == 1.0);
7c673cae
FG
116#endif
117 }
118
119 { // test native endian binaries
92f5a8d4 120#if BOOST_ENDIAN_LITTLE_BYTE
7c673cae
FG
121 BOOST_TEST(test("\x01", byte_(0x01)));
122 BOOST_TEST(test("\x01\x02", word(0x0201)));
123 BOOST_TEST(test("\x01\x02\x03\x04", dword(0x04030201)));
124#ifdef BOOST_HAS_LONG_LONG
125 BOOST_TEST(test("\x01\x02\x03\x04\x05\x06\x07\x08",
126 qword(0x0807060504030201LL)));
127#endif
20effc67
TL
128 BOOST_TEST(binary_test("\x00\x00\x80\x3f", 4, bin_float(1.0f)));
129 BOOST_TEST(binary_test("\x00\x00\x00\x00\x00\x00\xf0\x3f", 8,
130 bin_double(1.0)));
7c673cae
FG
131#else
132 BOOST_TEST(test("\x01", byte_(0x01)));
133 BOOST_TEST(test("\x01\x02", word(0x0102)));
134 BOOST_TEST(test("\x01\x02\x03\x04", dword(0x01020304)));
135#ifdef BOOST_HAS_LONG_LONG
136 BOOST_TEST(test("\x01\x02\x03\x04\x05\x06\x07\x08",
137 qword(0x0102030405060708LL)));
138#endif
20effc67
TL
139 BOOST_TEST(binary_test("\x3f\x80\x00\x00", 4, bin_float(1.0f)));
140 BOOST_TEST(binary_test("\x3f\x80\x00\x00\x00\x00\x00\x00", 8,
141 bin_double(1.0)));
7c673cae
FG
142#endif
143 }
144
145 { // test big endian binaries
146 BOOST_TEST(test_attr("\x01\x02", big_word, us) && us == 0x0102);
147 BOOST_TEST(test_attr("\x01\x02\x03\x04", big_dword, ui) && ui == 0x01020304);
148#ifdef BOOST_HAS_LONG_LONG
149 BOOST_TEST(test_attr("\x01\x02\x03\x04\x05\x06\x07\x08", big_qword, ul)
150 && ul == 0x0102030405060708LL);
151#endif
20effc67
TL
152 BOOST_TEST(binary_test_attr("\x3f\x80\x00\x00", 4, big_bin_float, f) &&
153 f == 1.0f);
154 BOOST_TEST(binary_test_attr("\x3f\xf0\x00\x00\x00\x00\x00\x00",
155 8, big_bin_double, d) && f == 1.0);
7c673cae
FG
156 }
157
158 {
159 BOOST_TEST(test("\x01\x02", big_word(0x0102)));
160 BOOST_TEST(test("\x01\x02\x03\x04", big_dword(0x01020304)));
161#ifdef BOOST_HAS_LONG_LONG
162 BOOST_TEST(test("\x01\x02\x03\x04\x05\x06\x07\x08",
163 big_qword(0x0102030405060708LL)));
164#endif
20effc67
TL
165 BOOST_TEST(binary_test("\x3f\x80\x00\x00", 4, big_bin_float(1.0f)));
166 BOOST_TEST(binary_test("\x3f\xf0\x00\x00\x00\x00\x00\x00", 8,
167 big_bin_double(1.0)));
7c673cae
FG
168 }
169
170 { // test little endian binaries
171 BOOST_TEST(test_attr("\x01\x02", little_word, us) && us == 0x0201);
172 BOOST_TEST(test_attr("\x01\x02\x03\x04", little_dword, ui) && ui == 0x04030201);
173#ifdef BOOST_HAS_LONG_LONG
174 BOOST_TEST(test_attr("\x01\x02\x03\x04\x05\x06\x07\x08", little_qword, ul)
175 && ul == 0x0807060504030201LL);
176#endif
20effc67
TL
177 BOOST_TEST(binary_test_attr("\x00\x00\x80\x3f", 4,
178 little_bin_float, f) && f == 1.0f);
179 BOOST_TEST(binary_test_attr("\x00\x00\x00\x00\x00\x00\xf0\x3f",
180 8, little_bin_double, d) && f == 1.0);
7c673cae
FG
181 }
182
183 {
184 BOOST_TEST(test("\x01\x02", little_word(0x0201)));
185 BOOST_TEST(test("\x01\x02\x03\x04", little_dword(0x04030201)));
186#ifdef BOOST_HAS_LONG_LONG
187 BOOST_TEST(test("\x01\x02\x03\x04\x05\x06\x07\x08",
188 little_qword(0x0807060504030201LL)));
189#endif
20effc67
TL
190 BOOST_TEST(binary_test("\x00\x00\x80\x3f", 4, little_bin_float(1.0f)));
191 BOOST_TEST(binary_test("\x00\x00\x00\x00\x00\x00\xf0\x3f", 8,
192 little_bin_double(1.0)));
7c673cae
FG
193 }
194
195 return boost::report_errors();
196}