]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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 | |
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'; | |
28 | int i = 0; | |
29 | BOOST_TEST(test( "a2", | |
20effc67 | 30 | (char_ >> int_)[(phx::ref(a) = _1, phx::ref(i) = _2)] |
7c673cae FG |
31 | ) && a == 'a' && i == 2); |
32 | ||
33 | fusion::vector<char, int> t; | |
34 | BOOST_TEST(test( "a2", | |
35 | match(char_ >> int_, t) | |
36 | ) && fusion::at_c<0>(t) == 'a' && fusion::at_c<1>(t) == 2); | |
37 | ||
38 | t = fusion::vector<char, int>(); | |
39 | BOOST_TEST(test( " a 2", | |
40 | phrase_match(char_ >> int_, space, t) | |
41 | ) && fusion::at_c<0>(t) == 'a' && fusion::at_c<1>(t) == 2); | |
42 | ||
43 | BOOST_TEST(!test( "a2", | |
44 | match(char_ >> alpha, t) | |
45 | )); | |
46 | BOOST_TEST(!test( " a 2", | |
47 | phrase_match(char_ >> alpha, space, t) | |
48 | )); | |
49 | } | |
50 | ||
51 | { | |
52 | // parse elements of a vector | |
53 | std::vector<char> v; | |
54 | BOOST_TEST(test( "abc", | |
55 | (*char_)[phx::ref(v) = _1] | |
56 | ) && 3 == v.size() && v[0] == 'a' && v[1] == 'b' && v[2] == 'c'); | |
57 | ||
58 | v.clear(); | |
59 | BOOST_TEST(test( "abc", | |
60 | match(*char_, v) | |
61 | ) && 3 == v.size() && v[0] == 'a' && v[1] == 'b' && v[2] == 'c'); | |
62 | ||
63 | v.clear(); | |
64 | BOOST_TEST(test( " a b c", | |
65 | phrase_match(*char_, space, v) | |
66 | ) && 3 == v.size() && v[0] == 'a' && v[1] == 'b' && v[2] == 'c'); | |
67 | ||
68 | v.clear(); | |
69 | BOOST_TEST(test( "abc", | |
70 | match(v) | |
71 | ) && 3 == v.size() && v[0] == 'a' && v[1] == 'b' && v[2] == 'c'); | |
72 | ||
73 | v.clear(); | |
74 | BOOST_TEST(test( " a b c", | |
75 | phrase_match(v, space) | |
76 | ) && 3 == v.size() && v[0] == 'a' && v[1] == 'b' && v[2] == 'c'); | |
77 | ||
78 | // parse a comma separated list of vector elements | |
79 | v.clear(); | |
80 | BOOST_TEST(test( "a,b,c", | |
81 | match(char_ % ',', v) | |
82 | ) && 3 == v.size() && v[0] == 'a' && v[1] == 'b' && v[2] == 'c'); | |
83 | ||
84 | v.clear(); | |
85 | BOOST_TEST(test( " a , b , c", | |
86 | phrase_match(char_ % ',', space, v) | |
87 | ) && 3 == v.size() && v[0] == 'a' && v[1] == 'b' && v[2] == 'c'); | |
88 | ||
89 | // output all elements of a list | |
90 | std::list<char> l; | |
91 | BOOST_TEST(test( "abc", | |
92 | match(*char_, l) | |
93 | ) && 3 == l.size() && is_list_ok(l)); | |
94 | ||
95 | l.clear(); | |
96 | BOOST_TEST(test( " a b c", | |
97 | phrase_match(*char_, space, l) | |
98 | ) && 3 == l.size() && is_list_ok(l)); | |
99 | ||
100 | l.clear(); | |
101 | BOOST_TEST(test( "abc", | |
102 | match(l) | |
103 | ) && 3 == l.size() && is_list_ok(l)); | |
104 | ||
105 | l.clear(); | |
106 | BOOST_TEST(test( " a b c", | |
107 | phrase_match(l, space) | |
108 | ) && 3 == l.size() && is_list_ok(l)); | |
109 | } | |
110 | ||
111 | return boost::report_errors(); | |
112 | } | |
113 |