]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/qi/char_class.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / spirit / test / qi / char_class.cpp
1 /*=============================================================================
2 Copyright (c) 2001-2010 Joel de Guzman
3 Copyright (c) 2001-2010 Hartmut Kaiser
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 #define BOOST_SPIRIT_UNICODE
10
11 #include <boost/spirit/include/qi_char_class.hpp>
12
13 #include <boost/spirit/include/qi_action.hpp>
14 #include <boost/spirit/include/support_argument.hpp>
15 #include <boost/spirit/include/support_attributes.hpp>
16 #include <boost/phoenix/core.hpp>
17 #include <boost/phoenix/operator.hpp>
18 #include <boost/type_traits/is_same.hpp>
19 #include <boost/static_assert.hpp>
20
21 #include <iostream>
22 #include "test.hpp"
23
24 int
25 main()
26 {
27 using spirit_test::test;
28 using spirit_test::test_attr;
29
30 {
31 using namespace boost::spirit::ascii;
32 BOOST_TEST(test("1", alnum));
33 BOOST_TEST(!test(" ", alnum));
34 BOOST_TEST(!test("1", alpha));
35 BOOST_TEST(test("x", alpha));
36 BOOST_TEST(test(" ", blank));
37 BOOST_TEST(!test("x", blank));
38 BOOST_TEST(test("1", digit));
39 BOOST_TEST(!test("x", digit));
40 BOOST_TEST(test("a", lower));
41 BOOST_TEST(!test("A", lower));
42 BOOST_TEST(test("!", punct));
43 BOOST_TEST(!test("x", punct));
44 BOOST_TEST(test(" ", space));
45 BOOST_TEST(test("\n", space));
46 BOOST_TEST(test("\r", space));
47 BOOST_TEST(test("\t", space));
48 BOOST_TEST(test("A", upper));
49 BOOST_TEST(!test("a", upper));
50 BOOST_TEST(test("A", xdigit));
51 BOOST_TEST(test("0", xdigit));
52 BOOST_TEST(test("f", xdigit));
53 BOOST_TEST(!test("g", xdigit));
54
55 // should fail, not assert!
56 // $$$ Removing this test for now $$$
57 // BOOST_TEST(!test("\265", space));
58 }
59
60 {
61 using namespace boost::spirit::ascii;
62 BOOST_TEST(!test("1", ~alnum));
63 BOOST_TEST(test(" ", ~alnum));
64 BOOST_TEST(test("1", ~alpha));
65 BOOST_TEST(!test("x", ~alpha));
66 BOOST_TEST(!test(" ", ~blank));
67 BOOST_TEST(test("x", ~blank));
68 BOOST_TEST(!test("1", ~digit));
69 BOOST_TEST(test("x", ~digit));
70 BOOST_TEST(!test("a", ~lower));
71 BOOST_TEST(test("A", ~lower));
72 BOOST_TEST(!test("!", ~punct));
73 BOOST_TEST(test("x", ~punct));
74 BOOST_TEST(!test(" ", ~space));
75 BOOST_TEST(!test("\n", ~space));
76 BOOST_TEST(!test("\r", ~space));
77 BOOST_TEST(!test("\t", ~space));
78 BOOST_TEST(!test("A", ~upper));
79 BOOST_TEST(test("a", ~upper));
80 BOOST_TEST(!test("A", ~xdigit));
81 BOOST_TEST(!test("0", ~xdigit));
82 BOOST_TEST(!test("f", ~xdigit));
83 BOOST_TEST(test("g", ~xdigit));
84 }
85
86 {
87 // we use the hoisted qi namespace this time
88 using namespace boost::spirit::qi::iso8859_1;
89 BOOST_TEST(test("1", alnum));
90 BOOST_TEST(!test(" ", alnum));
91 BOOST_TEST(!test("1", alpha));
92 BOOST_TEST(test("x", alpha));
93 BOOST_TEST(test(" ", blank));
94 BOOST_TEST(!test("x", blank));
95 BOOST_TEST(test("1", digit));
96 BOOST_TEST(!test("x", digit));
97 BOOST_TEST(test("a", lower));
98 BOOST_TEST(!test("A", lower));
99 BOOST_TEST(test("!", punct));
100 BOOST_TEST(!test("x", punct));
101 BOOST_TEST(test(" ", space));
102 BOOST_TEST(test("\n", space));
103 BOOST_TEST(test("\r", space));
104 BOOST_TEST(test("\t", space));
105 BOOST_TEST(test("A", upper));
106 BOOST_TEST(!test("a", upper));
107 BOOST_TEST(test("A", xdigit));
108 BOOST_TEST(test("0", xdigit));
109 BOOST_TEST(test("f", xdigit));
110 BOOST_TEST(!test("g", xdigit));
111
112 // test extended ASCII characters
113 BOOST_TEST(test("\xE9", alpha));
114 BOOST_TEST(test("\xE9", lower));
115 BOOST_TEST(!test("\xE9", upper));
116 }
117
118 {
119 using namespace boost::spirit::standard;
120 BOOST_TEST(test("1", alnum));
121 BOOST_TEST(!test(" ", alnum));
122 BOOST_TEST(!test("1", alpha));
123 BOOST_TEST(test("x", alpha));
124 BOOST_TEST(test(" ", blank));
125 BOOST_TEST(!test("x", blank));
126 BOOST_TEST(test("1", digit));
127 BOOST_TEST(!test("x", digit));
128 BOOST_TEST(test("a", lower));
129 BOOST_TEST(!test("A", lower));
130 BOOST_TEST(test("!", punct));
131 BOOST_TEST(!test("x", punct));
132 BOOST_TEST(test(" ", space));
133 BOOST_TEST(test("\n", space));
134 BOOST_TEST(test("\r", space));
135 BOOST_TEST(test("\t", space));
136 BOOST_TEST(test("A", upper));
137 BOOST_TEST(!test("a", upper));
138 BOOST_TEST(test("A", xdigit));
139 BOOST_TEST(test("0", xdigit));
140 BOOST_TEST(test("f", xdigit));
141 BOOST_TEST(!test("g", xdigit));
142 BOOST_TEST(!test("\xF1", print));
143 }
144
145 {
146 using namespace boost::spirit::standard_wide;
147 BOOST_TEST(test(L"1", alnum));
148 BOOST_TEST(!test(L" ", alnum));
149 BOOST_TEST(!test(L"1", alpha));
150 BOOST_TEST(test(L"x", alpha));
151 BOOST_TEST(test(L" ", blank));
152 BOOST_TEST(!test(L"x", blank));
153 BOOST_TEST(test(L"1", digit));
154 BOOST_TEST(!test(L"x", digit));
155 BOOST_TEST(test(L"a", lower));
156 BOOST_TEST(!test(L"A", lower));
157 BOOST_TEST(test(L"!", punct));
158 BOOST_TEST(!test(L"x", punct));
159 BOOST_TEST(test(L" ", space));
160 BOOST_TEST(test(L"\n", space));
161 BOOST_TEST(test(L"\r", space));
162 BOOST_TEST(test(L"\t", space));
163 BOOST_TEST(test(L"A", upper));
164 BOOST_TEST(!test(L"a", upper));
165 BOOST_TEST(test(L"A", xdigit));
166 BOOST_TEST(test(L"0", xdigit));
167 BOOST_TEST(test(L"f", xdigit));
168 BOOST_TEST(!test(L"g", xdigit));
169 }
170
171 {
172 using namespace boost::spirit::unicode;
173 BOOST_TEST(test(L"1", alnum));
174 BOOST_TEST(!test(L" ", alnum));
175 BOOST_TEST(!test(L"1", alpha));
176 BOOST_TEST(test(L"x", alpha));
177 BOOST_TEST(test(L" ", blank));
178 BOOST_TEST(!test(L"x", blank));
179 BOOST_TEST(test(L"1", digit));
180 BOOST_TEST(!test(L"x", digit));
181 BOOST_TEST(test(L"a", lower));
182 BOOST_TEST(!test(L"A", lower));
183 BOOST_TEST(test(L"!", punct));
184 BOOST_TEST(!test(L"x", punct));
185 BOOST_TEST(test(L" ", space));
186 BOOST_TEST(test(L"\n", space));
187 BOOST_TEST(test(L"\r", space));
188 BOOST_TEST(test(L"\t", space));
189 BOOST_TEST(test(L"A", upper));
190 BOOST_TEST(!test(L"a", upper));
191 BOOST_TEST(test(L"A", xdigit));
192 BOOST_TEST(test(L"0", xdigit));
193 BOOST_TEST(test(L"f", xdigit));
194 BOOST_TEST(!test(L"g", xdigit));
195 }
196
197 { // test attribute extraction
198 using boost::spirit::qi::domain;
199 using boost::spirit::traits::attribute_of;
200 using boost::spirit::iso8859_1::alpha;
201 using boost::spirit::iso8859_1::alpha_type;
202 using boost::spirit::result_of::compile;
203
204 BOOST_STATIC_ASSERT((
205 boost::is_same<
206 attribute_of<compile<domain, alpha_type>::type>::type
207 , unsigned char>::value));
208
209 int attr = 0;
210 BOOST_TEST(test_attr("a", alpha, attr));
211 BOOST_TEST(attr == 'a');
212 }
213
214 { // test attribute extraction
215 using boost::spirit::iso8859_1::alpha;
216 using boost::spirit::iso8859_1::space;
217 char attr = 0;
218 BOOST_TEST(test_attr(" a", alpha, attr, space));
219 BOOST_TEST(attr == 'a');
220 }
221
222 { // test action
223
224 using namespace boost::spirit::ascii;
225 using boost::phoenix::ref;
226 using boost::spirit::_1;
227 char ch;
228
229 BOOST_TEST(test("x", alnum[ref(ch) = _1]));
230 BOOST_TEST(ch == 'x');
231 BOOST_TEST(test(" A", alnum[ref(ch) = _1], space));
232 BOOST_TEST(ch == 'A');
233 }
234
235 return boost::report_errors();
236 }