]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/karma/utree2.cpp
1 // Copyright (c) 2001-2011 Hartmut Kaiser
2 // Copyright (c) 2001-2011 Joel de Guzman
3 // Copyright (c) 2010 Bryce Lelbach
5 // Distributed under the Boost Software License, Version 1.0. (See accompanying
6 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8 #include <boost/config/warning_disable.hpp>
9 #include <boost/detail/lightweight_test.hpp>
11 #include <boost/mpl/print.hpp>
13 #include <boost/spirit/include/karma.hpp>
14 #include <boost/spirit/include/support_utree.hpp>
22 using spirit_test::test
;
23 using spirit_test::test_delimited
;
24 using boost::spirit::utree
;
25 using boost::spirit::utree_type
;
26 using boost::spirit::utf8_string_range_type
;
27 using boost::spirit::utf8_string_type
;
28 using boost::spirit::utf8_symbol_type
;
30 using boost::spirit::karma::char_
;
31 using boost::spirit::karma::bool_
;
32 using boost::spirit::karma::int_
;
33 using boost::spirit::karma::double_
;
34 using boost::spirit::karma::string
;
35 using boost::spirit::karma::space
;
36 using boost::spirit::karma::rule
;
38 typedef spirit_test::output_iterator
<char>::type output_iterator
;
45 BOOST_TEST(test("ab", *char_
, ut
));
50 BOOST_TEST(test_delimited("123 456 ", *int_
, ut
, space
));
55 BOOST_TEST(test_delimited("1.23 4.56 ", *double_
, ut
, space
));
60 rule
<output_iterator
, utree()> r1
, r1ref
;
61 rule
<output_iterator
, utf8_string_range_type()> r1str
;
62 rule
<output_iterator
, utree::const_range()> r1list
;
64 r1
= double_
| int_
| r1str
| r1list
| r1ref
;
70 r1list
= '(' << -(r1
% ',') << ')';
76 BOOST_TEST(test("abc,def", string
% ',', ut
));
77 BOOST_TEST(test("(abc,def)", r1
, ut
));
79 // ( ( "abc" "def" ) )
82 BOOST_TEST(test("((abc,def))", r1
, ut1
));
84 // rule<output_iterator, std::vector<char>()> r2 = char_ % ',';
85 // BOOST_TEST(test("abc,def", r2, ut));
86 // BOOST_TEST(test("abc,def", r2, ut1));
88 // ( ( "abc" "def" ) ( "abc" "def" ) )
90 BOOST_TEST(test("(abc,def) (abc,def)", r1
<< ' ' << r1
, ut1
));
96 BOOST_TEST(test("123,456", int_
% ',', ut
));
97 BOOST_TEST(test("(123,456)", r1
, ut
));
102 BOOST_TEST(test("((123,456))", r1
, ut1
));
104 // rule<output_iterator, std::vector<int>()> r4 = int_ % ',';
105 // BOOST_TEST(test("123,456", r4, ut));
106 // BOOST_TEST(test("123,456", r4, ut1));
108 // ( ( 123 456 ) ( 123 456 ) )
110 BOOST_TEST(test("(123,456) (123,456)", r1
<< ' ' << r1
, ut1
));
116 BOOST_TEST(test("1.23,4.56", double_
% ',', ut
));
117 BOOST_TEST(test("(1.23,4.56)", r1
, ut
));
122 BOOST_TEST(test("((1.23,4.56))", r1
, ut1
));
124 // rule<output_iterator, std::vector<double>()> r6 = double_ % ',';
125 // BOOST_TEST(test("1.23,4.56", r6, ut));
126 // BOOST_TEST(test("1.23,4.56", r6, ut1));
128 // ( ( 1.23 4.56 ) ( 1.23 4.56 ) )
130 BOOST_TEST(test("(1.23,4.56) (1.23,4.56)", r1
<<' ' << r1
, ut1
));
135 rule
<output_iterator
, utree()> r1
= int_
| double_
;
137 BOOST_TEST(test("10", int_
| double_
, ut
));
138 BOOST_TEST(test("10", r1
, ut
));
141 BOOST_TEST(test("10.2", int_
| double_
, ut
));
142 BOOST_TEST(test("10.2", r1
, ut
));
148 BOOST_TEST(test("x", -char_
, ut
));
151 BOOST_TEST(test("", -char_
, ut
));
154 return boost::report_errors();