]>
Commit | Line | Data |
---|---|---|
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 | |
19 | using namespace spirit_test; | |
20 | ||
21 | int | |
22 | main() | |
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 | } |