1 //  Copyright (c) 2001-2011 Hartmut Kaiser
2 //
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 #include <boost/config/warning_disable.hpp>
7 #include <boost/detail/lightweight_test.hpp>
8 
9 #include <boost/spirit/include/qi_char.hpp>
10 #include <boost/spirit/include/qi_operator.hpp>
11 #include <boost/spirit/include/qi_parse.hpp>
12 
13 #include "test_manip_attr.hpp"
14 
15 #if SPIRIT_ARGUMENTS_LIMIT < 10
16 # error SPIRIT_ARGUMENTS_LIMIT must be at least 10 to run the test
17 #endif
18 
19 using namespace spirit_test;
20 
21 ///////////////////////////////////////////////////////////////////////////////
main()22 int main()
23 {
24     using namespace boost::spirit;
25 
26     {
27         using namespace boost::spirit::ascii;
28 
29         BOOST_TEST(test("1", char_, '1'));
30         BOOST_TEST(test("12", char_ >> char_, '1', '2'));
31         BOOST_TEST(test("123", char_ >> char_ >> char_, '1', '2', '3'));
32         BOOST_TEST(test("1234"
33           , char_ >> char_ >> char_ >> char_
34           , '1', '2', '3', '4'));
35         BOOST_TEST(test("12345"
36           , char_ >> char_ >> char_ >> char_ >> char_
37           , '1', '2', '3', '4', '5'));
38         BOOST_TEST(test("123456"
39           , char_ >> char_ >> char_ >> char_ >> char_ >> char_
40           , '1', '2', '3', '4', '5', '6'));
41         BOOST_TEST(test("1234567"
42           , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
43           , '1', '2', '3', '4', '5', '6', '7'));
44         BOOST_TEST(test("12345678"
45           , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
46           , '1', '2', '3', '4', '5', '6', '7', '8'));
47         BOOST_TEST(test("123456789"
48           , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
49           , '1', '2', '3', '4', '5', '6', '7', '8', '9'));
50         BOOST_TEST(test("1234567890"
51           , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
52           , '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'));
53     }
54 
55     {
56         using namespace boost::spirit::ascii;
57 
58         BOOST_TEST(test_skipped(" 1 ", char_, space, '1'));
59         BOOST_TEST(test_skipped(" 1 2 "
60           , char_ >> char_, space, '1', '2'));
61         BOOST_TEST(test_skipped(" 1 2 3 "
62           , char_ >> char_ >> char_, space, '1', '2', '3'));
63         BOOST_TEST(test_skipped(" 1 2 3 4 "
64           , char_ >> char_ >> char_ >> char_
65           , space, '1', '2', '3', '4'));
66         BOOST_TEST(test_skipped(" 1 2 3 4 5 "
67           , char_ >> char_ >> char_ >> char_ >> char_
68           , space, '1', '2', '3', '4', '5'));
69         BOOST_TEST(test_skipped(" 1 2 3 4 5 6 "
70           , char_ >> char_ >> char_ >> char_ >> char_ >> char_
71           , space, '1', '2', '3', '4', '5', '6'));
72         BOOST_TEST(test_skipped(" 1 2 3 4 5 6 7 "
73           , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
74           , space, '1', '2', '3', '4', '5', '6', '7'));
75         BOOST_TEST(test_skipped(" 1 2 3 4 5 6 7 8 "
76           , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
77           , space, '1', '2', '3', '4', '5', '6', '7', '8'));
78         BOOST_TEST(test_skipped(" 1 2 3 4 5 6 7 8 9 "
79           , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
80           , space, '1', '2', '3', '4', '5', '6', '7', '8', '9'));
81         BOOST_TEST(test_skipped(" 1 2 3 4 5 6 7 8 9 0 "
82           , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
83           , space, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'));
84     }
85 
86     {
87         using namespace boost::spirit::ascii;
88         using boost::spirit::qi::skip_flag;
89 
90         BOOST_TEST(test_postskipped(" 1 ", char_, space
91           , skip_flag::postskip, '1'));
92         BOOST_TEST(test_postskipped(" 1 2 "
93           , char_ >> char_, space, skip_flag::postskip
94           , '1', '2'));
95         BOOST_TEST(test_postskipped(" 1 2 3 "
96           , char_ >> char_ >> char_, space
97           , skip_flag::postskip, '1', '2', '3'));
98         BOOST_TEST(test_postskipped(" 1 2 3 4 "
99           , char_ >> char_ >> char_ >> char_
100           , space, skip_flag::postskip, '1', '2', '3', '4'));
101         BOOST_TEST(test_postskipped(" 1 2 3 4 5 "
102           , char_ >> char_ >> char_ >> char_ >> char_
103           , space, skip_flag::postskip, '1', '2', '3', '4', '5'));
104         BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 "
105           , char_ >> char_ >> char_ >> char_ >> char_ >> char_
106           , space, skip_flag::postskip
107           , '1', '2', '3', '4', '5', '6'));
108         BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 7 "
109           , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
110           , space, skip_flag::postskip
111           , '1', '2', '3', '4', '5', '6', '7'));
112         BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 7 8 "
113           , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
114           , space, skip_flag::postskip
115           , '1', '2', '3', '4', '5', '6', '7', '8'));
116         BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 7 8 9 "
117           , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
118           , space, skip_flag::postskip
119           , '1', '2', '3', '4', '5', '6', '7', '8', '9'));
120         BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 7 8 9 0 "
121           , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
122           , space, skip_flag::postskip
123           , '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'));
124     }
125 
126     {
127         using namespace boost::spirit::ascii;
128         using boost::spirit::qi::skip_flag;
129 
130         BOOST_TEST(test_postskipped(" 1", char_, space
131           , skip_flag::dont_postskip, '1'));
132         BOOST_TEST(test_postskipped(" 1 2"
133           , char_ >> char_, space, skip_flag::dont_postskip
134           , '1', '2'));
135         BOOST_TEST(test_postskipped(" 1 2 3"
136           , char_ >> char_ >> char_, space
137           , skip_flag::dont_postskip, '1', '2', '3'));
138         BOOST_TEST(test_postskipped(" 1 2 3 4"
139           , char_ >> char_ >> char_ >> char_
140           , space, skip_flag::dont_postskip, '1', '2', '3', '4'));
141         BOOST_TEST(test_postskipped(" 1 2 3 4 5"
142           , char_ >> char_ >> char_ >> char_ >> char_
143           , space, skip_flag::dont_postskip, '1', '2', '3', '4', '5'));
144         BOOST_TEST(test_postskipped(" 1 2 3 4 5 6"
145           , char_ >> char_ >> char_ >> char_ >> char_ >> char_
146           , space, skip_flag::dont_postskip
147           , '1', '2', '3', '4', '5', '6'));
148         BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 7"
149           , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
150           , space, skip_flag::dont_postskip
151           , '1', '2', '3', '4', '5', '6', '7'));
152         BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 7 8"
153           , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
154           , space, skip_flag::dont_postskip
155           , '1', '2', '3', '4', '5', '6', '7', '8'));
156         BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 7 8 9"
157           , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
158           , space, skip_flag::dont_postskip
159           , '1', '2', '3', '4', '5', '6', '7', '8', '9'));
160         BOOST_TEST(test_postskipped(" 1 2 3 4 5 6 7 8 9 0"
161           , char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_ >> char_
162           , space, skip_flag::dont_postskip
163           , '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'));
164     }
165 
166     return boost::report_errors();
167 }
168 
169