]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/qi/no_case.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / spirit / test / qi / no_case.cpp
1 /*=============================================================================
2 Copyright (c) 2001-2011 Joel de Guzman
3 http://spirit.sourceforge.net/
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 // this file intentionally contains non-ascii characters
10 // boostinspect:noascii
11
12 #include <boost/detail/lightweight_test.hpp>
13 #include <boost/spirit/include/qi_char.hpp>
14 #include <boost/spirit/include/qi_string.hpp>
15 #include <boost/spirit/include/qi_directive.hpp>
16 #include <boost/spirit/include/qi_action.hpp>
17 #include <boost/spirit/include/phoenix_core.hpp>
18 #include <boost/spirit/include/phoenix_operator.hpp>
19
20 #include <iostream>
21 #include "test.hpp"
22
23 int
24 main()
25 {
26 using spirit_test::test;
27 using spirit_test::test_attr;
28 using boost::spirit::qi::lit;
29
30 {
31 using namespace boost::spirit::ascii;
32 BOOST_TEST(test("x", no_case[char_]));
33 BOOST_TEST(test("X", no_case[char_('x')]));
34 BOOST_TEST(test("X", no_case[char_('X')]));
35 BOOST_TEST(test("x", no_case[char_('X')]));
36 BOOST_TEST(test("x", no_case[char_('x')]));
37 BOOST_TEST(!test("z", no_case[char_('X')]));
38 BOOST_TEST(!test("z", no_case[char_('x')]));
39 BOOST_TEST(test("x", no_case[char_('a', 'z')]));
40 BOOST_TEST(test("X", no_case[char_('a', 'z')]));
41 BOOST_TEST(!test("a", no_case[char_('b', 'z')]));
42 BOOST_TEST(!test("z", no_case[char_('a', 'y')]));
43 }
44
45 {
46 using namespace boost::spirit::ascii;
47 BOOST_TEST(test("X", no_case['x']));
48 BOOST_TEST(test("X", no_case['X']));
49 BOOST_TEST(test("x", no_case['X']));
50 BOOST_TEST(test("x", no_case['x']));
51 BOOST_TEST(!test("z", no_case['X']));
52 BOOST_TEST(!test("z", no_case['x']));
53 }
54
55 // needed for VC7.1 only
56 #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
57 #pragma setlocale("french")
58 #endif
59 {
60 using namespace boost::spirit::iso8859_1;
61 BOOST_TEST(test("Á", no_case[char_('á')]));
62 }
63
64 {
65 using namespace boost::spirit::iso8859_1;
66 BOOST_TEST(test("X", no_case[char_("a-z")]));
67 BOOST_TEST(!test("1", no_case[char_("a-z")]));
68
69 BOOST_TEST(test("É", no_case[char_("å-ï")]));
70 BOOST_TEST(!test("ÿ", no_case[char_("å-ï")]));
71 }
72 #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
73 #pragma setlocale("")
74 #endif
75
76 {
77 using namespace boost::spirit::ascii;
78 BOOST_TEST(test("Bochi Bochi", no_case[lit("bochi bochi")]));
79 BOOST_TEST(test("BOCHI BOCHI", no_case[lit("bochi bochi")]));
80 BOOST_TEST(!test("Vavoo", no_case[lit("bochi bochi")]));
81 }
82
83 #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
84 #pragma setlocale("french")
85 #endif
86 {
87 using namespace boost::spirit::iso8859_1;
88 BOOST_TEST(test("Áá", no_case[lit("áÁ")]));
89 BOOST_TEST(test("áá", no_case[no_case[lit("áÁ")]]));
90 }
91 #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
92 #pragma setlocale("")
93 #endif
94
95 {
96 // should work!
97 using namespace boost::spirit::ascii;
98 BOOST_TEST(test("x", no_case[no_case[char_]]));
99 BOOST_TEST(test("x", no_case[no_case[char_('x')]]));
100 BOOST_TEST(test("yabadabadoo", no_case[no_case[lit("Yabadabadoo")]]));
101 }
102
103 {
104 using namespace boost::spirit::ascii;
105 BOOST_TEST(test("X", no_case[alnum]));
106 BOOST_TEST(test("6", no_case[alnum]));
107 BOOST_TEST(!test(":", no_case[alnum]));
108
109 BOOST_TEST(test("X", no_case[lower]));
110 BOOST_TEST(test("x", no_case[lower]));
111 BOOST_TEST(test("X", no_case[upper]));
112 BOOST_TEST(test("x", no_case[upper]));
113 BOOST_TEST(!test(":", no_case[lower]));
114 BOOST_TEST(!test(":", no_case[upper]));
115 }
116
117 {
118 using namespace boost::spirit::iso8859_1;
119 BOOST_TEST(test("X", no_case[alnum]));
120 BOOST_TEST(test("6", no_case[alnum]));
121 BOOST_TEST(!test(":", no_case[alnum]));
122
123 BOOST_TEST(test("X", no_case[lower]));
124 BOOST_TEST(test("x", no_case[lower]));
125 BOOST_TEST(test("X", no_case[upper]));
126 BOOST_TEST(test("x", no_case[upper]));
127 BOOST_TEST(!test(":", no_case[lower]));
128 BOOST_TEST(!test(":", no_case[upper]));
129 }
130
131 {
132 using namespace boost::spirit::standard;
133 BOOST_TEST(test("X", no_case[alnum]));
134 BOOST_TEST(test("6", no_case[alnum]));
135 BOOST_TEST(!test(":", no_case[alnum]));
136
137 BOOST_TEST(test("X", no_case[lower]));
138 BOOST_TEST(test("x", no_case[lower]));
139 BOOST_TEST(test("X", no_case[upper]));
140 BOOST_TEST(test("x", no_case[upper]));
141 BOOST_TEST(!test(":", no_case[lower]));
142 BOOST_TEST(!test(":", no_case[upper]));
143 }
144
145 {
146 // chsets
147 namespace standard = boost::spirit::standard;
148 namespace standard_wide = boost::spirit::standard_wide;
149
150 BOOST_TEST(test("x", standard::no_case[standard::char_("a-z")]));
151 BOOST_TEST(test("X", standard::no_case[standard::char_("a-z")]));
152 BOOST_TEST(test(L"X", standard_wide::no_case[standard_wide::char_(L"a-z")]));
153 BOOST_TEST(test(L"X", standard_wide::no_case[standard_wide::char_(L"X")]));
154 }
155
156 {
157 using namespace boost::spirit::standard;
158 std::string s("bochi bochi");
159 BOOST_TEST(test("Bochi Bochi", no_case[lit(s.c_str())]));
160 BOOST_TEST(test("Bochi Bochi", no_case[lit(s)]));
161 BOOST_TEST(test("Bochi Bochi", no_case[s.c_str()]));
162 BOOST_TEST(test("Bochi Bochi", no_case[s]));
163 }
164
165 { // lazy no_case chars
166
167 using namespace boost::spirit::ascii;
168
169 using boost::phoenix::val;
170 using boost::phoenix::ref;
171 using boost::spirit::_1;
172
173 BOOST_TEST((test("X", no_case[val('x')])));
174 BOOST_TEST((test("h", no_case[char_(val('a'), val('n'))])));
175 BOOST_TEST(test("0", no_case[char_(val("a-z0-9"))]));
176
177 char ch; // make sure lazy chars have an attribute
178 BOOST_TEST(test("x", no_case[char_(val('x'))][ref(ch) = _1]));
179 BOOST_TEST(ch == 'x');
180 }
181
182 { // lazy no_case lits
183
184 using namespace boost::spirit::ascii;
185 using boost::phoenix::val;
186
187 BOOST_TEST(test("Bochi Bochi", no_case[val("bochi bochi")]));
188 BOOST_TEST(test("BOCHI BOCHI", no_case[val("bochi bochi")]));
189 BOOST_TEST(!test("Vavoo", no_case[val("bochi bochi")]));
190 }
191
192 return boost::report_errors();
193 }