operators_tests.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. /*=============================================================================
  2. Copyright (c) 1998-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. #include <iostream>
  9. #include <boost/detail/lightweight_test.hpp>
  10. using namespace std;
  11. #include <boost/spirit/include/classic_core.hpp>
  12. using namespace BOOST_SPIRIT_CLASSIC_NS;
  13. ///////////////////////////////////////////////////////////////////////////////
  14. //
  15. // Operators tests
  16. //
  17. ///////////////////////////////////////////////////////////////////////////////
  18. void
  19. operators_tests()
  20. {
  21. parse_info<char const*> pi;
  22. pi = parse("Hello World", str_p("Hello ") >> "World");
  23. BOOST_TEST(pi.hit);
  24. BOOST_TEST(pi.full);
  25. BOOST_TEST(pi.length == 11);
  26. BOOST_TEST(*pi.stop == 0);
  27. pi = parse("Banana", str_p("Banana") | "Pineapple");
  28. BOOST_TEST(pi.hit);
  29. BOOST_TEST(pi.full);
  30. BOOST_TEST(pi.length == 6);
  31. BOOST_TEST(*pi.stop == 0);
  32. pi = parse("Pineapple", str_p("Banana") | "Pineapple");
  33. BOOST_TEST(pi.hit);
  34. BOOST_TEST(pi.full);
  35. BOOST_TEST(pi.length == 9);
  36. BOOST_TEST(*pi.stop == 0);
  37. pi = parse("a.2 ", alpha_p || ('.' >> digit_p));
  38. BOOST_TEST(pi.hit);
  39. BOOST_TEST(pi.length == 3);
  40. pi = parse("a ", alpha_p || ('.' >> digit_p));
  41. BOOST_TEST(pi.hit);
  42. BOOST_TEST(pi.length == 1);
  43. pi = parse(".1 ", alpha_p || ('.' >> digit_p));
  44. BOOST_TEST(pi.hit);
  45. BOOST_TEST(pi.length == 2);
  46. pi = parse("1.a ", alpha_p || ('.' >> digit_p));
  47. BOOST_TEST(!pi.hit);
  48. pi = parse("abcdefghij", +xdigit_p & +alpha_p);
  49. BOOST_TEST(pi.hit);
  50. BOOST_TEST(pi.length == 6);
  51. pi = parse("abcdefghij", +alpha_p & +xdigit_p);
  52. BOOST_TEST(!pi.hit);
  53. pi = parse("abcdefghij", +digit_p & +alpha_p);
  54. BOOST_TEST(!pi.hit);
  55. pi = parse("abcdefghij", +alpha_p & +digit_p);
  56. BOOST_TEST(!pi.hit);
  57. // Test for bug reported by Yusaku Sugai here:
  58. // http://article.gmane.org/gmane.comp.parsers.spirit.general/8544
  59. pi = parse( "foo", (anychar_p & anychar_p), ch_p(' ') );
  60. BOOST_TEST(pi.hit);
  61. pi = parse("F", xdigit_p - range_p('5','8'));
  62. BOOST_TEST(pi.hit);
  63. BOOST_TEST(pi.length == 1);
  64. pi = parse("0", xdigit_p - range_p('5','8'));
  65. BOOST_TEST(pi.hit);
  66. BOOST_TEST(pi.length == 1);
  67. pi = parse("4", xdigit_p - range_p('5','8'));
  68. BOOST_TEST(pi.hit);
  69. BOOST_TEST(pi.length == 1);
  70. pi = parse("9", xdigit_p - range_p('5','8'));
  71. BOOST_TEST(pi.hit);
  72. BOOST_TEST(pi.length == 1);
  73. pi = parse("5", xdigit_p - range_p('5','8'));
  74. BOOST_TEST(!pi.hit);
  75. pi = parse("7", xdigit_p - range_p('5','8'));
  76. BOOST_TEST(!pi.hit);
  77. pi = parse("x*/", anychar_p - "*/");
  78. BOOST_TEST(pi.hit);
  79. BOOST_TEST(pi.length == 1);
  80. pi = parse("*/", anychar_p - "*/");
  81. BOOST_TEST(!pi.hit);
  82. pi = parse("switcher ", str_p("switcher") - "switch");
  83. BOOST_TEST(pi.hit);
  84. BOOST_TEST(pi.length == 8);
  85. pi = parse("Z", alpha_p ^ xdigit_p);
  86. BOOST_TEST(pi.hit);
  87. BOOST_TEST(pi.length == 1);
  88. pi = parse("1", alpha_p ^ xdigit_p);
  89. BOOST_TEST(pi.hit);
  90. BOOST_TEST(pi.length == 1);
  91. pi = parse("B", alpha_p ^ xdigit_p);
  92. BOOST_TEST(!pi.hit);
  93. pi = parse("B", !alpha_p);
  94. BOOST_TEST(pi.hit);
  95. BOOST_TEST(pi.length == 1);
  96. pi = parse("1", !alpha_p);
  97. BOOST_TEST(pi.hit);
  98. BOOST_TEST(pi.length == 0);
  99. BOOST_TEST(*pi.stop == '1');
  100. pi = parse("1234 5678 1234 5678", *(+digit_p >> *space_p));
  101. BOOST_TEST(pi.hit);
  102. BOOST_TEST(pi.full);
  103. BOOST_TEST(pi.length == 19);
  104. BOOST_TEST(*pi.stop == 0);
  105. pi = parse("abcdefghijklmnopqrstuvwxyz123", *alpha_p);
  106. BOOST_TEST(pi.hit);
  107. BOOST_TEST(pi.length == 26);
  108. pi = parse("1234+5678*1234/5678", +digit_p % (ch_p('+') | '*' | '/'));
  109. BOOST_TEST(pi.hit);
  110. BOOST_TEST(pi.full);
  111. BOOST_TEST(pi.length == 19);
  112. BOOST_TEST(*pi.stop == 0);
  113. pi = parse("1234+", +digit_p % '+');
  114. BOOST_TEST(pi.hit);
  115. BOOST_TEST(!pi.full);
  116. BOOST_TEST(pi.length == 4);
  117. }
  118. ///////////////////////////////////////////////////////////////////////////////
  119. //
  120. // Main
  121. //
  122. ///////////////////////////////////////////////////////////////////////////////
  123. int
  124. main()
  125. {
  126. operators_tests();
  127. return boost::report_errors();
  128. }