]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/spirit/test/karma/utree1.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / spirit / test / karma / utree1.cpp
CommitLineData
7c673cae
FG
1// Copyright (c) 2001-2011 Hartmut Kaiser
2// Copyright (c) 2001-2011 Joel de Guzman
3// Copyright (c) 2010 Bryce Lelbach
4//
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)
7
1e59de90 8#include <boost/spirit/include/support_utree.hpp>
7c673cae
FG
9
10#include <boost/spirit/include/karma.hpp>
7c673cae
FG
11
12#include <sstream>
13
14#include "test.hpp"
15
16int main()
17{
18 using spirit_test::test;
19 using spirit_test::test_delimited;
20 using boost::spirit::utree;
21 using boost::spirit::utree_type;
22 using boost::spirit::utf8_string_range_type;
23 using boost::spirit::utf8_string_type;
24 using boost::spirit::utf8_symbol_type;
25
26 using boost::spirit::karma::char_;
27 using boost::spirit::karma::bool_;
28 using boost::spirit::karma::int_;
29 using boost::spirit::karma::double_;
30 using boost::spirit::karma::string;
31 using boost::spirit::karma::space;
32 using boost::spirit::karma::rule;
33
34 typedef spirit_test::output_iterator<char>::type output_iterator;
35
36 // primitive data types
37 {
38 utree ut('x');
39 BOOST_TEST(test("x", char_, ut));
40
41 ut = false;
42 BOOST_TEST(test("false", bool_, ut));
43
44 ut = 123;
45 BOOST_TEST(test("123", int_, ut));
46
47 ut = 123.45;
48 BOOST_TEST(test("123.45", double_, ut));
49
50 ut = "abc";
51 BOOST_TEST(test("abc", string, ut));
52
53 ut = utf8_symbol_type("xyz");
54 BOOST_TEST(test("xyz", string, ut));
55 }
56
57 // sequences
58 {
59 using boost::spirit::karma::digit;
60 using boost::spirit::karma::repeat;
61
62 utree ut;
63 ut.push_back('x');
64 ut.push_back('y');
65 BOOST_TEST(test("xy", char_ << char_, ut));
66
67 ut.clear();
68 ut.push_back(123);
69 ut.push_back(456);
70 BOOST_TEST(test_delimited("123 456 ", int_ << int_, ut, space));
71
72 ut.clear();
73 ut.push_back(1.23);
74 ut.push_back(4.56);
75 BOOST_TEST(test_delimited("1.23 4.56 ", double_ << double_, ut, space));
76
77 ut.clear();
78 ut.push_back(1.23);
79 ut.push_back("ab");
80 BOOST_TEST(test("1.23ab", double_ << string, ut));
81
82 ut.clear();
83
84 rule<output_iterator, double()> r1 = double_;
85 rule<output_iterator, utree()> r2 = double_;
86
87 // ( 1.23 "a" "b" )
88 ut.push_back(1.23);
89 ut.push_back('a');
90 ut.push_back('b');
91 BOOST_TEST(test("1.23ab", double_ << *char_, ut));
92 BOOST_TEST(test("1.23ab", r1 << *char_, ut));
93 BOOST_TEST(test("1.23ab", r2 << *char_, ut));
94
95 // ( ( 1.23 ) "a" "b" )
96 ut.clear();
97 utree ut1;
98 ut1.push_back(1.23);
99 ut.push_back(ut1);
100 ut.push_back('a');
101 ut.push_back('b');
102 BOOST_TEST(test("1.23ab", r1 << *char_, ut));
103 BOOST_TEST(test("1.23ab", r2 << *char_, ut));
104
105 // ( "a" "b" 1.23 )
106 ut.clear();
107 ut.push_back('a');
108 ut.push_back('b');
109 ut.push_back(1.23);
110 BOOST_TEST(test("ab1.23", repeat(2)[~digit] << double_, ut));
111 BOOST_TEST(test("ab1.23", repeat(2)[~digit] << r1, ut));
112 BOOST_TEST(test("ab1.23", repeat(2)[~digit] << r2, ut));
113
114 // ( "a" "b" ( 1.23 ) )
115 ut.clear();
116 ut.push_back('a');
117 ut.push_back('b');
118 ut.push_back(ut1);
119 BOOST_TEST(test("ab1.23", repeat(2)[~digit] << r1, ut));
120 BOOST_TEST(test("ab1.23", repeat(2)[~digit] << r2, ut));
121 }
122
123 return boost::report_errors();
124}