]>
git.proxmox.com Git - ceph.git/blob - 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
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_UNICODE
11 #include <boost/spirit/include/qi_char_class.hpp>
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>
27 using spirit_test::test
;
28 using spirit_test::test_attr
;
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
));
55 // should fail, not assert!
56 // $$$ Removing this test for now $$$
57 // BOOST_TEST(!test("\265", space));
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
));
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
));
112 // test extended ASCII characters
113 BOOST_TEST(test("\xE9", alpha
));
114 BOOST_TEST(test("\xE9", lower
));
115 BOOST_TEST(!test("\xE9", upper
));
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
));
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
));
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
));
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
;
204 BOOST_STATIC_ASSERT((
206 attribute_of
<compile
<domain
, alpha_type
>::type
>::type
207 , unsigned char>::value
));
210 BOOST_TEST(test_attr("a", alpha
, attr
));
211 BOOST_TEST(attr
== 'a');
214 { // test attribute extraction
215 using boost::spirit::iso8859_1::alpha
;
216 using boost::spirit::iso8859_1::space
;
218 BOOST_TEST(test_attr(" a", alpha
, attr
, space
));
219 BOOST_TEST(attr
== 'a');
224 using namespace boost::spirit::ascii
;
225 using boost::phoenix::ref
;
226 using boost::spirit::_1
;
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');
235 return boost::report_errors();