]>
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
;
27 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(char_
% ',');
30 BOOST_TEST(test("a,b,c,d,e,f,g,h", char_
% ','));
31 BOOST_TEST(test("a,b,c,d,e,f,g,h,", char_
% ',', false));
35 BOOST_TEST(test("a, b, c, d, e, f, g, h", char_
% ',', space
));
36 BOOST_TEST(test("a, b, c, d, e, f, g, h,", char_
% ',', space
, false));
41 BOOST_TEST(test_attr("a,b,c,d,e,f,g,h", char_
% ',', s
));
42 BOOST_TEST(s
== "abcdefgh");
44 BOOST_TEST(!test("a,b,c,d,e,f,g,h,", char_
% ','));
49 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_
>> char_
) % ',', s
));
50 BOOST_TEST(s
== "abcdefgh");
52 BOOST_TEST(!test("ab,cd,ef,gh,", (char_
>> char_
) % ','));
53 BOOST_TEST(!test("ab,cd,ef,g", (char_
>> char_
) % ','));
56 BOOST_TEST(test_attr("ab,cd,efg", (char_
>> char_
) % ',' >> char_
, s
));
57 BOOST_TEST(s
== "abcdefg");
61 using boost::spirit::x3::int_
;
64 BOOST_TEST(test_attr("1,2", int_
% ',', v
));
65 BOOST_TEST(2 == v
.size() && 1 == v
[0] && 2 == v
[1]);
69 using boost::spirit::x3::int_
;
72 BOOST_TEST(test_attr("(1,2)", '(' >> int_
% ',' >> ')', v
));
73 BOOST_TEST(2 == v
.size() && 1 == v
[0] && 2 == v
[1]);
77 std::vector
<std::string
> v
;
78 BOOST_TEST(test_attr("a,b,c,d", +alpha
% ',', v
));
79 BOOST_TEST(4 == v
.size() && "a" == v
[0] && "b" == v
[1]
80 && "c" == v
[2] && "d" == v
[3]);
84 std::vector
<boost::optional
<char> > v
;
85 BOOST_TEST(test_attr("#a,#", ('#' >> -alpha
) % ',', v
));
86 BOOST_TEST(2 == v
.size() &&
87 !!v
[0] && 'a' == boost::get
<char>(v
[0]) && !v
[1]);
90 BOOST_TEST(test_attr("#a,#", ('#' >> -alpha
) % ',', v2
));
91 BOOST_TEST(1 == v2
.size() && 'a' == v2
[0]);
95 using boost::spirit::x3::_attr
;
98 auto f
= [&](auto& ctx
){ s
= std::string(_attr(ctx
).begin(), _attr(ctx
).end()); };
100 BOOST_TEST(test("a,b,c,d,e,f,g,h", (char_
% ',')[f
]));
101 BOOST_TEST(s
== "abcdefgh");
104 { // test move only types
105 std::vector
<move_only
> v
;
106 BOOST_TEST(test_attr("s.s.s.s", synth_move_only
% '.', v
));
107 BOOST_TEST_EQ(v
.size(), 4);
110 return boost::report_errors();