]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/qi/pass_container1.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)
11 #include <boost/detail/lightweight_test.hpp>
13 #include <boost/spirit/include/qi_operator.hpp>
14 #include <boost/spirit/include/qi_char.hpp>
15 #include <boost/spirit/include/qi_string.hpp>
16 #include <boost/spirit/include/qi_numeric.hpp>
17 #include <boost/spirit/include/qi_directive.hpp>
18 #include <boost/spirit/include/qi_action.hpp>
19 #include <boost/spirit/include/qi_auxiliary.hpp>
20 #include <boost/spirit/include/support_argument.hpp>
21 #include <boost/spirit/include/phoenix_core.hpp>
22 #include <boost/spirit/include/phoenix_operator.hpp>
23 #include <boost/spirit/include/phoenix_object.hpp>
24 #include <boost/spirit/include/phoenix_stl.hpp>
25 #include <boost/fusion/include/std_pair.hpp>
31 using namespace spirit_test
;
33 inline bool compare(std::vector
<char> const& v
, std::string
const& s
)
35 return v
.size() == s
.size() && std::equal(v
.begin(), v
.end(), s
.begin());
40 using boost::spirit::qi::char_
;
41 using boost::spirit::qi::omit
;
45 BOOST_TEST(test_attr("a,b,c,d,e,f,g,h", char_
% ',', v
) &&
46 compare(v
, "abcdefgh"));
49 BOOST_TEST(test_attr("a,b,c,d,e,f,g,h", char_
% ',', s
) &&
52 BOOST_TEST(test("a,b,c,d,e,f,g,h", char_
% ','));
53 BOOST_TEST(test("a,b,c,d,e,f,g,h", omit
[char_
] % ','));
58 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_
>> char_
) % ',', v1
) &&
59 compare(v1
, "abcdefgh"));
61 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_
>> omit
[char_
]) % ',', v1
) &&
65 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_
>> char_
) % ',', s
) &&
68 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_
>> omit
[char_
]) % ',', s
) &&
71 std::vector
<std::pair
<char, char> > v2
;
72 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_
>> char_
) % ',', v2
) &&
74 v2
[0] == std::make_pair('a', 'b') &&
75 v2
[1] == std::make_pair('c', 'd') &&
76 v2
[2] == std::make_pair('e', 'f') &&
77 v2
[3] == std::make_pair('g', 'h'));
80 BOOST_TEST(test_attr("ab,cd,efg", (char_
>> char_
) % ',' >> char_
, s
) &&
83 BOOST_TEST(test("ab,cd,ef,gh", (char_
>> char_
) % ','));
84 BOOST_TEST(test("ab,cd,ef,gh", (omit
[char_
>> char_
]) % ','));
89 BOOST_TEST(test_attr("abc,def,gh", (char_
>> *~char_(',')) % ',', v1
) &&
90 compare(v1
, "abcdefgh"));
92 BOOST_TEST(test_attr("abc,def,gh", (char_
>> omit
[*~char_(',')]) % ',', v1
) &&
95 BOOST_TEST(test_attr("abc,def,gh", (omit
[char_
] >> *~char_(',')) % ',', v1
) &&
96 compare(v1
, "bcefh"));
99 BOOST_TEST(test_attr("abc,def,gh", (char_
>> *~char_(',')) % ',', s1
) &&
102 BOOST_TEST(test_attr("abc,def,gh", (char_
>> omit
[*~char_(',')]) % ',', s1
) &&
105 BOOST_TEST(test_attr("abc,def,gh", (omit
[char_
] >> *~char_(',')) % ',', s1
) &&
108 std::vector
<std::pair
<char, std::vector
<char> > > v2
;
109 BOOST_TEST(test_attr("abc,def,gh", (char_
>> *~char_(',')) % ',', v2
) &&
111 v2
[0].first
== 'a' && compare(v2
[0].second
, "bc") &&
112 v2
[1].first
== 'd' && compare(v2
[1].second
, "ef") &&
113 v2
[2].first
== 'g' && compare(v2
[2].second
, "h"));
115 std::vector
<std::vector
<char> > v3
;
116 BOOST_TEST(test_attr("abc,def,gh", (omit
[char_
] >> *~char_(',')) % ',', v3
) &&
118 compare(v3
[0], "bc") && compare(v3
[1], "ef") &&
119 compare(v3
[2], "h"));
121 std::vector
<char> v4
;
122 BOOST_TEST(test_attr("abc,def,gh", (char_
>> omit
[*~char_(',')]) % ',', v4
) &&
124 v4
[0] == 'a' && v4
[1] == 'd' && v4
[2] == 'g');
126 std::vector
<std::string
> v5
;
127 BOOST_TEST(test_attr("abc,def,gh", (omit
[char_
] >> *~char_(',')) % ',', v5
) &&
129 v5
[0] == "bc" && v5
[1] == "ef" && v5
[2] == "h");
132 BOOST_TEST(test_attr("abc,def,gh", (char_
>> omit
[*~char_(',')]) % ',', s2
) &&
136 BOOST_TEST(test("abc,def,gh", (char_
>> *~char_(',')) % ','));
137 BOOST_TEST(test("abc,def,gh", (omit
[char_
>> *~char_(',')]) % ','));
141 using boost::spirit::qi::alpha
;
142 using boost::spirit::qi::digit
;
144 std::vector
<char> v1
;
145 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha
>> *digit
) % ',', v1
) &&
146 compare(v1
, "ab12cd34ef56"));
148 BOOST_TEST(test_attr("ab12,cd34,ef56", (omit
[*alpha
] >> *digit
) % ',', v1
) &&
149 compare(v1
, "123456"));
151 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha
>> omit
[*digit
]) % ',', v1
) &&
152 compare(v1
, "abcdef"));
155 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha
>> *digit
) % ',', s1
) &&
156 s1
== "ab12cd34ef56");
158 BOOST_TEST(test_attr("ab12,cd34,ef56", (omit
[*alpha
] >> *digit
) % ',', s1
) &&
161 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha
>> omit
[*digit
]) % ',', s1
) &&
164 std::vector
<std::pair
<std::vector
<char>, std::vector
<char> > > v2
;
165 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha
>> *digit
) % ',', v2
) &&
167 compare(v2
[0].first
, "ab") && compare(v2
[0].second
, "12") &&
168 compare(v2
[1].first
, "cd") && compare(v2
[1].second
, "34") &&
169 compare(v2
[2].first
, "ef") && compare(v2
[2].second
, "56"));
171 std::vector
<std::pair
<std::string
, std::string
> > v3
;
172 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha
>> *digit
) % ',', v3
) &&
174 v3
[0].first
== "ab" && v3
[0].second
== "12" &&
175 v3
[1].first
== "cd" && v3
[1].second
== "34" &&
176 v3
[2].first
== "ef" && v3
[2].second
== "56");
178 std::vector
<std::vector
<char> > v4
;
179 BOOST_TEST(test_attr("ab12,cd34,ef56", (omit
[*alpha
] >> *digit
) % ',', v4
) &&
181 compare(v4
[0], "12") &&
182 compare(v4
[1], "34") &&
183 compare(v4
[2], "56"));
185 BOOST_TEST(test("ab12,cd34,ef56", (*alpha
>> *digit
) % ','));
186 BOOST_TEST(test("ab12,cd34,ef56", omit
[*alpha
>> *digit
] % ','));
189 return boost::report_errors();