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