shortest_alternative_tests.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. //
  2. // Copyright (c) 2004 Joao Abecasis
  3. //
  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. #include <boost/spirit/include/classic_core.hpp>
  9. #include <boost/detail/lightweight_test.hpp>
  10. using namespace BOOST_SPIRIT_CLASSIC_NS;
  11. void shortest_alternative_parser_test()
  12. {
  13. typedef
  14. shortest_alternative<
  15. shortest_alternative<
  16. shortest_alternative<
  17. strlit<>,
  18. strlit<> >,
  19. strlit<> >,
  20. strlit<> >
  21. parser_t;
  22. parser_t short_rule =
  23. shortest_d[
  24. str_p("a")
  25. | str_p("aa")
  26. | str_p("aaa")
  27. | str_p("aaaa")
  28. ];
  29. BOOST_TEST(parse("a", short_rule).full);
  30. BOOST_TEST(parse("aa", short_rule).length == 1);
  31. BOOST_TEST(parse("aaa", short_rule).length == 1);
  32. BOOST_TEST(parse("aaaa", short_rule).length == 1);
  33. short_rule =
  34. shortest_d[
  35. str_p("d")
  36. | str_p("cd")
  37. | str_p("bcd")
  38. | str_p("abcd")
  39. ];
  40. BOOST_TEST(parse("d", short_rule).full);
  41. BOOST_TEST(parse("cd", short_rule).full);
  42. BOOST_TEST(parse("bcd", short_rule).full);
  43. BOOST_TEST(parse("abcd", short_rule).full);
  44. }
  45. int
  46. main()
  47. {
  48. shortest_alternative_parser_test();
  49. return boost::report_errors();
  50. }