]>
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/fusion/include/std_pair.hpp>
27 using namespace spirit_test
;
29 inline bool compare(std::vector
<char> const& v
, std::string
const& s
)
31 return v
.size() == s
.size() && std::equal(v
.begin(), v
.end(), s
.begin());
36 using boost::spirit::qi::char_
;
37 using boost::spirit::qi::omit
;
41 BOOST_TEST(test_attr("a,b,c,d,e,f,g,h", char_
% ',', v
) &&
42 compare(v
, "abcdefgh"));
45 BOOST_TEST(test_attr("a,b,c,d,e,f,g,h", char_
% ',', s
) &&
48 BOOST_TEST(test("a,b,c,d,e,f,g,h", char_
% ','));
49 BOOST_TEST(test("a,b,c,d,e,f,g,h", omit
[char_
] % ','));
54 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_
>> char_
) % ',', v1
) &&
55 compare(v1
, "abcdefgh"));
57 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_
>> omit
[char_
]) % ',', v1
) &&
61 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_
>> char_
) % ',', s
) &&
64 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_
>> omit
[char_
]) % ',', s
) &&
67 std::vector
<std::pair
<char, char> > v2
;
68 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_
>> char_
) % ',', v2
) &&
70 v2
[0] == std::make_pair('a', 'b') &&
71 v2
[1] == std::make_pair('c', 'd') &&
72 v2
[2] == std::make_pair('e', 'f') &&
73 v2
[3] == std::make_pair('g', 'h'));
76 BOOST_TEST(test_attr("ab,cd,efg", (char_
>> char_
) % ',' >> char_
, s
) &&
79 BOOST_TEST(test("ab,cd,ef,gh", (char_
>> char_
) % ','));
80 BOOST_TEST(test("ab,cd,ef,gh", (omit
[char_
>> char_
]) % ','));
85 BOOST_TEST(test_attr("abc,def,gh", (char_
>> *~char_(',')) % ',', v1
) &&
86 compare(v1
, "abcdefgh"));
88 BOOST_TEST(test_attr("abc,def,gh", (char_
>> omit
[*~char_(',')]) % ',', v1
) &&
91 BOOST_TEST(test_attr("abc,def,gh", (omit
[char_
] >> *~char_(',')) % ',', v1
) &&
92 compare(v1
, "bcefh"));
95 BOOST_TEST(test_attr("abc,def,gh", (char_
>> *~char_(',')) % ',', s1
) &&
98 BOOST_TEST(test_attr("abc,def,gh", (char_
>> omit
[*~char_(',')]) % ',', s1
) &&
101 BOOST_TEST(test_attr("abc,def,gh", (omit
[char_
] >> *~char_(',')) % ',', s1
) &&
104 std::vector
<std::pair
<char, std::vector
<char> > > v2
;
105 BOOST_TEST(test_attr("abc,def,gh", (char_
>> *~char_(',')) % ',', v2
) &&
107 v2
[0].first
== 'a' && compare(v2
[0].second
, "bc") &&
108 v2
[1].first
== 'd' && compare(v2
[1].second
, "ef") &&
109 v2
[2].first
== 'g' && compare(v2
[2].second
, "h"));
111 std::vector
<std::vector
<char> > v3
;
112 BOOST_TEST(test_attr("abc,def,gh", (omit
[char_
] >> *~char_(',')) % ',', v3
) &&
114 compare(v3
[0], "bc") && compare(v3
[1], "ef") &&
115 compare(v3
[2], "h"));
117 std::vector
<char> v4
;
118 BOOST_TEST(test_attr("abc,def,gh", (char_
>> omit
[*~char_(',')]) % ',', v4
) &&
120 v4
[0] == 'a' && v4
[1] == 'd' && v4
[2] == 'g');
122 std::vector
<std::string
> v5
;
123 BOOST_TEST(test_attr("abc,def,gh", (omit
[char_
] >> *~char_(',')) % ',', v5
) &&
125 v5
[0] == "bc" && v5
[1] == "ef" && v5
[2] == "h");
128 BOOST_TEST(test_attr("abc,def,gh", (char_
>> omit
[*~char_(',')]) % ',', s2
) &&
132 BOOST_TEST(test("abc,def,gh", (char_
>> *~char_(',')) % ','));
133 BOOST_TEST(test("abc,def,gh", (omit
[char_
>> *~char_(',')]) % ','));
137 using boost::spirit::qi::alpha
;
138 using boost::spirit::qi::digit
;
140 std::vector
<char> v1
;
141 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha
>> *digit
) % ',', v1
) &&
142 compare(v1
, "ab12cd34ef56"));
144 BOOST_TEST(test_attr("ab12,cd34,ef56", (omit
[*alpha
] >> *digit
) % ',', v1
) &&
145 compare(v1
, "123456"));
147 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha
>> omit
[*digit
]) % ',', v1
) &&
148 compare(v1
, "abcdef"));
151 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha
>> *digit
) % ',', s1
) &&
152 s1
== "ab12cd34ef56");
154 BOOST_TEST(test_attr("ab12,cd34,ef56", (omit
[*alpha
] >> *digit
) % ',', s1
) &&
157 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha
>> omit
[*digit
]) % ',', s1
) &&
160 std::vector
<std::pair
<std::vector
<char>, std::vector
<char> > > v2
;
161 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha
>> *digit
) % ',', v2
) &&
163 compare(v2
[0].first
, "ab") && compare(v2
[0].second
, "12") &&
164 compare(v2
[1].first
, "cd") && compare(v2
[1].second
, "34") &&
165 compare(v2
[2].first
, "ef") && compare(v2
[2].second
, "56"));
167 std::vector
<std::pair
<std::string
, std::string
> > v3
;
168 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha
>> *digit
) % ',', v3
) &&
170 v3
[0].first
== "ab" && v3
[0].second
== "12" &&
171 v3
[1].first
== "cd" && v3
[1].second
== "34" &&
172 v3
[2].first
== "ef" && v3
[2].second
== "56");
174 std::vector
<std::vector
<char> > v4
;
175 BOOST_TEST(test_attr("ab12,cd34,ef56", (omit
[*alpha
] >> *digit
) % ',', v4
) &&
177 compare(v4
[0], "12") &&
178 compare(v4
[1], "34") &&
179 compare(v4
[2], "56"));
181 BOOST_TEST(test("ab12,cd34,ef56", (*alpha
>> *digit
) % ','));
182 BOOST_TEST(test("ab12,cd34,ef56", omit
[*alpha
>> *digit
] % ','));
185 return boost::report_errors();