fundamental_tests.cpp 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 BOOST_SPIRIT_CLASSIC_NS;
  20. typedef ref_value_actor<char, assign_action> assign_actor;
  21. ///////////////////////////////////////////////////////////////////////////////
  22. //
  23. // node_count_tests
  24. //
  25. ///////////////////////////////////////////////////////////////////////////////
  26. void
  27. node_count_tests()
  28. {
  29. // simple types
  30. typedef chlit<char> plain_t;
  31. typedef optional<chlit<char> > optional_t;
  32. typedef action<chlit<char>, assign_actor> action_t;
  33. typedef sequence<chlit<char>, anychar_parser> sequence_t;
  34. BOOST_STATIC_ASSERT(1 == node_count<plain_t>::value);
  35. BOOST_STATIC_ASSERT(2 == node_count<optional_t>::value);
  36. BOOST_STATIC_ASSERT(2 == node_count<action_t>::value);
  37. BOOST_STATIC_ASSERT(3 == node_count<sequence_t>::value);
  38. // more elaborate types
  39. typedef sequence<sequence<plain_t, action_t>, plain_t> sequence2_t;
  40. typedef sequence<plain_t, sequence<action_t, plain_t> > sequence3_t;
  41. BOOST_STATIC_ASSERT(6 == node_count<sequence2_t>::value);
  42. BOOST_STATIC_ASSERT(6 == node_count<sequence3_t>::value);
  43. }
  44. ///////////////////////////////////////////////////////////////////////////////
  45. //
  46. // leaf_count_tests
  47. //
  48. ///////////////////////////////////////////////////////////////////////////////
  49. void
  50. leaf_count_tests()
  51. {
  52. // simple types
  53. typedef chlit<char> plain_t;
  54. typedef optional<chlit<char> > optional_t;
  55. typedef action<chlit<char>, assign_actor> action_t;
  56. typedef sequence<chlit<char>, anychar_parser> sequence_t;
  57. BOOST_STATIC_ASSERT(1 == leaf_count<plain_t>::value);
  58. BOOST_STATIC_ASSERT(1 == leaf_count<optional_t>::value);
  59. BOOST_STATIC_ASSERT(1 == leaf_count<action_t>::value);
  60. BOOST_STATIC_ASSERT(2 == leaf_count<sequence_t>::value);
  61. // more elaborate types
  62. typedef sequence<sequence<plain_t, action_t>, plain_t> sequence2_t;
  63. typedef sequence<plain_t, sequence<action_t, plain_t> > sequence3_t;
  64. BOOST_STATIC_ASSERT(3 == leaf_count<sequence2_t>::value);
  65. BOOST_STATIC_ASSERT(3 == leaf_count<sequence3_t>::value);
  66. }
  67. ///////////////////////////////////////////////////////////////////////////////
  68. //
  69. // Main
  70. //
  71. ///////////////////////////////////////////////////////////////////////////////
  72. int
  73. main()
  74. {
  75. node_count_tests();
  76. leaf_count_tests();
  77. return boost::report_errors();
  78. }