]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/x3/list.cpp
1 /*=============================================================================
2 Copyright (c) 2001-2013 Joel de Guzman
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 =============================================================================*/
12 #include <boost/detail/lightweight_test.hpp>
13 #include <boost/spirit/home/x3.hpp>
20 using namespace spirit_test
;
25 using namespace boost::spirit::x3::ascii
;
28 BOOST_TEST(test("a,b,c,d,e,f,g,h", char_
% ','));
29 BOOST_TEST(test("a,b,c,d,e,f,g,h,", char_
% ',', false));
33 BOOST_TEST(test("a, b, c, d, e, f, g, h", char_
% ',', space
));
34 BOOST_TEST(test("a, b, c, d, e, f, g, h,", char_
% ',', space
, false));
39 BOOST_TEST(test_attr("a,b,c,d,e,f,g,h", char_
% ',', s
));
40 BOOST_TEST(s
== "abcdefgh");
42 BOOST_TEST(!test("a,b,c,d,e,f,g,h,", char_
% ','));
47 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_
>> char_
) % ',', s
));
48 BOOST_TEST(s
== "abcdefgh");
50 BOOST_TEST(!test("ab,cd,ef,gh,", (char_
>> char_
) % ','));
51 BOOST_TEST(!test("ab,cd,ef,g", (char_
>> char_
) % ','));
54 BOOST_TEST(test_attr("ab,cd,efg", (char_
>> char_
) % ',' >> char_
, s
));
55 BOOST_TEST(s
== "abcdefg");
59 using boost::spirit::x3::int_
;
62 BOOST_TEST(test_attr("1,2", int_
% ',', v
));
63 BOOST_TEST(2 == v
.size() && 1 == v
[0] && 2 == v
[1]);
67 using boost::spirit::x3::int_
;
70 BOOST_TEST(test_attr("(1,2)", '(' >> int_
% ',' >> ')', v
));
71 BOOST_TEST(2 == v
.size() && 1 == v
[0] && 2 == v
[1]);
75 std::vector
<std::string
> v
;
76 BOOST_TEST(test_attr("a,b,c,d", +alpha
% ',', v
));
77 BOOST_TEST(4 == v
.size() && "a" == v
[0] && "b" == v
[1]
78 && "c" == v
[2] && "d" == v
[3]);
82 std::vector
<boost::optional
<char> > v
;
83 BOOST_TEST(test_attr("#a,#", ('#' >> -alpha
) % ',', v
));
84 BOOST_TEST(2 == v
.size() &&
85 !!v
[0] && 'a' == boost::get
<char>(v
[0]) && !v
[1]);
88 BOOST_TEST(test_attr("#a,#", ('#' >> -alpha
) % ',', v2
));
89 BOOST_TEST(1 == v2
.size() && 'a' == v2
[0]);
93 using boost::spirit::x3::_attr
;
96 auto f
= [&](auto& ctx
){ s
= std::string(_attr(ctx
).begin(), _attr(ctx
).end()); };
98 BOOST_TEST(test("a,b,c,d,e,f,g,h", (char_
% ',')[f
]));
99 BOOST_TEST(s
== "abcdefgh");
102 { // test move only types
103 std::vector
<move_only
> v
;
104 BOOST_TEST(test_attr("s.s.s.s", synth_move_only
% '.', v
));
105 BOOST_TEST_EQ(v
.size(), 4);
108 return boost::report_errors();