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
20using namespace spirit_test;
21
22///////////////////////////////////////////////////////////////////////////////
23int 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

source code of boost/libs/spirit/test/qi/match_manip_attr.cpp