]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/x3/list.cpp
import new upstream nautilus stable release 14.2.8
[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 {
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));
30 }
31
32 {
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));
35 }
36
37 {
38 std::string s;
39 BOOST_TEST(test_attr("a,b,c,d,e,f,g,h", char_ % ',', s));
40 BOOST_TEST(s == "abcdefgh");
41
42 BOOST_TEST(!test("a,b,c,d,e,f,g,h,", char_ % ','));
43 }
44
45 {
46 std::string s;
47 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_ >> char_) % ',', s));
48 BOOST_TEST(s == "abcdefgh");
49
50 BOOST_TEST(!test("ab,cd,ef,gh,", (char_ >> char_) % ','));
51 BOOST_TEST(!test("ab,cd,ef,g", (char_ >> char_) % ','));
52
53 s.clear();
54 BOOST_TEST(test_attr("ab,cd,efg", (char_ >> char_) % ',' >> char_, s));
55 BOOST_TEST(s == "abcdefg");
56 }
57
58 {
59 using boost::spirit::x3::int_;
60
61 std::vector<int> v;
62 BOOST_TEST(test_attr("1,2", int_ % ',', v));
63 BOOST_TEST(2 == v.size() && 1 == v[0] && 2 == v[1]);
64 }
65
66 {
67 using boost::spirit::x3::int_;
68
69 std::vector<int> v;
70 BOOST_TEST(test_attr("(1,2)", '(' >> int_ % ',' >> ')', v));
71 BOOST_TEST(2 == v.size() && 1 == v[0] && 2 == v[1]);
72 }
73
74 {
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]);
79 }
80
81 {
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]);
86
87 std::vector<char> v2;
88 BOOST_TEST(test_attr("#a,#", ('#' >> -alpha) % ',', v2));
89 BOOST_TEST(1 == v2.size() && 'a' == v2[0]);
90 }
91
92 { // actions
93 using boost::spirit::x3::_attr;
94
95 std::string s;
96 auto f = [&](auto& ctx){ s = std::string(_attr(ctx).begin(), _attr(ctx).end()); };
97
98 BOOST_TEST(test("a,b,c,d,e,f,g,h", (char_ % ',')[f]));
99 BOOST_TEST(s == "abcdefgh");
100 }
101
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);
106 }
107
108 return boost::report_errors();
109 }