]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | /*============================================================================= |
2 | Copyright (c) 2001-2011 Hartmut Kaiser | |
3 | Copyright (c) 2011 Matthias Born | |
4 | ||
5 | Distributed under the Boost Software License, Version 1.0. (See accompanying | |
6 | file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
7 | ==============================================================================*/ | |
8 | #include <boost/config/warning_disable.hpp> | |
9 | #include <boost/detail/lightweight_test.hpp> | |
92f5a8d4 TL |
10 | #include <boost/spirit/include/qi_operator.hpp> |
11 | #include <boost/spirit/include/qi_char.hpp> | |
12 | #include <boost/spirit/include/qi_attr.hpp> | |
13 | #include <boost/spirit/include/qi_binary.hpp> | |
14 | #include <boost/spirit/include/qi_omit.hpp> | |
15 | #include <boost/spirit/include/qi_nonterminal.hpp> | |
16 | #include <boost/spirit/include/qi_action.hpp> | |
17 | #include <boost/spirit/include/phoenix_core.hpp> | |
18 | #include <boost/spirit/include/phoenix_operator.hpp> | |
7c673cae | 19 | #include <boost/fusion/include/adapt_struct.hpp> |
92f5a8d4 | 20 | #include <boost/predef/other/endian.h> |
7c673cae FG |
21 | #include "test.hpp" |
22 | ||
23 | int main() | |
24 | { | |
25 | // This test assumes a little endian architecture | |
92f5a8d4 | 26 | #if BOOST_ENDIAN_LITTLE_BYTE |
7c673cae FG |
27 | using spirit_test::test_attr; |
28 | using boost::spirit::qi::rule; | |
29 | using boost::spirit::qi::locals; | |
30 | using boost::spirit::qi::little_word; | |
31 | using boost::spirit::qi::omit; | |
32 | using boost::spirit::qi::_1; | |
33 | using boost::spirit::qi::_a; | |
34 | using boost::spirit::qi::attr; | |
35 | ||
36 | rule<char const*, short int(), locals<short int> > pass; | |
37 | pass = little_word; | |
38 | ||
39 | rule<char const*, short int(), locals<short int> > pass_ugly; | |
40 | pass_ugly %= omit[little_word[_a=_1]] >> attr(_a); | |
41 | ||
42 | rule<char const*, short int(), locals<short int> > fail; | |
43 | fail %= little_word[_a=_1]; | |
44 | ||
45 | short int us = 0; | |
46 | BOOST_TEST(test_attr("\x01\x02", pass, us) && us == 0x0201); | |
47 | ||
48 | us = 0; | |
49 | BOOST_TEST(test_attr("\x01\x02", pass_ugly, us) && us == 0x0201); | |
50 | ||
51 | us = 0; | |
52 | BOOST_TEST(test_attr("\x01\x02", fail, us) && us == 0x0201); | |
53 | #endif | |
54 | return boost::report_errors(); | |
55 | } |