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