]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/karma/char1.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / spirit / test / karma / char1.cpp
1 // Copyright (c) 2001-2011 Hartmut Kaiser
2 //
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)
5
6 #include <boost/spirit/include/karma_char.hpp>
7
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>
11
12 #include <boost/phoenix/core.hpp>
13 #include <boost/phoenix/operator.hpp>
14 #include <boost/phoenix/statement.hpp>
15
16 #include "test.hpp"
17
18 using namespace spirit_test;
19
20 ///////////////////////////////////////////////////////////////////////////////
21 int
22 main()
23 {
24 using namespace boost::spirit;
25 using namespace boost::phoenix;
26
27 {
28 using namespace boost::spirit::ascii;
29
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'));
34
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"));
39
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'));
44
45 BOOST_TEST(test("x", char_('x')));
46 BOOST_TEST(!test("x", char_('y')));
47
48 BOOST_TEST(test("x", char_('x'), 'x'));
49 BOOST_TEST(!test("", char_('y'), 'x'));
50
51 BOOST_TEST(test("x", char_("x")));
52
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'));
56
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'));
60
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
64 #endif
65
66 BOOST_TEST(!test("", ~char_('x')));
67
68 BOOST_TEST(!test("", ~char_('x'), 'x'));
69 BOOST_TEST(test("x", ~char_('y'), 'x'));
70
71 BOOST_TEST(!test("", ~char_("x")));
72
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'));
76
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'));
80
81 BOOST_TEST(test("x", ~~char_('x')));
82 BOOST_TEST(!test("x", ~~char_('y')));
83
84 BOOST_TEST(test("x", ~~char_('x'), 'x'));
85 BOOST_TEST(!test("", ~~char_('y'), 'x'));
86
87 BOOST_TEST(test("x", ~~char_("x")));
88
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'));
92
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'));
96 }
97
98 {
99 using namespace boost::spirit::standard_wide;
100
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'));
105
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"));
110
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'));
115
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')));
120
121 BOOST_TEST(test(L"x", char_(L'x'), L'x'));
122 BOOST_TEST(!test(L"", char_('y'), L'x'));
123
124 BOOST_TEST(test(L"x", char_(L"x")));
125
126 BOOST_TEST(test("a", char_("a", "z"), 'a'));
127 BOOST_TEST(test(L"a", char_(L"a", L"z"), L'a'));
128
129 #if defined(KARMA_FAIL_COMPILATION)
130 BOOST_TEST(test("x", char_)); // anychar without a parameter doesn't make any sense
131 #endif
132
133 BOOST_TEST(!test(L"", ~char_('x')));
134 BOOST_TEST(!test(L"", ~char_(L'x')));
135
136 BOOST_TEST(!test(L"", ~char_(L'x'), L'x'));
137 BOOST_TEST(test(L"x", ~char_('y'), L'x'));
138
139 BOOST_TEST(!test(L"", ~char_(L"x")));
140 }
141
142 { // lazy chars
143 namespace ascii = boost::spirit::ascii;
144 namespace wide = boost::spirit::standard_wide;
145
146 using namespace boost::phoenix;
147
148 BOOST_TEST((test("x", ascii::char_(val('x')))));
149 BOOST_TEST((test(L"x", wide::char_(val(L'x')))));
150
151 BOOST_TEST((test("x", ascii::char_(val('x')), 'x')));
152 BOOST_TEST((test(L"x", wide::char_(val(L'x')), L'x')));
153
154 BOOST_TEST((!test("", ascii::char_(val('y')), 'x')));
155 BOOST_TEST((!test(L"", wide::char_(val(L'y')), L'x')));
156 }
157
158 // we can pass optionals as attributes to any generator
159 {
160 namespace ascii = boost::spirit::ascii;
161 namespace wide = boost::spirit::standard_wide;
162
163 boost::optional<char> v;
164 boost::optional<wchar_t> w;
165
166 BOOST_TEST(!test("", ascii::char_, v));
167 BOOST_TEST(!test(L"", wide::char_, w));
168
169 BOOST_TEST(!test("", ascii::char_('x'), v));
170 BOOST_TEST(!test(L"", wide::char_(L'x'), w));
171 }
172
173 return boost::report_errors();
174 }