]>
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/spirit/include/karma_char.hpp>
8 #include <boost/spirit/include/karma_generate.hpp>
9 #include <boost/spirit/include/karma_action.hpp>
10 #include <boost/spirit/include/karma_phoenix_attributes.hpp>
12 #include <boost/phoenix/core.hpp>
13 #include <boost/phoenix/operator.hpp>
14 #include <boost/phoenix/statement.hpp>
18 using namespace spirit_test
;
20 ///////////////////////////////////////////////////////////////////////////////
24 using namespace boost::spirit
;
25 using namespace boost::phoenix
;
28 using namespace boost::spirit::ascii
;
30 BOOST_TEST(test("x", 'x'));
31 BOOST_TEST(test(L
"x", L
'x'));
32 BOOST_TEST(!test("x", 'y'));
33 BOOST_TEST(!test(L
"x", L
'y'));
35 BOOST_TEST(test("x", "x"));
36 BOOST_TEST(test(L
"x", L
"x"));
37 BOOST_TEST(!test("x", "y"));
38 BOOST_TEST(!test(L
"x", L
"y"));
40 BOOST_TEST(test("x", char_
, 'x'));
41 BOOST_TEST(test(L
"x", char_
, L
'x'));
42 BOOST_TEST(!test("x", char_
, 'y'));
43 BOOST_TEST(!test(L
"x", char_
, L
'y'));
45 BOOST_TEST(test("x", char_('x')));
46 BOOST_TEST(!test("x", char_('y')));
48 BOOST_TEST(test("x", char_('x'), 'x'));
49 BOOST_TEST(!test("", char_('y'), 'x'));
51 BOOST_TEST(test("x", char_("x")));
53 BOOST_TEST(test("a", char_('a', 'z'), 'a'));
54 BOOST_TEST(test("b", char_('a', 'z'), 'b'));
55 BOOST_TEST(!test("", char_('a', 'z'), 'A'));
57 BOOST_TEST(test("a", char_("a-z"), 'a'));
58 BOOST_TEST(test("b", char_("a-z"), 'b'));
59 BOOST_TEST(!test("", char_("a-z"), 'A'));
61 #if defined(KARMA_FAIL_COMPILATION)
62 BOOST_TEST(test("x", char_
)); // anychar without a parameter doesn't make any sense
63 BOOST_TEST(test("", char_('a', 'z'))); // char sets without attribute neither
66 BOOST_TEST(!test("", ~char_('x')));
68 BOOST_TEST(!test("", ~char_('x'), 'x'));
69 BOOST_TEST(test("x", ~char_('y'), 'x'));
71 BOOST_TEST(!test("", ~char_("x")));
73 BOOST_TEST(!test("", ~char_('a', 'z'), 'a'));
74 BOOST_TEST(!test("", ~char_('a', 'z'), 'b'));
75 BOOST_TEST(test("A", ~char_('a', 'z'), 'A'));
77 BOOST_TEST(!test("", ~char_("a-z"), 'a'));
78 BOOST_TEST(!test("", ~char_("a-z"), 'b'));
79 BOOST_TEST(test("A", ~char_("a-z"), 'A'));
81 BOOST_TEST(test("x", ~~char_('x')));
82 BOOST_TEST(!test("x", ~~char_('y')));
84 BOOST_TEST(test("x", ~~char_('x'), 'x'));
85 BOOST_TEST(!test("", ~~char_('y'), 'x'));
87 BOOST_TEST(test("x", ~~char_("x")));
89 BOOST_TEST(test("a", ~~char_('a', 'z'), 'a'));
90 BOOST_TEST(test("b", ~~char_('a', 'z'), 'b'));
91 BOOST_TEST(!test("", ~~char_('a', 'z'), 'A'));
93 BOOST_TEST(test("a", ~~char_("a-z"), 'a'));
94 BOOST_TEST(test("b", ~~char_("a-z"), 'b'));
95 BOOST_TEST(!test("", ~~char_("a-z"), 'A'));
99 using namespace boost::spirit::standard_wide
;
101 BOOST_TEST(test(L
"x", 'x'));
102 BOOST_TEST(test(L
"x", L
'x'));
103 BOOST_TEST(!test(L
"x", 'y'));
104 BOOST_TEST(!test(L
"x", L
'y'));
106 BOOST_TEST(test(L
"x", "x"));
107 BOOST_TEST(test(L
"x", L
"x"));
108 BOOST_TEST(!test(L
"x", "y"));
109 BOOST_TEST(!test(L
"x", L
"y"));
111 BOOST_TEST(test(L
"x", char_
, 'x'));
112 BOOST_TEST(test(L
"x", char_
, L
'x'));
113 BOOST_TEST(!test(L
"x", char_
, 'y'));
114 BOOST_TEST(!test(L
"x", char_
, L
'y'));
116 BOOST_TEST(test(L
"x", char_('x')));
117 BOOST_TEST(test(L
"x", char_(L
'x')));
118 BOOST_TEST(!test(L
"x", char_('y')));
119 BOOST_TEST(!test(L
"x", char_(L
'y')));
121 BOOST_TEST(test(L
"x", char_(L
'x'), L
'x'));
122 BOOST_TEST(!test(L
"", char_('y'), L
'x'));
124 BOOST_TEST(test(L
"x", char_(L
"x")));
126 BOOST_TEST(test("a", char_("a", "z"), 'a'));
127 BOOST_TEST(test(L
"a", char_(L
"a", L
"z"), L
'a'));
129 #if defined(KARMA_FAIL_COMPILATION)
130 BOOST_TEST(test("x", char_
)); // anychar without a parameter doesn't make any sense
133 BOOST_TEST(!test(L
"", ~char_('x')));
134 BOOST_TEST(!test(L
"", ~char_(L
'x')));
136 BOOST_TEST(!test(L
"", ~char_(L
'x'), L
'x'));
137 BOOST_TEST(test(L
"x", ~char_('y'), L
'x'));
139 BOOST_TEST(!test(L
"", ~char_(L
"x")));
143 namespace ascii
= boost::spirit::ascii
;
144 namespace wide
= boost::spirit::standard_wide
;
146 using namespace boost::phoenix
;
148 BOOST_TEST((test("x", ascii::char_(val('x')))));
149 BOOST_TEST((test(L
"x", wide::char_(val(L
'x')))));
151 BOOST_TEST((test("x", ascii::char_(val('x')), 'x')));
152 BOOST_TEST((test(L
"x", wide::char_(val(L
'x')), L
'x')));
154 BOOST_TEST((!test("", ascii::char_(val('y')), 'x')));
155 BOOST_TEST((!test(L
"", wide::char_(val(L
'y')), L
'x')));
158 // we can pass optionals as attributes to any generator
160 namespace ascii
= boost::spirit::ascii
;
161 namespace wide
= boost::spirit::standard_wide
;
163 boost::optional
<char> v
;
164 boost::optional
<wchar_t> w
;
166 BOOST_TEST(!test("", ascii::char_
, v
));
167 BOOST_TEST(!test(L
"", wide::char_
, w
));
169 BOOST_TEST(!test("", ascii::char_('x'), v
));
170 BOOST_TEST(!test(L
"", wide::char_(L
'x'), w
));
173 return boost::report_errors();