]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/x3/expect.cpp
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / boost / libs / spirit / test / x3 / expect.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 <boost/detail/lightweight_test.hpp>
8 #include <boost/spirit/home/x3.hpp>
9 #include <boost/fusion/include/vector.hpp>
10 #include <boost/fusion/include/at.hpp>
11
12 #include <string>
13 #include <iostream>
14 #include "test.hpp"
15
16 int
17 main()
18 {
19 using namespace boost::spirit;
20 using namespace boost::spirit::x3::ascii;
21 using boost::spirit::x3::lit;
22 using boost::spirit::x3::expect;
23 using spirit_test::test;
24 using spirit_test::test_attr;
25 using boost::spirit::x3::expectation_failure;
26
27 {
28 try
29 {
30 BOOST_TEST((test("aa", char_ >> expect[char_])));
31 BOOST_TEST((test("aaa", char_ >> expect[char_ >> char_('a')])));
32 BOOST_TEST((test("xi", char_('x') >> expect[char_('i')])));
33 BOOST_TEST((!test("xi", char_('y') >> expect[char_('o')]))); // should not throw!
34 BOOST_TEST((test("xin", char_('x') >> expect[char_('i') >> char_('n')])));
35 BOOST_TEST((!test("xi", char_('x') >> expect[char_('o')])));
36 }
37 catch (expectation_failure<char const*> const& x)
38 {
39 std::cout << "expected: " << x.which();
40 std::cout << " got: \"" << x.where() << '"' << std::endl;
41 }
42 }
43
44 {
45 try
46 {
47 BOOST_TEST((test("aa", char_ > char_)));
48 BOOST_TEST((test("aaa", char_ > char_ > char_('a'))));
49 BOOST_TEST((test("xi", char_('x') > char_('i'))));
50 BOOST_TEST((!test("xi", char_('y') > char_('o')))); // should not throw!
51 BOOST_TEST((test("xin", char_('x') > char_('i') > char_('n'))));
52 BOOST_TEST((!test("xi", char_('x') > char_('o'))));
53 }
54 catch (expectation_failure<char const*> const& x)
55 {
56 std::cout << "expected: " << x.which();
57 std::cout << " got: \"" << x.where() << '"' << std::endl;
58 }
59 }
60
61 {
62 try
63 {
64 BOOST_TEST((!test("ay:a", char_ > char_('x') >> ':' > 'a')));
65 }
66 catch (expectation_failure<char const*> const& x)
67 {
68 std::cout << "expected: " << x.which();
69 std::cout << " got: \"" << x.where() << '"' << std::endl;
70 }
71 }
72
73 #if defined(BOOST_CLANG)
74 #pragma clang diagnostic push
75 #pragma clang diagnostic ignored "-Woverloaded-shift-op-parentheses"
76 #endif
77 { // Test that attributes with > (sequences) work just like >> (sequences)
78
79 using boost::fusion::vector;
80 using boost::fusion::at_c;
81
82 {
83 vector<char, char, char> attr;
84 BOOST_TEST((test_attr(" a\n b\n c",
85 char_ > char_ > char_, attr, space)));
86 BOOST_TEST((at_c<0>(attr) == 'a'));
87 BOOST_TEST((at_c<1>(attr) == 'b'));
88 BOOST_TEST((at_c<2>(attr) == 'c'));
89 }
90
91 {
92 vector<char, char, char> attr;
93 BOOST_TEST((test_attr(" a\n b\n c",
94 char_ > char_ >> char_, attr, space)));
95 BOOST_TEST((at_c<0>(attr) == 'a'));
96 BOOST_TEST((at_c<1>(attr) == 'b'));
97 BOOST_TEST((at_c<2>(attr) == 'c'));
98 }
99
100 {
101 vector<char, char, char> attr;
102 BOOST_TEST((test_attr(" a, b, c",
103 char_ >> ',' > char_ >> ',' > char_, attr, space)));
104 BOOST_TEST((at_c<0>(attr) == 'a'));
105 BOOST_TEST((at_c<1>(attr) == 'b'));
106 BOOST_TEST((at_c<2>(attr) == 'c'));
107 }
108
109 {
110 std::string attr;
111 BOOST_TEST((test_attr("'azaaz'",
112 "'" > *(char_("a") | char_("z")) > "'", attr, space)));
113 BOOST_TEST(attr == "azaaz");
114 }
115 }
116 #if defined(BOOST_CLANG)
117 #pragma clang diagnostic pop
118 #endif
119
120 {
121 try
122 {
123 BOOST_TEST((test(" a a", char_ > char_, space)));
124 BOOST_TEST((test(" x i", char_('x') > char_('i'), space)));
125 BOOST_TEST((!test(" x i", char_('x') > char_('o'), space)));
126 }
127 catch (expectation_failure<char const*> const& x)
128 {
129 std::cout << "expected: " << x.which();
130 std::cout << " got: \"" << x.where() << '"' << std::endl;
131 }
132 }
133
134 {
135 try
136 {
137 BOOST_TEST((test("bar", expect[lit("foo")])));
138 }
139 catch (expectation_failure<char const*> const& x)
140 {
141 std::cout << "expected: " << x.which();
142 std::cout << " got: \"" << x.where() << '"' << std::endl;
143 }
144 }
145
146 return boost::report_errors();
147 }