]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/karma/alternative1.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_alternative.hpp>
8 #include <boost/spirit/include/karma_auxiliary.hpp>
9 #include <boost/spirit/include/karma_char.hpp>
10 #include <boost/spirit/include/karma_string.hpp>
11 #include <boost/spirit/include/karma_numeric.hpp>
12 #include <boost/spirit/include/karma_generate.hpp>
13 #include <boost/spirit/include/karma_operator.hpp>
14 #include <boost/spirit/include/karma_directive.hpp>
15 #include <boost/spirit/include/karma_nonterminal.hpp>
19 using namespace spirit_test
;
21 ///////////////////////////////////////////////////////////////////////////////
25 using namespace boost
;
26 using namespace boost::spirit
;
27 using namespace boost::spirit::ascii
;
30 BOOST_TEST(test("x", char_('x') | char_('i')));
31 BOOST_TEST(test("xi", char_('x') << char_('i') | char_('i')));
32 BOOST_TEST(test("i", char_('i') | char_('x') << char_('i')));
34 BOOST_TEST(test("x", buffer
[char_('x')] | char_('i')));
36 variant
<int, char> v (10);
37 BOOST_TEST(test("10", char_
| int_
, v
));
38 BOOST_TEST(test("10", int_
| char_
, v
));
39 BOOST_TEST(test("a", lit('a') | char_
| int_
, v
));
40 BOOST_TEST(test("a", char_
| lit('a') | int_
, v
));
41 BOOST_TEST(test("10", int_
| lit('a') | char_
, v
));
44 BOOST_TEST(test("c", char_
| int_
, v
));
45 BOOST_TEST(test("a", lit('a') | char_
| int_
, v
));
46 BOOST_TEST(test("c", char_
| lit('a') | int_
, v
));
47 BOOST_TEST(test("a", int_
| lit('a') | char_
, v
));
48 BOOST_TEST(test("c", int_
| char_
| lit('a'), v
));
51 // testing for alignment/truncation problems on little endian systems
52 // (big endian systems will fail one of the other tests below)
54 // test optional attribute
55 optional
<variant
<int, char> > v
;
56 BOOST_TEST(!test("", char_
| int_
, v
));
57 BOOST_TEST(!test("", int_
| char_
, v
));
58 BOOST_TEST(test("a", lit('a') | char_
| int_
, v
));
59 BOOST_TEST(test("a", char_
| lit('a') | int_
, v
));
60 BOOST_TEST(test("a", int_
| lit('a') | char_
, v
));
63 BOOST_TEST(test("10", char_
| int_
, v
));
64 BOOST_TEST(test("10", int_
| char_
, v
));
65 BOOST_TEST(test("a", lit('a') | char_
| int_
, v
));
66 BOOST_TEST(test("a", char_
| lit('a') | int_
, v
));
67 BOOST_TEST(test("10", int_
| lit('a') | char_
, v
));
70 BOOST_TEST(test("c", char_
| int_
, v
));
71 BOOST_TEST(test("a", lit('a') | char_
| int_
, v
));
72 BOOST_TEST(test("c", char_
| lit('a') | int_
, v
));
73 BOOST_TEST(test("a", int_
| lit('a') | char_
, v
));
74 BOOST_TEST(test("c", int_
| char_
| lit('a'), v
));
78 // more tests for optional attribute
80 BOOST_TEST(test("a", lit('a') | int_
, o
));
81 BOOST_TEST(test("a", int_
| lit('a'), o
));
84 BOOST_TEST(test("a", lit('a') | int_
, o
));
85 BOOST_TEST(test("10", int_
| lit('a'), o
));
90 BOOST_TEST(test("a", lit('a') | int_
, i
));
91 BOOST_TEST(test("10", int_
| lit('a'), i
));
95 optional
<std::string
> o
;
96 BOOST_TEST(test("xyzzy", ("(" << string
<< ")") | lit("xyzzy"), o
));
99 BOOST_TEST(test("(plugh)", ("(" << string
<< ")") | lit("xyzzy"), o
));
103 BOOST_TEST(test("abc", string
| int_
, std::string("abc")));
104 BOOST_TEST(test("1234", string
| int_
, 1234));
105 BOOST_TEST(test("abc", int_
| string
, std::string("abc")));
106 BOOST_TEST(test("1234", int_
| string
, 1234));
110 // testing for alignment/truncation problems on little endian systems
111 // (big endian systems will fail one of the other tests below)
112 std::basic_string
<wchar_t> generated
;
113 std::back_insert_iterator
<std::basic_string
<wchar_t> > outit(generated
);
114 boost::variant
<int, char> v(10);
115 bool result
= karma::generate_delimited(outit
116 , karma::int_
| karma::char_
, karma::char_(' '), v
);
117 BOOST_TEST(result
&& generated
== L
"10 ");
121 boost::optional
<int> v
;
122 BOOST_TEST(test("error", int_
| "error" << omit
[-int_
], v
));
123 BOOST_TEST(!test("error", int_
| "error" << omit
[int_
], v
));
124 BOOST_TEST(test("error", int_
| "error" << skip
[int_
], v
));
126 BOOST_TEST(test("1", int_
| "error" << omit
[-int_
], v
));
127 BOOST_TEST(test("1", int_
| "error" << omit
[int_
], v
));
128 BOOST_TEST(test("1", int_
| "error" << skip
[int_
], v
));
132 typedef spirit_test::output_iterator
<char>::type outiter_type
;
133 namespace karma
= boost::spirit::karma
;
135 karma::rule
<outiter_type
, int()> r
= int_
;
137 BOOST_TEST(test("", '>' << r
% ',' | karma::eps
, v
));
143 BOOST_TEST(test(">1,2,3,4", '>' << r
% ',' | karma::eps
, v
));
147 typedef spirit_test::output_iterator
<char>::type outiter_type
;
148 namespace karma
= boost::spirit::karma
;
150 karma::rule
<outiter_type
, boost::optional
<int>()> r
= int_
;
151 boost::optional
<int> o
;
152 BOOST_TEST(test("error", r
| "error", o
));
155 BOOST_TEST(test("10", r
| "error", o
));
158 return boost::report_errors();