test.hpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /*=============================================================================
  2. Copyright (c) 2001-2013 Joel de Guzman
  3. Distributed under the Boost Software License, Version 1.0. (See accompanying
  4. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. =============================================================================*/
  6. #if !defined(BOOST_SPIRIT_TEST_FEBRUARY_01_2007_0605PM)
  7. #define BOOST_SPIRIT_TEST_FEBRUARY_01_2007_0605PM
  8. #include <boost/spirit/home/x3/core/parse.hpp>
  9. #include <boost/utility/string_view.hpp>
  10. #include <iostream>
  11. namespace spirit_test
  12. {
  13. template <typename Char, typename Parser>
  14. bool test(Char const* in, Parser const& p, bool full_match = true)
  15. {
  16. Char const* last = in;
  17. while (*last)
  18. last++;
  19. return boost::spirit::x3::parse(in, last, p)
  20. && (!full_match || (in == last));
  21. }
  22. template <typename Char, typename Parser>
  23. bool test(boost::basic_string_view<Char, std::char_traits<Char>> in,
  24. Parser const& p, bool full_match = true)
  25. {
  26. auto const last = in.end();
  27. auto pos = in.begin();
  28. return boost::spirit::x3::parse(pos, last, p) && (!full_match || (pos == last));
  29. }
  30. template <typename Char, typename Parser, typename Skipper>
  31. bool test(Char const* in, Parser const& p
  32. , Skipper const& s, bool full_match = true)
  33. {
  34. Char const* last = in;
  35. while (*last)
  36. last++;
  37. return boost::spirit::x3::phrase_parse(in, last, p, s)
  38. && (!full_match || (in == last));
  39. }
  40. template <typename Char, typename Parser>
  41. bool test_failure(Char const* in, Parser const& p)
  42. {
  43. Char const * const start = in;
  44. Char const* last = in;
  45. while (*last)
  46. last++;
  47. return !boost::spirit::x3::parse(in, last, p) && (in == start);
  48. }
  49. template <typename Char, typename Parser>
  50. bool test_failure(boost::basic_string_view<Char, std::char_traits<Char>> const in,
  51. Parser const& p)
  52. {
  53. auto pos = in.begin();
  54. return !boost::spirit::x3::parse(pos, in.end(), p) && (pos == in.begin());
  55. }
  56. template <typename Char, typename Parser, typename Attr>
  57. bool test_attr(Char const* in, Parser const& p
  58. , Attr& attr, bool full_match = true)
  59. {
  60. Char const* last = in;
  61. while (*last)
  62. last++;
  63. return boost::spirit::x3::parse(in, last, p, attr)
  64. && (!full_match || (in == last));
  65. }
  66. template <typename Char, typename Parser, typename Attr, typename Skipper>
  67. bool test_attr(Char const* in, Parser const& p
  68. , Attr& attr, Skipper const& s, bool full_match = true)
  69. {
  70. Char const* last = in;
  71. while (*last)
  72. last++;
  73. return boost::spirit::x3::phrase_parse(in, last, p, s, attr)
  74. && (!full_match || (in == last));
  75. }
  76. template <typename Char, typename Parser>
  77. bool binary_test(Char const* in, std::size_t size, Parser const& p,
  78. bool full_match = true)
  79. {
  80. Char const* last = in + size;
  81. return boost::spirit::x3::parse(in, last, p)
  82. && (!full_match || (in == last));
  83. }
  84. template <typename Char, typename Parser, typename Skipper>
  85. bool binary_test(Char const* in, std::size_t size, Parser const& p,
  86. Skipper const& s, bool full_match = true)
  87. {
  88. Char const* last = in + size;
  89. return boost::spirit::x3::phrase_parse(in, last, p, s)
  90. && (!full_match || (in == last));
  91. }
  92. template <typename Char, typename Parser, typename Attr>
  93. bool binary_test_attr(Char const* in, std::size_t size, Parser const& p,
  94. Attr& attr, bool full_match = true)
  95. {
  96. Char const* last = in + size;
  97. return boost::spirit::x3::parse(in, last, p, attr)
  98. && (!full_match || (in == last));
  99. }
  100. template <typename Char, typename Parser, typename Attr, typename Skipper>
  101. bool binary_test_attr(Char const* in, std::size_t size, Parser const& p,
  102. Attr& attr, Skipper const& s, bool full_match = true)
  103. {
  104. Char const* last = in + size;
  105. return boost::spirit::x3::phrase_parse(in, last, p, s, attr)
  106. && (!full_match || (in == last));
  107. }
  108. }
  109. #endif