/Src/Dependencies/Boost/libs/spirit/classic/test/fundamental_tests.cpp
http://hadesmem.googlecode.com/ · C++ · 95 lines · 48 code · 15 blank · 32 comment · 12 complexity · d7164535a0fa4b75bb6482d12fdf516c MD5 · raw file
- /*=============================================================================
- Copyright (c) 2001-2003 Joel de Guzman
- http://spirit.sourceforge.net/
- Use, modification and distribution is subject to the Boost Software
- License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
- =============================================================================*/
- ///////////////////////////////////////////////////////////////////////////////
- //
- // Fundamental meta sublayer tests
- //
- ///////////////////////////////////////////////////////////////////////////////
- #include <boost/detail/lightweight_test.hpp>
- #include <iostream>
- #include <boost/static_assert.hpp>
- #include <boost/spirit/include/classic_core.hpp>
- #include <boost/spirit/include/classic_meta.hpp>
- #include <boost/spirit/include/classic_assign_actor.hpp>
- using namespace std;
- using namespace BOOST_SPIRIT_CLASSIC_NS;
- typedef ref_value_actor<char, assign_action> assign_actor;
- ///////////////////////////////////////////////////////////////////////////////
- //
- // node_count_tests
- //
- ///////////////////////////////////////////////////////////////////////////////
- void
- node_count_tests()
- {
- // simple types
- typedef chlit<char> plain_t;
- typedef optional<chlit<char> > optional_t;
- typedef action<chlit<char>, assign_actor> action_t;
- typedef sequence<chlit<char>, anychar_parser> sequence_t;
- BOOST_STATIC_ASSERT(1 == node_count<plain_t>::value);
- BOOST_STATIC_ASSERT(2 == node_count<optional_t>::value);
- BOOST_STATIC_ASSERT(2 == node_count<action_t>::value);
- BOOST_STATIC_ASSERT(3 == node_count<sequence_t>::value);
- // more elaborate types
- typedef sequence<sequence<plain_t, action_t>, plain_t> sequence2_t;
- typedef sequence<plain_t, sequence<action_t, plain_t> > sequence3_t;
- BOOST_STATIC_ASSERT(6 == node_count<sequence2_t>::value);
- BOOST_STATIC_ASSERT(6 == node_count<sequence3_t>::value);
- }
- ///////////////////////////////////////////////////////////////////////////////
- //
- // leaf_count_tests
- //
- ///////////////////////////////////////////////////////////////////////////////
- void
- leaf_count_tests()
- {
- // simple types
- typedef chlit<char> plain_t;
- typedef optional<chlit<char> > optional_t;
- typedef action<chlit<char>, assign_actor> action_t;
- typedef sequence<chlit<char>, anychar_parser> sequence_t;
- BOOST_STATIC_ASSERT(1 == leaf_count<plain_t>::value);
- BOOST_STATIC_ASSERT(1 == leaf_count<optional_t>::value);
- BOOST_STATIC_ASSERT(1 == leaf_count<action_t>::value);
- BOOST_STATIC_ASSERT(2 == leaf_count<sequence_t>::value);
- // more elaborate types
- typedef sequence<sequence<plain_t, action_t>, plain_t> sequence2_t;
- typedef sequence<plain_t, sequence<action_t, plain_t> > sequence3_t;
- BOOST_STATIC_ASSERT(3 == leaf_count<sequence2_t>::value);
- BOOST_STATIC_ASSERT(3 == leaf_count<sequence3_t>::value);
- }
- ///////////////////////////////////////////////////////////////////////////////
- //
- // Main
- //
- ///////////////////////////////////////////////////////////////////////////////
- int
- main()
- {
- node_count_tests();
- leaf_count_tests();
- return boost::report_errors();
- }