]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/classic/test/fundamental_tests.cpp
1 /*=============================================================================
2 Copyright (c) 2001-2003 Joel de Guzman
3 http://spirit.sourceforge.net/
5 Use, modification and distribution is subject to the Boost Software
6 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
7 http://www.boost.org/LICENSE_1_0.txt)
8 =============================================================================*/
9 ///////////////////////////////////////////////////////////////////////////////
11 // Fundamental meta sublayer tests
13 ///////////////////////////////////////////////////////////////////////////////
16 #include <boost/static_assert.hpp>
17 #include <boost/spirit/include/classic_core.hpp>
18 #include <boost/spirit/include/classic_meta.hpp>
19 #include <boost/spirit/include/classic_assign_actor.hpp>
21 #include <boost/core/lightweight_test.hpp>
23 using namespace BOOST_SPIRIT_CLASSIC_NS
;
25 typedef ref_value_actor
<char, assign_action
> assign_actor
;
27 ///////////////////////////////////////////////////////////////////////////////
31 ///////////////////////////////////////////////////////////////////////////////
36 typedef chlit
<char> plain_t
;
37 typedef optional
<chlit
<char> > optional_t
;
38 typedef action
<chlit
<char>, assign_actor
> action_t
;
39 typedef sequence
<chlit
<char>, anychar_parser
> sequence_t
;
41 BOOST_STATIC_ASSERT(1 == node_count
<plain_t
>::value
);
42 BOOST_STATIC_ASSERT(2 == node_count
<optional_t
>::value
);
43 BOOST_STATIC_ASSERT(2 == node_count
<action_t
>::value
);
44 BOOST_STATIC_ASSERT(3 == node_count
<sequence_t
>::value
);
46 // more elaborate types
47 typedef sequence
<sequence
<plain_t
, action_t
>, plain_t
> sequence2_t
;
48 typedef sequence
<plain_t
, sequence
<action_t
, plain_t
> > sequence3_t
;
50 BOOST_STATIC_ASSERT(6 == node_count
<sequence2_t
>::value
);
51 BOOST_STATIC_ASSERT(6 == node_count
<sequence3_t
>::value
);
54 ///////////////////////////////////////////////////////////////////////////////
58 ///////////////////////////////////////////////////////////////////////////////
63 typedef chlit
<char> plain_t
;
64 typedef optional
<chlit
<char> > optional_t
;
65 typedef action
<chlit
<char>, assign_actor
> action_t
;
66 typedef sequence
<chlit
<char>, anychar_parser
> sequence_t
;
68 BOOST_STATIC_ASSERT(1 == leaf_count
<plain_t
>::value
);
69 BOOST_STATIC_ASSERT(1 == leaf_count
<optional_t
>::value
);
70 BOOST_STATIC_ASSERT(1 == leaf_count
<action_t
>::value
);
71 BOOST_STATIC_ASSERT(2 == leaf_count
<sequence_t
>::value
);
73 // more elaborate types
74 typedef sequence
<sequence
<plain_t
, action_t
>, plain_t
> sequence2_t
;
75 typedef sequence
<plain_t
, sequence
<action_t
, plain_t
> > sequence3_t
;
77 BOOST_STATIC_ASSERT(3 == leaf_count
<sequence2_t
>::value
);
78 BOOST_STATIC_ASSERT(3 == leaf_count
<sequence3_t
>::value
);
82 ///////////////////////////////////////////////////////////////////////////////
86 ///////////////////////////////////////////////////////////////////////////////
93 return boost::report_errors();