]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/karma/char2.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 //#define KARMA_FAIL_COMPILATION
8 #include <boost/config/warning_disable.hpp>
9 #include <boost/detail/lightweight_test.hpp>
11 #include <boost/spirit/include/karma_char.hpp>
12 #include <boost/spirit/include/karma_generate.hpp>
13 #include <boost/spirit/include/karma_action.hpp>
14 #include <boost/spirit/include/karma_phoenix_attributes.hpp>
16 #include <boost/spirit/include/phoenix_core.hpp>
17 #include <boost/spirit/include/phoenix_operator.hpp>
18 #include <boost/spirit/include/phoenix_statement.hpp>
22 using namespace spirit_test
;
24 ///////////////////////////////////////////////////////////////////////////////
28 using namespace boost::spirit
;
29 using namespace boost::phoenix
;
32 using namespace boost::spirit::ascii
;
34 BOOST_TEST(test(" ", space
));
35 BOOST_TEST(test(L
" ", space
));
36 BOOST_TEST(!test("\t", space
));
37 BOOST_TEST(!test(L
"\t", space
));
39 BOOST_TEST(test(" ", space
, ' '));
40 BOOST_TEST(test(L
" ", space
, L
' '));
41 BOOST_TEST(test("\t", space
, '\t'));
42 BOOST_TEST(test(L
"\t", space
, L
'\t'));
44 BOOST_TEST(!test("", space
, 'x'));
45 BOOST_TEST(!test(L
"", space
, L
'x'));
47 BOOST_TEST(!test(" ", ~space
, ' '));
48 BOOST_TEST(!test(L
" ", ~space
, L
' '));
50 BOOST_TEST(test("x", ~space
, 'x'));
51 BOOST_TEST(test(L
"x", ~space
, L
'x'));
55 using namespace boost::spirit::standard_wide
;
57 BOOST_TEST(test(" ", space
));
58 BOOST_TEST(test(L
" ", space
));
59 BOOST_TEST(!test("\t", space
));
60 BOOST_TEST(!test(L
"\t", space
));
62 BOOST_TEST(test(" ", space
, ' '));
63 BOOST_TEST(test(L
" ", space
, L
' '));
64 BOOST_TEST(test("\t", space
, '\t'));
65 BOOST_TEST(test(L
"\t", space
, L
'\t'));
67 BOOST_TEST(!test("", space
, 'x'));
68 BOOST_TEST(!test(L
"", space
, L
'x'));
72 using namespace boost::spirit::ascii
;
74 BOOST_TEST(test_delimited("x ", 'x', ' '));
75 BOOST_TEST(test_delimited(L
"x ", L
'x', L
' '));
76 BOOST_TEST(!test_delimited("x ", 'y', ' '));
77 BOOST_TEST(!test_delimited(L
"x ", L
'y', L
' '));
79 BOOST_TEST(test_delimited("x ", 'x', ' '));
80 BOOST_TEST(test_delimited(L
"x ", L
'x', L
' '));
81 BOOST_TEST(!test_delimited("x ", 'y', ' '));
82 BOOST_TEST(!test_delimited(L
"x ", L
'y', L
' '));
84 BOOST_TEST(test_delimited("x ", char_
, 'x', ' '));
85 BOOST_TEST(test_delimited(L
"x ", char_
, L
'x', L
' '));
86 BOOST_TEST(!test_delimited("x ", char_
, 'y', ' '));
87 BOOST_TEST(!test_delimited(L
"x ", char_
, L
'y', L
' '));
89 BOOST_TEST(test_delimited("x ", char_('x'), ' '));
90 BOOST_TEST(!test_delimited("x ", char_('y'), ' '));
92 BOOST_TEST(test_delimited("x ", char_('x'), 'x', ' '));
93 BOOST_TEST(!test_delimited("", char_('y'), 'x', ' '));
95 BOOST_TEST(test_delimited("x ", char_("x"), ' '));
97 #if defined(KARMA_FAIL_COMPILATION)
98 BOOST_TEST(test_delimited("x ", char_
, ' ')); // anychar without a parameter doesn't make any sense
104 std::string generated
;
105 std::back_insert_iterator
<std::string
> it(generated
);
106 BOOST_TEST(karma::generate_delimited(it
, '_', '^'
107 , karma::delimit_flag::predelimit
));
108 BOOST_TEST(generated
== "^_^");
111 using namespace boost::spirit::standard_wide
;
112 std::basic_string
<wchar_t> generated
;
113 std::back_insert_iterator
<std::basic_string
<wchar_t> > it(generated
);
114 BOOST_TEST(karma::generate_delimited(it
, char_
, L
'.'
115 , karma::delimit_flag::predelimit
, L
'x'));
116 BOOST_TEST(generated
== L
".x.");
122 using namespace boost::spirit::ascii
;
124 BOOST_TEST(test("x", char_
[_1
= val('x')]));
125 BOOST_TEST(!test("x", char_
[_1
= val('y')]));
128 // we support Phoenix attributes only starting with V2.2
129 #if SPIRIT_VERSION >= 0x2020
130 // yes, we can use phoenix expressions as attributes as well
131 // but only if we include karma_phoenix_attributes.hpp
133 namespace ascii
= boost::spirit::ascii
;
134 namespace phoenix
= boost::phoenix
;
136 BOOST_TEST(test("x", ascii::char_
, phoenix::val('x')));
139 BOOST_TEST(test("x", ascii::char_
, phoenix::ref(c
)));
140 BOOST_TEST(test("y", ascii::char_
, ++phoenix::ref(c
)));
145 namespace ascii
= boost::spirit::ascii
;
146 namespace wide
= boost::spirit::standard_wide
;
148 boost::optional
<char> v ('x');
149 boost::optional
<wchar_t> w (L
'x');
151 BOOST_TEST(test("x", ascii::char_
, v
));
152 BOOST_TEST(test(L
"x", wide::char_
, w
));
153 BOOST_TEST(test("x", ascii::char_('x'), v
));
154 BOOST_TEST(test(L
"x", wide::char_(L
'x'), w
));
155 BOOST_TEST(!test("", ascii::char_('y'), v
));
156 BOOST_TEST(!test(L
"", wide::char_(L
'y'), w
));
159 return boost::report_errors();