]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/x3/list.cpp
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / boost / libs / spirit / test / x3 / list.cpp
1 /*=============================================================================
2 Copyright (c) 2001-2013 Joel de Guzman
3
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 =============================================================================*/
7 #include <string>
8 #include <vector>
9 #include <set>
10 #include <map>
11
12 #include <boost/detail/lightweight_test.hpp>
13 #include <boost/spirit/home/x3.hpp>
14
15 #include <string>
16 #include <iostream>
17 #include "test.hpp"
18 #include "utils.hpp"
19
20 using namespace spirit_test;
21
22 int
23 main()
24 {
25 using namespace boost::spirit::x3::ascii;
26
27 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(char_ % ',');
28
29 {
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));
32 }
33
34 {
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));
37 }
38
39 {
40 std::string s;
41 BOOST_TEST(test_attr("a,b,c,d,e,f,g,h", char_ % ',', s));
42 BOOST_TEST(s == "abcdefgh");
43
44 BOOST_TEST(!test("a,b,c,d,e,f,g,h,", char_ % ','));
45 }
46
47 {
48 std::string s;
49 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_ >> char_) % ',', s));
50 BOOST_TEST(s == "abcdefgh");
51
52 BOOST_TEST(!test("ab,cd,ef,gh,", (char_ >> char_) % ','));
53 BOOST_TEST(!test("ab,cd,ef,g", (char_ >> char_) % ','));
54
55 s.clear();
56 BOOST_TEST(test_attr("ab,cd,efg", (char_ >> char_) % ',' >> char_, s));
57 BOOST_TEST(s == "abcdefg");
58 }
59
60 {
61 using boost::spirit::x3::int_;
62
63 std::vector<int> v;
64 BOOST_TEST(test_attr("1,2", int_ % ',', v));
65 BOOST_TEST(2 == v.size() && 1 == v[0] && 2 == v[1]);
66 }
67
68 {
69 using boost::spirit::x3::int_;
70
71 std::vector<int> v;
72 BOOST_TEST(test_attr("(1,2)", '(' >> int_ % ',' >> ')', v));
73 BOOST_TEST(2 == v.size() && 1 == v[0] && 2 == v[1]);
74 }
75
76 {
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]);
81 }
82
83 {
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]);
88
89 std::vector<char> v2;
90 BOOST_TEST(test_attr("#a,#", ('#' >> -alpha) % ',', v2));
91 BOOST_TEST(1 == v2.size() && 'a' == v2[0]);
92 }
93
94 { // actions
95 using boost::spirit::x3::_attr;
96
97 std::string s;
98 auto f = [&](auto& ctx){ s = std::string(_attr(ctx).begin(), _attr(ctx).end()); };
99
100 BOOST_TEST(test("a,b,c,d,e,f,g,h", (char_ % ',')[f]));
101 BOOST_TEST(s == "abcdefgh");
102 }
103
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);
108 }
109
110 return boost::report_errors();
111 }