]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/spirit/test/karma/char1.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / spirit / test / karma / char1.cpp
CommitLineData
7c673cae
FG
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
7c673cae
FG
6#include <boost/config/warning_disable.hpp>
7#include <boost/detail/lightweight_test.hpp>
8
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>
13
14#include <boost/spirit/include/phoenix_core.hpp>
15#include <boost/spirit/include/phoenix_operator.hpp>
16#include <boost/spirit/include/phoenix_statement.hpp>
17
18#include "test.hpp"
19
20using namespace spirit_test;
21
22///////////////////////////////////////////////////////////////////////////////
23int
24main()
25{
26 using namespace boost::spirit;
27 using namespace boost::phoenix;
28
29 {
30 using namespace boost::spirit::ascii;
31
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'));
36
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"));
41
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'));
46
47 BOOST_TEST(test("x", char_('x')));
48 BOOST_TEST(!test("x", char_('y')));
49
50 BOOST_TEST(test("x", char_('x'), 'x'));
51 BOOST_TEST(!test("", char_('y'), 'x'));
52
53 BOOST_TEST(test("x", char_("x")));
54
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'));
58
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'));
62
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
66#endif
67
68 BOOST_TEST(!test("", ~char_('x')));
69
70 BOOST_TEST(!test("", ~char_('x'), 'x'));
71 BOOST_TEST(test("x", ~char_('y'), 'x'));
72
73 BOOST_TEST(!test("", ~char_("x")));
74
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'));
78
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'));
82
83 BOOST_TEST(test("x", ~~char_('x')));
84 BOOST_TEST(!test("x", ~~char_('y')));
85
86 BOOST_TEST(test("x", ~~char_('x'), 'x'));
87 BOOST_TEST(!test("", ~~char_('y'), 'x'));
88
89 BOOST_TEST(test("x", ~~char_("x")));
90
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'));
94
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'));
98 }
99
100 {
101 using namespace boost::spirit::standard_wide;
102
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'));
107
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"));
112
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'));
117
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')));
122
123 BOOST_TEST(test(L"x", char_(L'x'), L'x'));
124 BOOST_TEST(!test(L"", char_('y'), L'x'));
125
126 BOOST_TEST(test(L"x", char_(L"x")));
127
128 BOOST_TEST(test("a", char_("a", "z"), 'a'));
129 BOOST_TEST(test(L"a", char_(L"a", L"z"), L'a'));
130
131#if defined(KARMA_FAIL_COMPILATION)
132 BOOST_TEST(test("x", char_)); // anychar without a parameter doesn't make any sense
133#endif
134
135 BOOST_TEST(!test(L"", ~char_('x')));
136 BOOST_TEST(!test(L"", ~char_(L'x')));
137
138 BOOST_TEST(!test(L"", ~char_(L'x'), L'x'));
139 BOOST_TEST(test(L"x", ~char_('y'), L'x'));
140
141 BOOST_TEST(!test(L"", ~char_(L"x")));
142 }
143
144 { // lazy chars
145 namespace ascii = boost::spirit::ascii;
146 namespace wide = boost::spirit::standard_wide;
147
148 using namespace boost::phoenix;
149
150 BOOST_TEST((test("x", ascii::char_(val('x')))));
151 BOOST_TEST((test(L"x", wide::char_(val(L'x')))));
152
153 BOOST_TEST((test("x", ascii::char_(val('x')), 'x')));
154 BOOST_TEST((test(L"x", wide::char_(val(L'x')), L'x')));
155
156 BOOST_TEST((!test("", ascii::char_(val('y')), 'x')));
157 BOOST_TEST((!test(L"", wide::char_(val(L'y')), L'x')));
158 }
159
160 // we can pass optionals as attributes to any generator
161 {
162 namespace ascii = boost::spirit::ascii;
163 namespace wide = boost::spirit::standard_wide;
164
165 boost::optional<char> v;
166 boost::optional<wchar_t> w;
167
168 BOOST_TEST(!test("", ascii::char_, v));
169 BOOST_TEST(!test(L"", wide::char_, w));
170
171 BOOST_TEST(!test("", ascii::char_('x'), v));
172 BOOST_TEST(!test(L"", wide::char_(L'x'), w));
173 }
174
175 return boost::report_errors();
176}