]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/karma/lit.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / spirit / test / karma / lit.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/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_string.hpp>
11 #include <boost/spirit/include/karma_generate.hpp>
12 #include <boost/spirit/include/karma_action.hpp>
13 #include <boost/spirit/include/support_argument.hpp>
14 #include <boost/spirit/include/phoenix_core.hpp>
15 #include <boost/spirit/include/phoenix_operator.hpp>
16
17 #include "test.hpp"
18
19 using namespace spirit_test;
20
21 ///////////////////////////////////////////////////////////////////////////////
22 int
23 main()
24 {
25 using namespace boost::spirit;
26
27 {
28 using namespace boost::spirit::ascii;
29
30 BOOST_TEST(test("a", lit('a')));
31 BOOST_TEST(!test("a", lit('b')));
32
33 BOOST_TEST(test("abc", "abc"));
34 BOOST_TEST(!test("abcd", "abc"));
35
36 BOOST_TEST(test("abc", lit("abc")));
37 BOOST_TEST(!test("abcd", lit("abc")));
38
39 BOOST_TEST(test("abc", string, "abc"));
40 BOOST_TEST(!test("abcd", string, "abc"));
41
42 BOOST_TEST(test("abc", string("abc")));
43 BOOST_TEST(!test("abcd", string("abc")));
44
45 BOOST_TEST(test("abc", string("abc"), "abc"));
46 BOOST_TEST(!test("", string("abc"), "abcd"));
47 BOOST_TEST(!test("", string("abcd"), "abc"));
48 BOOST_TEST(!test("", string("abc"), "abcd")); // don't match prefixes only
49 }
50
51 {
52 using namespace boost::spirit::ascii;
53
54 std::string str("abc");
55 BOOST_TEST(test("abc", lit(str)));
56 BOOST_TEST(!test("abcd", lit(str)));
57
58 BOOST_TEST(test("abc", string(str)));
59 BOOST_TEST(!test("abcd", string(str)));
60
61 BOOST_TEST(test("abc", string, str));
62 BOOST_TEST(!test("abcd", string, str));
63
64 BOOST_TEST(test("abc", str));
65 BOOST_TEST(!test("abcd", str));
66 }
67
68 {
69 using namespace boost::spirit::standard_wide;
70
71 std::basic_string<wchar_t> wstr(L"abc");
72 BOOST_TEST(test(L"abc", lit(wstr)));
73 BOOST_TEST(!test(L"abcd", lit(wstr)));
74
75 BOOST_TEST(test(L"abc", string, wstr));
76 BOOST_TEST(!test(L"abcd", string, wstr));
77
78 BOOST_TEST(test(L"abc", wstr));
79 BOOST_TEST(!test(L"abcd", wstr));
80 }
81
82 {
83 using namespace boost::spirit::ascii;
84
85 BOOST_TEST(test(L"a", lit(L'a')));
86 BOOST_TEST(!test(L"a", lit(L'b')));
87
88 BOOST_TEST(test(L"abc", L"abc"));
89 BOOST_TEST(test(L"abc", "abc"));
90 BOOST_TEST(!test(L"abcd", L"abc"));
91
92 BOOST_TEST(test(L"abc", lit(L"abc")));
93 BOOST_TEST(!test(L"abcd", lit(L"abc")));
94
95 BOOST_TEST(test(L"abc", string(L"abc")));
96 BOOST_TEST(!test(L"abcd", string(L"abc")));
97
98 BOOST_TEST(test(L"abc", string, L"abc"));
99 BOOST_TEST(!test(L"abcd", string, L"abc"));
100
101 BOOST_TEST(test(L"abc", string, "abc"));
102 BOOST_TEST(!test(L"abcd", string, "abc"));
103 }
104
105 {
106 using namespace boost::spirit::karma;
107
108 const char test_data[] = "abc\x00s";
109 const std::string str(test_data, sizeof(test_data) - 1);
110
111 BOOST_TEST(test(str, lit(str)));
112 BOOST_TEST(!test("abc", lit(str)));
113
114 BOOST_TEST(test(str, string(str)));
115 BOOST_TEST(!test("abc", string(str)));
116
117 BOOST_TEST(test(str, string, str));
118 BOOST_TEST(!test("abc", string, str));
119
120 BOOST_TEST(test(str, str));
121 BOOST_TEST(!test("abc", str));
122 }
123
124 {
125 using namespace boost::spirit::ascii;
126
127 BOOST_TEST(test_delimited("a ", lit('a'), ' '));
128 BOOST_TEST(!test_delimited("a ", lit('b'), ' '));
129
130 BOOST_TEST(test_delimited("abc ", "abc", ' '));
131 BOOST_TEST(!test_delimited("abcd ", "abc", ' '));
132
133 BOOST_TEST(test_delimited("abc ", lit("abc"), ' '));
134 BOOST_TEST(!test_delimited("abcd ", lit("abc"), ' '));
135
136 BOOST_TEST(test_delimited("abc ", string, "abc", ' '));
137 BOOST_TEST(!test_delimited("abcd ", string, "abc", ' '));
138
139 BOOST_TEST(test_delimited("abc ", string("abc"), ' '));
140 BOOST_TEST(!test_delimited("abcd ", string("abc"), ' '));
141
142 BOOST_TEST(test_delimited("abc ", string("abc"), "abc", ' '));
143 BOOST_TEST(!test_delimited("", string("abc"), "abcd", ' '));
144 BOOST_TEST(!test_delimited("", string("abcd"), "abc", ' '));
145 BOOST_TEST(!test_delimited("", string("abc"), "abcd", ' ')); // don't match prefixes only
146 }
147
148 {
149 using namespace boost::spirit::ascii;
150
151 BOOST_TEST(test_delimited(L"a ", lit(L'a'), ' '));
152 BOOST_TEST(!test_delimited(L"a ", lit(L'b'), ' '));
153
154 BOOST_TEST(test_delimited(L"abc ", L"abc", ' '));
155 BOOST_TEST(!test_delimited(L"abcd ", L"abc", ' '));
156
157 BOOST_TEST(test_delimited(L"abc ", lit(L"abc"), ' '));
158 BOOST_TEST(!test_delimited(L"abcd ", lit(L"abc"), ' '));
159
160 BOOST_TEST(test_delimited(L"abc ", string, L"abc", ' '));
161 BOOST_TEST(!test_delimited(L"abcd ", string, L"abc", ' '));
162
163 BOOST_TEST(test_delimited(L"abc ", string(L"abc"), ' '));
164 BOOST_TEST(!test_delimited(L"abcd ", string(L"abc"), ' '));
165 }
166
167 { // test action
168 namespace phx = boost::phoenix;
169 using namespace boost::spirit::ascii;
170
171 std::string str("abc");
172 BOOST_TEST(test("abc", string[_1 = phx::ref(str)]));
173 BOOST_TEST(test_delimited("abc ", string[_1 = phx::ref(str)], space));
174 }
175
176 { // lazy strings
177 namespace phx = boost::phoenix;
178 using namespace boost::spirit::ascii;
179
180 std::basic_string<char> s("abc");
181 BOOST_TEST((test("abc", lit(phx::val(s)))));
182 BOOST_TEST((test("abc", string(phx::val(s)))));
183
184 BOOST_TEST(test("abc", string(phx::val(s)), "abc"));
185 BOOST_TEST(!test("", string(phx::val(s)), "abcd"));
186 BOOST_TEST(!test("", string(phx::val(s)), "abc"));
187
188 std::basic_string<wchar_t> ws(L"abc");
189 BOOST_TEST((test(L"abc", lit(phx::ref(ws)))));
190 BOOST_TEST((test(L"abc", string(phx::ref(ws)))));
191 }
192
193 return boost::report_errors();
194 }