• 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 c = '\0';
28         BOOST_TEST(test( "a",
29             char_[phx::ref(c) = _1]
30         ) && c == 'a');
31 
32         c = '\0';
33         BOOST_TEST(test( "a",
34             match(char_[phx::ref(c) = _1])
35         ) && c == 'a');
36 
37         c = '\0';
38         BOOST_TEST(test( " a",
39             phrase_match(char_[phx::ref(c) = _1], space)
40         ) && c == 'a');
41 
42         c = '\0';
43         BOOST_TEST(test( "a",
44             match(char_, c)
45         ) && c == 'a');
46 
47         c = '\0';
48         BOOST_TEST(test( " a",
49             phrase_match(char_, space, c)
50         ) && c == 'a');
51     }
52 
53     {
54         ///////////////////////////////////////////////////////////////////////
55         typedef typed_stream<char> char_stream_type;
56         char_stream_type const char_stream = char_stream_type();
57 
58         typedef typed_stream<int> int_stream_type;
59         int_stream_type const int_stream = int_stream_type();
60 
61         ///////////////////////////////////////////////////////////////////////
62         char c = '\0';
63         BOOST_TEST(test( "a",
64             char_stream[phx::ref(c) = _1]
65         ) && c == 'a');
66 
67         c = '\0';
68         BOOST_TEST(test( "a",
69             match(char_stream[phx::ref(c) = _1])
70         ) && c == 'a');
71 
72         c = '\0';
73         BOOST_TEST(test( " a",
74             phrase_match(char_stream[phx::ref(c) = _1], space)
75         ) && c == 'a');
76 
77         int i = 0;
78         BOOST_TEST(test( "42",
79             int_stream[phx::ref(i) = _1]
80         ) && i == 42);
81 
82         i = 0;
83         BOOST_TEST(test( "42",
84             match(int_stream[phx::ref(i) = _1])
85         ) && i == 42);
86 
87         i = 0;
88         BOOST_TEST(test( " 42",
89             phrase_match(int_stream[phx::ref(i) = _1], space)
90         ) && i == 42);
91 
92         ///////////////////////////////////////////////////////////////////////
93         c = '\0';
94         BOOST_TEST(test( "a",
95             match(stream, c)
96         ) && c == 'a');
97 
98         c = '\0';
99         BOOST_TEST(test( " a",
100             phrase_match(stream, space, c)
101         ) && c == 'a');
102 
103         i = 0;
104         BOOST_TEST(test( "42",
105             match(stream, i)
106         ) && i == 42);
107 
108         i = 0;
109         BOOST_TEST(test( " 42",
110             phrase_match(stream, space, i)
111         ) && i == 42);
112     }
113 
114     return boost::report_errors();
115 }
116 
117