]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/qi/regression_binary_action.cpp
1 /*=============================================================================
2 Copyright (c) 2001-2011 Hartmut Kaiser
3 Copyright (c) 2011 Matthias Born
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>
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>
19 #include <boost/fusion/include/adapt_struct.hpp>
20 #include <boost/predef/other/endian.h>
25 // This test assumes a little endian architecture
26 #if BOOST_ENDIAN_LITTLE_BYTE
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
;
36 rule
<char const*, short int(), locals
<short int> > pass
;
39 rule
<char const*, short int(), locals
<short int> > pass_ugly
;
40 pass_ugly
%= omit
[little_word
[_a
=_1
]] >> attr(_a
);
42 rule
<char const*, short int(), locals
<short int> > fail
;
43 fail
%= little_word
[_a
=_1
];
46 BOOST_TEST(test_attr("\x01\x02", pass
, us
) && us
== 0x0201);
49 BOOST_TEST(test_attr("\x01\x02", pass_ugly
, us
) && us
== 0x0201);
52 BOOST_TEST(test_attr("\x01\x02", fail
, us
) && us
== 0x0201);
54 return boost::report_errors();