]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/spirit/test/x3/list.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / spirit / test / x3 / list.cpp
CommitLineData
7c673cae
FG
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
7c673cae
FG
12#include <boost/spirit/home/x3.hpp>
13
14#include <string>
15#include <iostream>
16#include "test.hpp"
92f5a8d4 17#include "utils.hpp"
7c673cae
FG
18
19using namespace spirit_test;
20
21int
22main()
23{
24 using namespace boost::spirit::x3::ascii;
25
f67539c2
TL
26 BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(char_ % ',');
27
7c673cae
FG
28 {
29 BOOST_TEST(test("a,b,c,d,e,f,g,h", char_ % ','));
30 BOOST_TEST(test("a,b,c,d,e,f,g,h,", char_ % ',', false));
31 }
32
33 {
34 BOOST_TEST(test("a, b, c, d, e, f, g, h", char_ % ',', space));
35 BOOST_TEST(test("a, b, c, d, e, f, g, h,", char_ % ',', space, false));
36 }
37
38 {
39 std::string s;
40 BOOST_TEST(test_attr("a,b,c,d,e,f,g,h", char_ % ',', s));
41 BOOST_TEST(s == "abcdefgh");
42
43 BOOST_TEST(!test("a,b,c,d,e,f,g,h,", char_ % ','));
44 }
45
46 {
47 std::string s;
48 BOOST_TEST(test_attr("ab,cd,ef,gh", (char_ >> char_) % ',', s));
49 BOOST_TEST(s == "abcdefgh");
50
51 BOOST_TEST(!test("ab,cd,ef,gh,", (char_ >> char_) % ','));
52 BOOST_TEST(!test("ab,cd,ef,g", (char_ >> char_) % ','));
53
54 s.clear();
55 BOOST_TEST(test_attr("ab,cd,efg", (char_ >> char_) % ',' >> char_, s));
56 BOOST_TEST(s == "abcdefg");
57 }
58
1e59de90
TL
59 { // regression test for has_attribute
60 using boost::spirit::x3::int_;
61 using boost::spirit::x3::omit;
62
63 int i;
64 BOOST_TEST(test_attr("1:2,3", int_ >> ':' >> omit[int_] % ',', i))
65 && BOOST_TEST_EQ(i, 1);
66 }
67
7c673cae
FG
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 using boost::spirit::x3::int_;
78
79 std::vector<int> v;
80 BOOST_TEST(test_attr("(1,2)", '(' >> int_ % ',' >> ')', v));
81 BOOST_TEST(2 == v.size() && 1 == v[0] && 2 == v[1]);
82 }
83
84 {
85 std::vector<std::string> v;
86 BOOST_TEST(test_attr("a,b,c,d", +alpha % ',', v));
87 BOOST_TEST(4 == v.size() && "a" == v[0] && "b" == v[1]
88 && "c" == v[2] && "d" == v[3]);
89 }
90
91 {
92 std::vector<boost::optional<char> > v;
93 BOOST_TEST(test_attr("#a,#", ('#' >> -alpha) % ',', v));
94 BOOST_TEST(2 == v.size() &&
95 !!v[0] && 'a' == boost::get<char>(v[0]) && !v[1]);
96
97 std::vector<char> v2;
98 BOOST_TEST(test_attr("#a,#", ('#' >> -alpha) % ',', v2));
99 BOOST_TEST(1 == v2.size() && 'a' == v2[0]);
100 }
101
102 { // actions
103 using boost::spirit::x3::_attr;
104
105 std::string s;
106 auto f = [&](auto& ctx){ s = std::string(_attr(ctx).begin(), _attr(ctx).end()); };
107
108 BOOST_TEST(test("a,b,c,d,e,f,g,h", (char_ % ',')[f]));
109 BOOST_TEST(s == "abcdefgh");
110 }
111
92f5a8d4
TL
112 { // test move only types
113 std::vector<move_only> v;
114 BOOST_TEST(test_attr("s.s.s.s", synth_move_only % '.', v));
115 BOOST_TEST_EQ(v.size(), 4);
116 }
117
7c673cae
FG
118 return boost::report_errors();
119}