]>
Commit | Line | Data |
---|---|---|
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 | ==============================================================================*/ | |
1e59de90 | 7 | #include <boost/spirit/include/qi_binary.hpp> |
7c673cae FG |
8 | |
9 | #include <boost/spirit/include/support_argument.hpp> | |
7c673cae | 10 | #include <boost/cstdint.hpp> |
92f5a8d4 | 11 | #include <boost/predef/other/endian.h> |
7c673cae FG |
12 | #include "test.hpp" |
13 | ||
14 | /////////////////////////////////////////////////////////////////////////////// | |
15 | int 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::qi::byte_; | |
23 | using boost::spirit::qi::word; | |
24 | using boost::spirit::qi::dword; | |
25 | using boost::spirit::qi::big_word; | |
26 | using boost::spirit::qi::big_dword; | |
27 | using boost::spirit::qi::little_word; | |
28 | using boost::spirit::qi::little_dword; | |
29 | #ifdef BOOST_HAS_LONG_LONG | |
30 | using boost::spirit::qi::qword; | |
31 | using boost::spirit::qi::big_qword; | |
32 | using boost::spirit::qi::little_qword; | |
33 | #endif | |
34 | using boost::spirit::qi::bin_float; | |
35 | using boost::spirit::qi::big_bin_float; | |
36 | using boost::spirit::qi::little_bin_float; | |
37 | using boost::spirit::qi::bin_double; | |
38 | using boost::spirit::qi::big_bin_double; | |
39 | using boost::spirit::qi::little_bin_double; | |
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 | |
47 | float f; | |
48 | double d; | |
49 | ||
50 | { // test native endian binaries | |
92f5a8d4 | 51 | #if BOOST_ENDIAN_LITTLE_BYTE |
7c673cae FG |
52 | BOOST_TEST(test_attr("\x01", byte_, uc) && uc == 0x01); |
53 | BOOST_TEST(test_attr("\x01\x02", word, us) && us == 0x0201); | |
54 | BOOST_TEST(test_attr("\x01\x02\x03\x04", dword, ui) && ui == 0x04030201); | |
55 | #ifdef BOOST_HAS_LONG_LONG | |
56 | BOOST_TEST(test_attr("\x01\x02\x03\x04\x05\x06\x07\x08", qword, ul) && | |
57 | ul == 0x0807060504030201LL); | |
58 | #endif | |
59 | BOOST_TEST(binary_test_attr("\x00\x00\x80\x3f", 4, bin_float, f) && | |
60 | f == 1.0f); | |
61 | BOOST_TEST(binary_test_attr("\x00\x00\x00\x00\x00\x00\xf0\x3f", | |
62 | 8, bin_double, d) && f == 1.0); | |
63 | #else | |
64 | BOOST_TEST(test_attr("\x01", byte_, uc) && uc == 0x01); | |
65 | BOOST_TEST(test_attr("\x01\x02", word, us) && us == 0x0102); | |
66 | BOOST_TEST(test_attr("\x01\x02\x03\x04", dword, ui) && ui == 0x01020304); | |
67 | #ifdef BOOST_HAS_LONG_LONG | |
68 | BOOST_TEST(test_attr("\x01\x02\x03\x04\x05\x06\x07\x08", qword, ul) && | |
69 | ul == 0x0102030405060708LL); | |
70 | #endif | |
71 | BOOST_TEST(binary_test_attr("\x3f\x80\x00\x00", 4, bin_float, f) && | |
72 | f == 1.0f); | |
73 | BOOST_TEST(binary_test_attr("\x3f\xf0\x00\x00\x00\x00\x00\x00", | |
74 | 8, bin_double, d) && f == 1.0); | |
75 | #endif | |
76 | } | |
77 | ||
78 | { // test native endian binaries | |
92f5a8d4 | 79 | #if BOOST_ENDIAN_LITTLE_BYTE |
7c673cae FG |
80 | BOOST_TEST(test("\x01", byte_(0x01))); |
81 | BOOST_TEST(test("\x01\x02", word(0x0201))); | |
82 | BOOST_TEST(test("\x01\x02\x03\x04", dword(0x04030201))); | |
83 | #ifdef BOOST_HAS_LONG_LONG | |
84 | BOOST_TEST(test("\x01\x02\x03\x04\x05\x06\x07\x08", | |
85 | qword(0x0807060504030201LL))); | |
86 | #endif | |
87 | BOOST_TEST(binary_test("\x00\x00\x80\x3f", 4, bin_float(1.0f))); | |
88 | BOOST_TEST(binary_test("\x00\x00\x00\x00\x00\x00\xf0\x3f", 8, | |
89 | bin_double(1.0))); | |
90 | #else | |
91 | BOOST_TEST(test("\x01", byte_(0x01))); | |
92 | BOOST_TEST(test("\x01\x02", word(0x0102))); | |
93 | BOOST_TEST(test("\x01\x02\x03\x04", dword(0x01020304))); | |
94 | #ifdef BOOST_HAS_LONG_LONG | |
95 | BOOST_TEST(test("\x01\x02\x03\x04\x05\x06\x07\x08", | |
96 | qword(0x0102030405060708LL))); | |
97 | #endif | |
98 | BOOST_TEST(binary_test("\x3f\x80\x00\x00", 4, bin_float(1.0f))); | |
1e59de90 | 99 | BOOST_TEST(binary_test("\x3f\xf0\x00\x00\x00\x00\x00\x00", 8, |
7c673cae FG |
100 | bin_double(1.0))); |
101 | #endif | |
102 | } | |
103 | ||
104 | { // test big endian binaries | |
105 | BOOST_TEST(test_attr("\x01\x02", big_word, us) && us == 0x0102); | |
106 | BOOST_TEST(test_attr("\x01\x02\x03\x04", big_dword, ui) && ui == 0x01020304); | |
107 | #ifdef BOOST_HAS_LONG_LONG | |
108 | BOOST_TEST(test_attr("\x01\x02\x03\x04\x05\x06\x07\x08", big_qword, ul) | |
109 | && ul == 0x0102030405060708LL); | |
110 | #endif | |
111 | BOOST_TEST(binary_test_attr("\x3f\x80\x00\x00", 4, big_bin_float, f) && | |
112 | f == 1.0f); | |
113 | BOOST_TEST(binary_test_attr("\x3f\xf0\x00\x00\x00\x00\x00\x00", | |
114 | 8, big_bin_double, d) && f == 1.0); | |
115 | } | |
116 | ||
117 | { | |
118 | BOOST_TEST(test("\x01\x02", big_word(0x0102))); | |
119 | BOOST_TEST(test("\x01\x02\x03\x04", big_dword(0x01020304))); | |
120 | #ifdef BOOST_HAS_LONG_LONG | |
121 | BOOST_TEST(test("\x01\x02\x03\x04\x05\x06\x07\x08", | |
122 | big_qword(0x0102030405060708LL))); | |
123 | #endif | |
124 | BOOST_TEST(binary_test("\x3f\x80\x00\x00", 4, big_bin_float(1.0f))); | |
125 | BOOST_TEST(binary_test("\x3f\xf0\x00\x00\x00\x00\x00\x00", 8, | |
126 | big_bin_double(1.0))); | |
127 | } | |
128 | ||
129 | { // test little endian binaries | |
130 | BOOST_TEST(test_attr("\x01\x02", little_word, us) && us == 0x0201); | |
131 | BOOST_TEST(test_attr("\x01\x02\x03\x04", little_dword, ui) && ui == 0x04030201); | |
132 | #ifdef BOOST_HAS_LONG_LONG | |
133 | BOOST_TEST(test_attr("\x01\x02\x03\x04\x05\x06\x07\x08", little_qword, ul) | |
134 | && ul == 0x0807060504030201LL); | |
135 | #endif | |
136 | BOOST_TEST(binary_test_attr("\x00\x00\x80\x3f", 4, | |
137 | little_bin_float, f) && f == 1.0f); | |
138 | BOOST_TEST(binary_test_attr("\x00\x00\x00\x00\x00\x00\xf0\x3f", | |
139 | 8, little_bin_double, d) && f == 1.0); | |
140 | } | |
141 | ||
142 | { | |
143 | BOOST_TEST(test("\x01\x02", little_word(0x0201))); | |
144 | BOOST_TEST(test("\x01\x02\x03\x04", little_dword(0x04030201))); | |
145 | #ifdef BOOST_HAS_LONG_LONG | |
146 | BOOST_TEST(test("\x01\x02\x03\x04\x05\x06\x07\x08", | |
147 | little_qword(0x0807060504030201LL))); | |
148 | #endif | |
149 | BOOST_TEST(binary_test("\x00\x00\x80\x3f", 4, little_bin_float(1.0f))); | |
150 | BOOST_TEST(binary_test("\x00\x00\x00\x00\x00\x00\xf0\x3f", 8, | |
151 | little_bin_double(1.0))); | |
152 | } | |
153 | ||
154 | return boost::report_errors(); | |
155 | } |