/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

  1. /*=============================================================================
  2. Copyright (c) 2001-2003 Joel de Guzman
  3. http://spirit.sourceforge.net/
  4. Use, modification and distribution is subject to the Boost Software
  5. License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  6. http://www.boost.org/LICENSE_1_0.txt)
  7. =============================================================================*/
  8. ///////////////////////////////////////////////////////////////////////////////
  9. //
  10. // Fundamental meta sublayer tests
  11. //
  12. ///////////////////////////////////////////////////////////////////////////////
  13. #include <boost/detail/lightweight_test.hpp>
  14. #include <iostream>
  15. #include <boost/static_assert.hpp>
  16. #include <boost/spirit/include/classic_core.hpp>
  17. #include <boost/spirit/include/classic_meta.hpp>
  18. #include <boost/spirit/include/classic_assign_actor.hpp>
  19. using namespace std;
  20. using namespace BOOST_SPIRIT_CLASSIC_NS;
  21. typedef ref_value_actor<char, assign_action> assign_actor;
  22. ///////////////////////////////////////////////////////////////////////////////
  23. //
  24. // node_count_tests
  25. //
  26. ///////////////////////////////////////////////////////////////////////////////
  27. void
  28. node_count_tests()
  29. {
  30. // simple types
  31. typedef chlit<char> plain_t;
  32. typedef optional<chlit<char> > optional_t;
  33. typedef action<chlit<char>, assign_actor> action_t;
  34. typedef sequence<chlit<char>, anychar_parser> sequence_t;
  35. BOOST_STATIC_ASSERT(1 == node_count<plain_t>::value);
  36. BOOST_STATIC_ASSERT(2 == node_count<optional_t>::value);
  37. BOOST_STATIC_ASSERT(2 == node_count<action_t>::value);
  38. BOOST_STATIC_ASSERT(3 == node_count<sequence_t>::value);
  39. // more elaborate types
  40. typedef sequence<sequence<plain_t, action_t>, plain_t> sequence2_t;
  41. typedef sequence<plain_t, sequence<action_t, plain_t> > sequence3_t;
  42. BOOST_STATIC_ASSERT(6 == node_count<sequence2_t>::value);
  43. BOOST_STATIC_ASSERT(6 == node_count<sequence3_t>::value);
  44. }
  45. ///////////////////////////////////////////////////////////////////////////////
  46. //
  47. // leaf_count_tests
  48. //
  49. ///////////////////////////////////////////////////////////////////////////////
  50. void
  51. leaf_count_tests()
  52. {
  53. // simple types
  54. typedef chlit<char> plain_t;
  55. typedef optional<chlit<char> > optional_t;
  56. typedef action<chlit<char>, assign_actor> action_t;
  57. typedef sequence<chlit<char>, anychar_parser> sequence_t;
  58. BOOST_STATIC_ASSERT(1 == leaf_count<plain_t>::value);
  59. BOOST_STATIC_ASSERT(1 == leaf_count<optional_t>::value);
  60. BOOST_STATIC_ASSERT(1 == leaf_count<action_t>::value);
  61. BOOST_STATIC_ASSERT(2 == leaf_count<sequence_t>::value);
  62. // more elaborate types
  63. typedef sequence<sequence<plain_t, action_t>, plain_t> sequence2_t;
  64. typedef sequence<plain_t, sequence<action_t, plain_t> > sequence3_t;
  65. BOOST_STATIC_ASSERT(3 == leaf_count<sequence2_t>::value);
  66. BOOST_STATIC_ASSERT(3 == leaf_count<sequence3_t>::value);
  67. }
  68. ///////////////////////////////////////////////////////////////////////////////
  69. //
  70. // Main
  71. //
  72. ///////////////////////////////////////////////////////////////////////////////
  73. int
  74. main()
  75. {
  76. node_count_tests();
  77. leaf_count_tests();
  78. return boost::report_errors();
  79. }