]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/qi/pass_container1.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / spirit / test / qi / pass_container1.cpp
1 // Copyright (c) 2001-2011 Hartmut Kaiser
2 //
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)
5
6 #include <string>
7 #include <vector>
8 #include <set>
9 #include <map>
10
11 #include <boost/detail/lightweight_test.hpp>
12
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>
26
27 #include <string>
28 #include <iostream>
29 #include "test.hpp"
30
31 using namespace spirit_test;
32
33 inline bool compare(std::vector<char> const& v, std::string const& s)
34 {
35 return v.size() == s.size() && std::equal(v.begin(), v.end(), s.begin());
36 }
37
38 int main()
39 {
40 using boost::spirit::qi::char_;
41 using boost::spirit::qi::omit;
42
43 {
44 std::vector<char> v;
45 BOOST_TEST(test_attr("a,b,c,d,e,f,g,h", char_ % ',', v) &&
46 compare(v, "abcdefgh"));
47
48 std::string s;
49 BOOST_TEST(test_attr("a,b,c,d,e,f,g,h", char_ % ',', s) &&
50 s == "abcdefgh");
51
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_] % ','));
54 }
55
56 {
57 std::vector<char> v1;
58 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_ >> char_) % ',', v1) &&
59 compare(v1, "abcdefgh"));
60 v1.clear();
61 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_ >> omit[char_]) % ',', v1) &&
62 compare(v1, "aceg"));
63
64 std::string s;
65 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_ >> char_) % ',', s) &&
66 s == "abcdefgh");
67 s.clear();
68 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_ >> omit[char_]) % ',', s) &&
69 s == "aceg");
70
71 std::vector<std::pair<char, char> > v2;
72 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_ >> char_) % ',', v2) &&
73 v2.size() == 4 &&
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'));
78
79 s.clear();
80 BOOST_TEST(test_attr("ab,cd,efg", (char_ >> char_) % ',' >> char_, s) &&
81 s == "abcdefg");
82
83 BOOST_TEST(test("ab,cd,ef,gh", (char_ >> char_) % ','));
84 BOOST_TEST(test("ab,cd,ef,gh", (omit[char_ >> char_]) % ','));
85 }
86
87 {
88 std::vector<char> v1;
89 BOOST_TEST(test_attr("abc,def,gh", (char_ >> *~char_(',')) % ',', v1) &&
90 compare(v1, "abcdefgh"));
91 v1.clear();
92 BOOST_TEST(test_attr("abc,def,gh", (char_ >> omit[*~char_(',')]) % ',', v1) &&
93 compare(v1, "adg"));
94 v1.clear();
95 BOOST_TEST(test_attr("abc,def,gh", (omit[char_] >> *~char_(',')) % ',', v1) &&
96 compare(v1, "bcefh"));
97
98 std::string s1;
99 BOOST_TEST(test_attr("abc,def,gh", (char_ >> *~char_(',')) % ',', s1) &&
100 s1 == "abcdefgh");
101 s1.clear();
102 BOOST_TEST(test_attr("abc,def,gh", (char_ >> omit[*~char_(',')]) % ',', s1) &&
103 s1 == "adg");
104 s1.clear();
105 BOOST_TEST(test_attr("abc,def,gh", (omit[char_] >> *~char_(',')) % ',', s1) &&
106 s1 == "bcefh");
107
108 std::vector<std::pair<char, std::vector<char> > > v2;
109 BOOST_TEST(test_attr("abc,def,gh", (char_ >> *~char_(',')) % ',', v2) &&
110 v2.size() == 3 &&
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"));
114
115 std::vector<std::vector<char> > v3;
116 BOOST_TEST(test_attr("abc,def,gh", (omit[char_] >> *~char_(',')) % ',', v3) &&
117 v3.size() == 3 &&
118 compare(v3[0], "bc") && compare(v3[1], "ef") &&
119 compare(v3[2], "h"));
120
121 std::vector<char> v4;
122 BOOST_TEST(test_attr("abc,def,gh", (char_ >> omit[*~char_(',')]) % ',', v4) &&
123 v4.size() == 3 &&
124 v4[0] == 'a' && v4[1] == 'd' && v4[2] == 'g');
125
126 std::vector<std::string> v5;
127 BOOST_TEST(test_attr("abc,def,gh", (omit[char_] >> *~char_(',')) % ',', v5) &&
128 v5.size() == 3 &&
129 v5[0] == "bc" && v5[1] == "ef" && v5[2] == "h");
130
131 std::string s2;
132 BOOST_TEST(test_attr("abc,def,gh", (char_ >> omit[*~char_(',')]) % ',', s2) &&
133 s2.size() == 3 &&
134 s2 == "adg");
135
136 BOOST_TEST(test("abc,def,gh", (char_ >> *~char_(',')) % ','));
137 BOOST_TEST(test("abc,def,gh", (omit[char_ >> *~char_(',')]) % ','));
138 }
139
140 {
141 using boost::spirit::qi::alpha;
142 using boost::spirit::qi::digit;
143
144 std::vector<char> v1;
145 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha >> *digit) % ',', v1) &&
146 compare(v1, "ab12cd34ef56"));
147 v1.clear();
148 BOOST_TEST(test_attr("ab12,cd34,ef56", (omit[*alpha] >> *digit) % ',', v1) &&
149 compare(v1, "123456"));
150 v1.clear();
151 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha >> omit[*digit]) % ',', v1) &&
152 compare(v1, "abcdef"));
153
154 std::string s1;
155 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha >> *digit) % ',', s1) &&
156 s1 == "ab12cd34ef56");
157 s1.clear();
158 BOOST_TEST(test_attr("ab12,cd34,ef56", (omit[*alpha] >> *digit) % ',', s1) &&
159 s1 == "123456");
160 s1.clear();
161 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha >> omit[*digit]) % ',', s1) &&
162 s1 == "abcdef");
163
164 std::vector<std::pair<std::vector<char>, std::vector<char> > > v2;
165 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha >> *digit) % ',', v2) &&
166 v2.size() == 3 &&
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"));
170
171 std::vector<std::pair<std::string, std::string> > v3;
172 BOOST_TEST(test_attr("ab12,cd34,ef56", (*alpha >> *digit) % ',', v3) &&
173 v3.size() == 3 &&
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");
177
178 std::vector<std::vector<char> > v4;
179 BOOST_TEST(test_attr("ab12,cd34,ef56", (omit[*alpha] >> *digit) % ',', v4) &&
180 v4.size() == 3 &&
181 compare(v4[0], "12") &&
182 compare(v4[1], "34") &&
183 compare(v4[2], "56"));
184
185 BOOST_TEST(test("ab12,cd34,ef56", (*alpha >> *digit) % ','));
186 BOOST_TEST(test("ab12,cd34,ef56", omit[*alpha >> *digit] % ','));
187 }
188
189 return boost::report_errors();
190 }
191