]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/karma/char1.cpp
1 // Copyright (c) 2001-2011 Hartmut Kaiser
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)
6 #include <boost/config/warning_disable.hpp>
7 #include <boost/detail/lightweight_test.hpp>
9 #include <boost/spirit/include/karma_char.hpp>
10 #include <boost/spirit/include/karma_generate.hpp>
11 #include <boost/spirit/include/karma_action.hpp>
12 #include <boost/spirit/include/karma_phoenix_attributes.hpp>
14 #include <boost/spirit/include/phoenix_core.hpp>
15 #include <boost/spirit/include/phoenix_operator.hpp>
16 #include <boost/spirit/include/phoenix_statement.hpp>
20 using namespace spirit_test
;
22 ///////////////////////////////////////////////////////////////////////////////
26 using namespace boost::spirit
;
27 using namespace boost::phoenix
;
30 using namespace boost::spirit::ascii
;
32 BOOST_TEST(test("x", 'x'));
33 BOOST_TEST(test(L
"x", L
'x'));
34 BOOST_TEST(!test("x", 'y'));
35 BOOST_TEST(!test(L
"x", L
'y'));
37 BOOST_TEST(test("x", "x"));
38 BOOST_TEST(test(L
"x", L
"x"));
39 BOOST_TEST(!test("x", "y"));
40 BOOST_TEST(!test(L
"x", L
"y"));
42 BOOST_TEST(test("x", char_
, 'x'));
43 BOOST_TEST(test(L
"x", char_
, L
'x'));
44 BOOST_TEST(!test("x", char_
, 'y'));
45 BOOST_TEST(!test(L
"x", char_
, L
'y'));
47 BOOST_TEST(test("x", char_('x')));
48 BOOST_TEST(!test("x", char_('y')));
50 BOOST_TEST(test("x", char_('x'), 'x'));
51 BOOST_TEST(!test("", char_('y'), 'x'));
53 BOOST_TEST(test("x", char_("x")));
55 BOOST_TEST(test("a", char_('a', 'z'), 'a'));
56 BOOST_TEST(test("b", char_('a', 'z'), 'b'));
57 BOOST_TEST(!test("", char_('a', 'z'), 'A'));
59 BOOST_TEST(test("a", char_("a-z"), 'a'));
60 BOOST_TEST(test("b", char_("a-z"), 'b'));
61 BOOST_TEST(!test("", char_("a-z"), 'A'));
63 #if defined(KARMA_FAIL_COMPILATION)
64 BOOST_TEST(test("x", char_
)); // anychar without a parameter doesn't make any sense
65 BOOST_TEST(test("", char_('a', 'z'))); // char sets without attribute neither
68 BOOST_TEST(!test("", ~char_('x')));
70 BOOST_TEST(!test("", ~char_('x'), 'x'));
71 BOOST_TEST(test("x", ~char_('y'), 'x'));
73 BOOST_TEST(!test("", ~char_("x")));
75 BOOST_TEST(!test("", ~char_('a', 'z'), 'a'));
76 BOOST_TEST(!test("", ~char_('a', 'z'), 'b'));
77 BOOST_TEST(test("A", ~char_('a', 'z'), 'A'));
79 BOOST_TEST(!test("", ~char_("a-z"), 'a'));
80 BOOST_TEST(!test("", ~char_("a-z"), 'b'));
81 BOOST_TEST(test("A", ~char_("a-z"), 'A'));
83 BOOST_TEST(test("x", ~~char_('x')));
84 BOOST_TEST(!test("x", ~~char_('y')));
86 BOOST_TEST(test("x", ~~char_('x'), 'x'));
87 BOOST_TEST(!test("", ~~char_('y'), 'x'));
89 BOOST_TEST(test("x", ~~char_("x")));
91 BOOST_TEST(test("a", ~~char_('a', 'z'), 'a'));
92 BOOST_TEST(test("b", ~~char_('a', 'z'), 'b'));
93 BOOST_TEST(!test("", ~~char_('a', 'z'), 'A'));
95 BOOST_TEST(test("a", ~~char_("a-z"), 'a'));
96 BOOST_TEST(test("b", ~~char_("a-z"), 'b'));
97 BOOST_TEST(!test("", ~~char_("a-z"), 'A'));
101 using namespace boost::spirit::standard_wide
;
103 BOOST_TEST(test(L
"x", 'x'));
104 BOOST_TEST(test(L
"x", L
'x'));
105 BOOST_TEST(!test(L
"x", 'y'));
106 BOOST_TEST(!test(L
"x", L
'y'));
108 BOOST_TEST(test(L
"x", "x"));
109 BOOST_TEST(test(L
"x", L
"x"));
110 BOOST_TEST(!test(L
"x", "y"));
111 BOOST_TEST(!test(L
"x", L
"y"));
113 BOOST_TEST(test(L
"x", char_
, 'x'));
114 BOOST_TEST(test(L
"x", char_
, L
'x'));
115 BOOST_TEST(!test(L
"x", char_
, 'y'));
116 BOOST_TEST(!test(L
"x", char_
, L
'y'));
118 BOOST_TEST(test(L
"x", char_('x')));
119 BOOST_TEST(test(L
"x", char_(L
'x')));
120 BOOST_TEST(!test(L
"x", char_('y')));
121 BOOST_TEST(!test(L
"x", char_(L
'y')));
123 BOOST_TEST(test(L
"x", char_(L
'x'), L
'x'));
124 BOOST_TEST(!test(L
"", char_('y'), L
'x'));
126 BOOST_TEST(test(L
"x", char_(L
"x")));
128 BOOST_TEST(test("a", char_("a", "z"), 'a'));
129 BOOST_TEST(test(L
"a", char_(L
"a", L
"z"), L
'a'));
131 #if defined(KARMA_FAIL_COMPILATION)
132 BOOST_TEST(test("x", char_
)); // anychar without a parameter doesn't make any sense
135 BOOST_TEST(!test(L
"", ~char_('x')));
136 BOOST_TEST(!test(L
"", ~char_(L
'x')));
138 BOOST_TEST(!test(L
"", ~char_(L
'x'), L
'x'));
139 BOOST_TEST(test(L
"x", ~char_('y'), L
'x'));
141 BOOST_TEST(!test(L
"", ~char_(L
"x")));
145 namespace ascii
= boost::spirit::ascii
;
146 namespace wide
= boost::spirit::standard_wide
;
148 using namespace boost::phoenix
;
150 BOOST_TEST((test("x", ascii::char_(val('x')))));
151 BOOST_TEST((test(L
"x", wide::char_(val(L
'x')))));
153 BOOST_TEST((test("x", ascii::char_(val('x')), 'x')));
154 BOOST_TEST((test(L
"x", wide::char_(val(L
'x')), L
'x')));
156 BOOST_TEST((!test("", ascii::char_(val('y')), 'x')));
157 BOOST_TEST((!test(L
"", wide::char_(val(L
'y')), L
'x')));
160 // we can pass optionals as attributes to any generator
162 namespace ascii
= boost::spirit::ascii
;
163 namespace wide
= boost::spirit::standard_wide
;
165 boost::optional
<char> v
;
166 boost::optional
<wchar_t> w
;
168 BOOST_TEST(!test("", ascii::char_
, v
));
169 BOOST_TEST(!test(L
"", wide::char_
, w
));
171 BOOST_TEST(!test("", ascii::char_('x'), v
));
172 BOOST_TEST(!test(L
"", wide::char_(L
'x'), w
));
175 return boost::report_errors();