]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/karma/repeat2.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/config/warning_disable.hpp>
7 #include <boost/detail/lightweight_test.hpp>
9 #include <boost/assign/std/vector.hpp>
11 #include <boost/spirit/include/karma_operator.hpp>
12 #include <boost/spirit/include/karma_char.hpp>
13 #include <boost/spirit/include/karma_string.hpp>
14 #include <boost/spirit/include/karma_numeric.hpp>
15 #include <boost/spirit/include/karma_directive.hpp>
16 #include <boost/spirit/include/karma_operator.hpp>
17 #include <boost/spirit/include/karma_action.hpp>
18 #include <boost/spirit/include/karma_nonterminal.hpp>
19 #include <boost/spirit/include/karma_auxiliary.hpp>
20 #include <boost/spirit/include/karma_directive.hpp>
21 #include <boost/spirit/include/karma_phoenix_attributes.hpp>
22 #include <boost/spirit/include/support_argument.hpp>
23 #include <boost/spirit/include/phoenix_core.hpp>
24 #include <boost/spirit/include/phoenix_operator.hpp>
25 #include <boost/fusion/include/std_pair.hpp>
33 using namespace spirit_test
;
35 ///////////////////////////////////////////////////////////////////////////////
38 using namespace boost::spirit::ascii
;
39 using boost::spirit::karma::repeat
;
40 using boost::spirit::karma::inf
;
41 using boost::spirit::karma::int_
;
42 using boost::spirit::karma::hex
;
43 using boost::spirit::karma::_1
;
46 std::string
str("aBcdeFGH");
47 BOOST_TEST(test("abcdefgh", lower
[repeat(8)[char_
]], str
));
48 BOOST_TEST(test_delimited("A B C D E F G H ", upper
[repeat(8)[char_
]], str
, space
));
52 std::string s1
= "aaaaa";
53 BOOST_TEST(test("aaaaa", char_
<< repeat(2)[char_
<< char_
], s1
));
55 BOOST_TEST(test("aaa", char_
<< repeat(1, 2)[char_
<< char_
], s1
));
57 BOOST_TEST(!test("", char_
<< repeat(1)[char_
<< char_
], s1
));
61 namespace phx
= boost::phoenix
;
68 BOOST_TEST(test("aaaa", repeat(4)[char_
][_1
= phx::ref(v
)]));
72 namespace phx
= boost::phoenix
;
78 BOOST_TEST(test_delimited("123 456 789 ", repeat(3)[int_
][_1
= phx::ref(v
)], space
));
81 // failing sub-generators
83 using boost::spirit::karma::strict
;
84 using boost::spirit::karma::relaxed
;
86 using namespace boost::assign
;
87 namespace karma
= boost::spirit::karma
;
89 typedef std::pair
<char, char> data
;
90 std::vector
<data
> v2
, v3
;
91 v2
+= std::make_pair('a', 'a'),
92 std::make_pair('b', 'b'),
93 std::make_pair('c', 'c'),
94 std::make_pair('d', 'd'),
95 std::make_pair('e', 'e'),
96 std::make_pair('f', 'f'),
97 std::make_pair('g', 'g');
98 v3
+= std::make_pair('a', 'a'),
99 std::make_pair('b', 'b'),
100 std::make_pair('c', 'c'),
101 std::make_pair('d', 'd');
103 karma::rule
<spirit_test::output_iterator
<char>::type
, data()> r
;
105 r
= &char_('d') << char_
;
106 BOOST_TEST(test("d", repeat
[r
], v2
));
107 BOOST_TEST(test("d", relaxed
[repeat
[r
]], v2
));
108 BOOST_TEST(test("", strict
[repeat
[r
]], v2
));
110 r
= !char_('d') << char_
;
111 BOOST_TEST(test("abcefg", repeat(6)[r
], v2
));
112 BOOST_TEST(!test("", repeat(5)[r
], v2
));
113 BOOST_TEST(test("abcefg", relaxed
[repeat(6)[r
]], v2
));
114 BOOST_TEST(!test("", relaxed
[repeat(5)[r
]], v2
));
115 BOOST_TEST(!test("", strict
[repeat(6)[r
]], v2
));
116 BOOST_TEST(!test("", strict
[repeat(5)[r
]], v2
));
118 r
= !char_('c') << char_
;
119 BOOST_TEST(test("abd", repeat(3)[r
], v2
));
120 BOOST_TEST(test("abd", relaxed
[repeat(3)[r
]], v2
));
121 BOOST_TEST(!test("", strict
[repeat(3)[r
]], v2
));
123 r
= !char_('a') << char_
;
124 BOOST_TEST(test("bcdef", repeat(3, 5)[r
], v2
));
125 BOOST_TEST(test("bcd", repeat(3, 5)[r
], v3
));
126 BOOST_TEST(!test("", repeat(4, 5)[r
], v3
));
127 BOOST_TEST(test("bcdef", relaxed
[repeat(3, 5)[r
]], v2
));
128 BOOST_TEST(test("bcd", relaxed
[repeat(3, 5)[r
]], v3
));
129 BOOST_TEST(!test("", relaxed
[repeat(4, 5)[r
]], v3
));
130 BOOST_TEST(!test("", strict
[repeat(3, 5)[r
]], v2
));
131 BOOST_TEST(!test("", strict
[repeat(3, 5)[r
]], v3
));
132 BOOST_TEST(!test("", strict
[repeat(4, 5)[r
]], v3
));
134 BOOST_TEST(test("bcd", repeat(3, inf
)[r
], v3
));
135 BOOST_TEST(test("bcdefg", repeat(3, inf
)[r
], v2
));
136 BOOST_TEST(!test("", repeat(4, inf
)[r
], v3
));
138 r
= !char_('g') << char_
;
139 BOOST_TEST(test("abcde", repeat(3, 5)[r
], v2
));
140 BOOST_TEST(test("abcd", repeat(3, 5)[r
], v3
));
141 BOOST_TEST(!test("", repeat(4, 5)[r
], v3
));
142 BOOST_TEST(test("abcde", relaxed
[repeat(3, 5)[r
]], v2
));
143 BOOST_TEST(test("abcd", relaxed
[repeat(3, 5)[r
]], v3
));
144 BOOST_TEST(!test("", relaxed
[repeat(4, 5)[r
]], v3
));
145 BOOST_TEST(test("abcde", strict
[repeat(3, 5)[r
]], v2
));
146 BOOST_TEST(test("abcd", strict
[repeat(3, 5)[r
]], v3
));
147 BOOST_TEST(!test("", strict
[repeat(5)[r
]], v3
));
150 return boost::report_errors();