match_manip2.cpp 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*=============================================================================
  2. Copyright (c) 2001-2010 Hartmut Kaiser
  3. Copyright (c) 2001-2010 Joel de Guzman
  4. Distributed under the Boost Software License, Version 1.0. (See accompanying
  5. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. =============================================================================*/
  7. #include "match_manip.hpp"
  8. int
  9. main()
  10. {
  11. using boost::spirit::qi::_1;
  12. using boost::spirit::qi::_2;
  13. using boost::spirit::qi::match;
  14. using boost::spirit::qi::phrase_match;
  15. using boost::spirit::qi::typed_stream;
  16. using boost::spirit::qi::stream;
  17. using boost::spirit::qi::int_;
  18. using namespace boost::spirit::ascii;
  19. namespace fusion = boost::fusion;
  20. namespace phx = boost::phoenix;
  21. {
  22. char a = '\0', b = '\0';
  23. BOOST_TEST(test( "ab",
  24. char_[phx::ref(a) = _1] >> char_[phx::ref(b) = _1]
  25. ) && a == 'a' && b == 'b');
  26. a = '\0', b = '\0';
  27. BOOST_TEST(test( "ab",
  28. match(char_[phx::ref(a) = _1] >> char_[phx::ref(b) = _1])
  29. ) && a == 'a' && b == 'b');
  30. a = '\0', b = '\0';
  31. BOOST_TEST(test( " a b",
  32. phrase_match(char_[phx::ref(a) = _1] >> char_[phx::ref(b) = _1], space)
  33. ) && a == 'a' && b == 'b');
  34. fusion::vector<char, char> t;
  35. BOOST_TEST(test( "ab",
  36. match(char_ >> char_, t)
  37. ) && fusion::at_c<0>(t) == 'a' && fusion::at_c<1>(t) == 'b');
  38. t = fusion::vector<char, char>();
  39. BOOST_TEST(test( " a b",
  40. phrase_match(char_ >> char_, space, t)
  41. ) && fusion::at_c<0>(t) == 'a' && fusion::at_c<1>(t) == 'b');
  42. }
  43. {
  44. char a = '\0', b = '\0', c = '\0';
  45. BOOST_TEST(test( "abc",
  46. char_[phx::ref(a) = _1] >> char_[phx::ref(b) = _1] >> char_[phx::ref(c) = _1]
  47. ) && a == 'a' && b == 'b' && c == 'c');
  48. BOOST_TEST(test( "abc",
  49. match(char_('a') >> char_('b') >> char_('c'))
  50. ));
  51. BOOST_TEST(test( " a b c",
  52. phrase_match(char_('a') >> char_('b') >> char_('c'), space)
  53. ));
  54. BOOST_TEST(!test( "abc",
  55. match(char_('a') >> char_('b') >> char_('d'))
  56. ));
  57. BOOST_TEST(!test( " a b c",
  58. phrase_match(char_('a') >> char_('b') >> char_('d'), space)
  59. ));
  60. fusion::vector<char, char, char> t;
  61. BOOST_TEST(test( "abc",
  62. match(char_ >> char_ >> char_, t)
  63. ) && fusion::at_c<0>(t) == 'a' && fusion::at_c<1>(t) == 'b' && fusion::at_c<2>(t) == 'c');
  64. t = fusion::vector<char, char, char>();
  65. BOOST_TEST(test( " a b c",
  66. phrase_match(char_ >> char_ >> char_, space, t)
  67. ) && fusion::at_c<0>(t) == 'a' && fusion::at_c<1>(t) == 'b' && fusion::at_c<2>(t) == 'c');
  68. t = fusion::vector<char, char, char>();
  69. BOOST_TEST(test( "abc",
  70. match(t)
  71. ) && fusion::at_c<0>(t) == 'a' && fusion::at_c<1>(t) == 'b' && fusion::at_c<2>(t) == 'c');
  72. t = fusion::vector<char, char, char>();
  73. BOOST_TEST(test( " a b c",
  74. phrase_match(t, space)
  75. ) && fusion::at_c<0>(t) == 'a' && fusion::at_c<1>(t) == 'b' && fusion::at_c<2>(t) == 'c');
  76. }
  77. return boost::report_errors();
  78. }