]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/x3/char_class.cpp
1 /*=============================================================================
2 Copyright (c) 2001-2015 Joel de Guzman
3 Copyright (c) 2001-2010 Hartmut Kaiser
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 =============================================================================*/
9 #define BOOST_SPIRIT_X3_UNICODE
11 #include <boost/detail/lightweight_test.hpp>
12 #include <boost/spirit/home/x3.hpp>
13 #include <boost/type_traits/is_same.hpp>
21 using spirit_test::test
;
22 using spirit_test::test_failure
;
23 using spirit_test::test_attr
;
25 using boost::spirit::x3::unused_type
;
28 using namespace boost::spirit::x3::ascii
;
29 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(alnum
);
30 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(alpha
);
31 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(digit
);
32 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(xdigit
);
33 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(cntrl
);
34 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(graph
);
35 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(lower
);
36 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(print
);
37 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(punct
);
38 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(space
);
39 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(blank
);
40 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(upper
);
41 BOOST_TEST(test("1", alnum
));
42 BOOST_TEST(!test(" ", alnum
));
43 BOOST_TEST(!test("1", alpha
));
44 BOOST_TEST(test("x", alpha
));
45 BOOST_TEST(test(" ", blank
));
46 BOOST_TEST(!test("x", blank
));
47 BOOST_TEST(test("1", digit
));
48 BOOST_TEST(!test("x", digit
));
49 BOOST_TEST(test("a", lower
));
50 BOOST_TEST(!test("A", lower
));
51 BOOST_TEST(test("!", punct
));
52 BOOST_TEST(!test("x", punct
));
53 BOOST_TEST(test(" ", space
));
54 BOOST_TEST(test("\n", space
));
55 BOOST_TEST(test("\r", space
));
56 BOOST_TEST(test("\t", space
));
57 BOOST_TEST(test("A", upper
));
58 BOOST_TEST(!test("a", upper
));
59 BOOST_TEST(test("A", xdigit
));
60 BOOST_TEST(test("0", xdigit
));
61 BOOST_TEST(test("f", xdigit
));
62 BOOST_TEST(!test("g", xdigit
));
66 using namespace boost::spirit::x3::ascii
;
67 BOOST_TEST(!test("1", ~alnum
));
68 BOOST_TEST(test(" ", ~alnum
));
69 BOOST_TEST(test("1", ~alpha
));
70 BOOST_TEST(!test("x", ~alpha
));
71 BOOST_TEST(!test(" ", ~blank
));
72 BOOST_TEST(test("x", ~blank
));
73 BOOST_TEST(!test("1", ~digit
));
74 BOOST_TEST(test("x", ~digit
));
75 BOOST_TEST(!test("a", ~lower
));
76 BOOST_TEST(test("A", ~lower
));
77 BOOST_TEST(!test("!", ~punct
));
78 BOOST_TEST(test("x", ~punct
));
79 BOOST_TEST(!test(" ", ~space
));
80 BOOST_TEST(!test("\n", ~space
));
81 BOOST_TEST(!test("\r", ~space
));
82 BOOST_TEST(!test("\t", ~space
));
83 BOOST_TEST(!test("A", ~upper
));
84 BOOST_TEST(test("a", ~upper
));
85 BOOST_TEST(!test("A", ~xdigit
));
86 BOOST_TEST(!test("0", ~xdigit
));
87 BOOST_TEST(!test("f", ~xdigit
));
88 BOOST_TEST(test("g", ~xdigit
));
92 using namespace boost::spirit::x3::iso8859_1
;
93 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(alnum
);
94 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(alpha
);
95 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(digit
);
96 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(xdigit
);
97 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(cntrl
);
98 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(graph
);
99 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(lower
);
100 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(print
);
101 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(punct
);
102 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(space
);
103 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(blank
);
104 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(upper
);
105 BOOST_TEST(test("1", alnum
));
106 BOOST_TEST(!test(" ", alnum
));
107 BOOST_TEST(!test("1", alpha
));
108 BOOST_TEST(test("x", alpha
));
109 BOOST_TEST(test(" ", blank
));
110 BOOST_TEST(!test("x", blank
));
111 BOOST_TEST(test("1", digit
));
112 BOOST_TEST(!test("x", digit
));
113 BOOST_TEST(test("a", lower
));
114 BOOST_TEST(!test("A", lower
));
115 BOOST_TEST(test("!", punct
));
116 BOOST_TEST(!test("x", punct
));
117 BOOST_TEST(test(" ", space
));
118 BOOST_TEST(test("\n", space
));
119 BOOST_TEST(test("\r", space
));
120 BOOST_TEST(test("\t", space
));
121 BOOST_TEST(test("A", upper
));
122 BOOST_TEST(!test("a", upper
));
123 BOOST_TEST(test("A", xdigit
));
124 BOOST_TEST(test("0", xdigit
));
125 BOOST_TEST(test("f", xdigit
));
126 BOOST_TEST(!test("g", xdigit
));
128 // test extended ASCII characters
129 BOOST_TEST(test("\xE9", alpha
));
130 BOOST_TEST(test("\xE9", lower
));
131 BOOST_TEST(!test("\xE9", upper
));
135 using namespace boost::spirit::x3::standard
;
136 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(alnum
);
137 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(alpha
);
138 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(digit
);
139 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(xdigit
);
140 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(cntrl
);
141 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(graph
);
142 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(lower
);
143 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(print
);
144 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(punct
);
145 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(space
);
146 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(blank
);
147 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(upper
);
148 BOOST_TEST(test("1", alnum
));
149 BOOST_TEST(!test(" ", alnum
));
150 BOOST_TEST(!test("1", alpha
));
151 BOOST_TEST(test("x", alpha
));
152 BOOST_TEST(test(" ", blank
));
153 BOOST_TEST(!test("x", blank
));
154 BOOST_TEST(test("1", digit
));
155 BOOST_TEST(!test("x", digit
));
156 BOOST_TEST(test("a", lower
));
157 BOOST_TEST(!test("A", lower
));
158 BOOST_TEST(test("!", punct
));
159 BOOST_TEST(!test("x", punct
));
160 BOOST_TEST(test(" ", space
));
161 BOOST_TEST(test("\n", space
));
162 BOOST_TEST(test("\r", space
));
163 BOOST_TEST(test("\t", space
));
164 BOOST_TEST(test("A", upper
));
165 BOOST_TEST(!test("a", upper
));
166 BOOST_TEST(test("A", xdigit
));
167 BOOST_TEST(test("0", xdigit
));
168 BOOST_TEST(test("f", xdigit
));
169 BOOST_TEST(!test("g", xdigit
));
173 using namespace boost::spirit::x3::standard_wide
;
174 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(alnum
);
175 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(alpha
);
176 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(digit
);
177 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(xdigit
);
178 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(cntrl
);
179 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(graph
);
180 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(lower
);
181 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(print
);
182 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(punct
);
183 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(space
);
184 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(blank
);
185 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(upper
);
186 BOOST_TEST(test(L
"1", alnum
));
187 BOOST_TEST(!test(L
" ", alnum
));
188 BOOST_TEST(!test(L
"1", alpha
));
189 BOOST_TEST(test(L
"x", alpha
));
190 BOOST_TEST(test(L
" ", blank
));
191 BOOST_TEST(!test(L
"x", blank
));
192 BOOST_TEST(test(L
"1", digit
));
193 BOOST_TEST(!test(L
"x", digit
));
194 BOOST_TEST(test(L
"a", lower
));
195 BOOST_TEST(!test(L
"A", lower
));
196 BOOST_TEST(test(L
"!", punct
));
197 BOOST_TEST(!test(L
"x", punct
));
198 BOOST_TEST(test(L
" ", space
));
199 BOOST_TEST(test(L
"\n", space
));
200 BOOST_TEST(test(L
"\r", space
));
201 BOOST_TEST(test(L
"\t", space
));
202 BOOST_TEST(test(L
"A", upper
));
203 BOOST_TEST(!test(L
"a", upper
));
204 BOOST_TEST(test(L
"A", xdigit
));
205 BOOST_TEST(test(L
"0", xdigit
));
206 BOOST_TEST(test(L
"f", xdigit
));
207 BOOST_TEST(!test(L
"g", xdigit
));
211 using namespace boost::spirit::x3::unicode
;
212 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(alnum
);
213 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(alpha
);
214 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(digit
);
215 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(xdigit
);
216 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(cntrl
);
217 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(graph
);
218 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(lower
);
219 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(print
);
220 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(punct
);
221 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(space
);
222 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(blank
);
223 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(upper
);
224 BOOST_TEST(test(L
"1", alnum
));
225 BOOST_TEST(!test(L
" ", alnum
));
226 BOOST_TEST(!test(L
"1", alpha
));
227 BOOST_TEST(test(L
"x", alpha
));
228 BOOST_TEST(test(L
" ", blank
));
229 BOOST_TEST(!test(L
"x", blank
));
230 BOOST_TEST(test(L
"1", digit
));
231 BOOST_TEST(!test(L
"x", digit
));
232 BOOST_TEST(test(L
"a", lower
));
233 BOOST_TEST(!test(L
"A", lower
));
234 BOOST_TEST(test(L
"!", punct
));
235 BOOST_TEST(!test(L
"x", punct
));
236 BOOST_TEST(test(L
" ", space
));
237 BOOST_TEST(test(L
"\n", space
));
238 BOOST_TEST(test(L
"\r", space
));
239 BOOST_TEST(test(L
"\t", space
));
240 BOOST_TEST(test(L
"A", upper
));
241 BOOST_TEST(!test(L
"a", upper
));
242 BOOST_TEST(test(L
"A", xdigit
));
243 BOOST_TEST(test(L
"0", xdigit
));
244 BOOST_TEST(test(L
"f", xdigit
));
245 BOOST_TEST(!test(L
"g", xdigit
));
247 BOOST_TEST(test(L
"A", alphabetic
));
248 BOOST_TEST(test(L
"9", decimal_number
));
249 BOOST_TEST(test(L
"\u2800", braille
));
250 BOOST_TEST(!test(L
" ", braille
));
251 BOOST_TEST(test(L
" ", ~braille
));
252 // $$$ TODO $$$ Add more unicode tests
255 { // test invalid unicode literals
256 using namespace boost::spirit::x3::unicode
;
258 auto const invalid_unicode
= char32_t
{0x7FFFFFFF};
259 auto const input
= boost::u32string_view(&invalid_unicode
, 1);
261 BOOST_TEST(test_failure(input
, char_
));
263 // force unicode category lookup
264 // related issue: https://github.com/boostorg/spirit/issues/524
265 BOOST_TEST(test_failure(input
, alpha
));
266 BOOST_TEST(test_failure(input
, upper
));
267 BOOST_TEST(test_failure(input
, lower
));
270 { // test attribute extraction
271 using boost::spirit::x3::traits::attribute_of
;
272 using boost::spirit::x3::iso8859_1::alpha
;
273 using boost::spirit::x3::iso8859_1::alpha_type
;
277 attribute_of
<alpha_type
, unused_type
>::type
278 , unsigned char>::value
279 , "Wrong attribute type!"
283 BOOST_TEST(test_attr("a", alpha
, attr
));
284 BOOST_TEST(attr
== 'a');
287 { // test attribute extraction
288 using boost::spirit::x3::iso8859_1::alpha
;
289 using boost::spirit::x3::iso8859_1::space
;
291 BOOST_TEST(test_attr(" a", alpha
, attr
, space
));
292 BOOST_TEST(attr
== 'a');
296 using namespace boost::spirit::x3::ascii
;
297 using boost::spirit::x3::_attr
;
299 auto f
= [&](auto& ctx
){ ch
= _attr(ctx
); };
301 BOOST_TEST(test("x", alnum
[f
]));
302 BOOST_TEST(ch
== 'x');
303 BOOST_TEST(test(" A", alnum
[f
], space
));
304 BOOST_TEST(ch
== 'A');
307 return boost::report_errors();