]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // Copyright (c) 2001-2011 Hartmut Kaiser |
2 | // | |
3 | // Distributed under the Boost Software License, Version 1.0. (See accompanying | |
4 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
5 | ||
7c673cae FG |
6 | #include <boost/config/warning_disable.hpp> |
7 | #include <boost/detail/lightweight_test.hpp> | |
8 | ||
9 | #include <boost/spirit/include/karma_char.hpp> | |
10 | #include <boost/spirit/include/karma_generate.hpp> | |
11 | #include <boost/spirit/include/karma_action.hpp> | |
12 | #include <boost/spirit/include/karma_phoenix_attributes.hpp> | |
13 | ||
14 | #include <boost/spirit/include/phoenix_core.hpp> | |
15 | #include <boost/spirit/include/phoenix_operator.hpp> | |
16 | #include <boost/spirit/include/phoenix_statement.hpp> | |
17 | ||
18 | #include "test.hpp" | |
19 | ||
20 | using namespace spirit_test; | |
21 | ||
22 | /////////////////////////////////////////////////////////////////////////////// | |
23 | int | |
24 | main() | |
25 | { | |
26 | using namespace boost::spirit; | |
27 | using namespace boost::phoenix; | |
28 | ||
29 | { | |
30 | using namespace boost::spirit::ascii; | |
31 | ||
32 | BOOST_TEST(test("x", 'x')); | |
33 | BOOST_TEST(test(L"x", L'x')); | |
34 | BOOST_TEST(!test("x", 'y')); | |
35 | BOOST_TEST(!test(L"x", L'y')); | |
36 | ||
37 | BOOST_TEST(test("x", "x")); | |
38 | BOOST_TEST(test(L"x", L"x")); | |
39 | BOOST_TEST(!test("x", "y")); | |
40 | BOOST_TEST(!test(L"x", L"y")); | |
41 | ||
42 | BOOST_TEST(test("x", char_, 'x')); | |
43 | BOOST_TEST(test(L"x", char_, L'x')); | |
44 | BOOST_TEST(!test("x", char_, 'y')); | |
45 | BOOST_TEST(!test(L"x", char_, L'y')); | |
46 | ||
47 | BOOST_TEST(test("x", char_('x'))); | |
48 | BOOST_TEST(!test("x", char_('y'))); | |
49 | ||
50 | BOOST_TEST(test("x", char_('x'), 'x')); | |
51 | BOOST_TEST(!test("", char_('y'), 'x')); | |
52 | ||
53 | BOOST_TEST(test("x", char_("x"))); | |
54 | ||
55 | BOOST_TEST(test("a", char_('a', 'z'), 'a')); | |
56 | BOOST_TEST(test("b", char_('a', 'z'), 'b')); | |
57 | BOOST_TEST(!test("", char_('a', 'z'), 'A')); | |
58 | ||
59 | BOOST_TEST(test("a", char_("a-z"), 'a')); | |
60 | BOOST_TEST(test("b", char_("a-z"), 'b')); | |
61 | BOOST_TEST(!test("", char_("a-z"), 'A')); | |
62 | ||
63 | #if defined(KARMA_FAIL_COMPILATION) | |
64 | BOOST_TEST(test("x", char_)); // anychar without a parameter doesn't make any sense | |
65 | BOOST_TEST(test("", char_('a', 'z'))); // char sets without attribute neither | |
66 | #endif | |
67 | ||
68 | BOOST_TEST(!test("", ~char_('x'))); | |
69 | ||
70 | BOOST_TEST(!test("", ~char_('x'), 'x')); | |
71 | BOOST_TEST(test("x", ~char_('y'), 'x')); | |
72 | ||
73 | BOOST_TEST(!test("", ~char_("x"))); | |
74 | ||
75 | BOOST_TEST(!test("", ~char_('a', 'z'), 'a')); | |
76 | BOOST_TEST(!test("", ~char_('a', 'z'), 'b')); | |
77 | BOOST_TEST(test("A", ~char_('a', 'z'), 'A')); | |
78 | ||
79 | BOOST_TEST(!test("", ~char_("a-z"), 'a')); | |
80 | BOOST_TEST(!test("", ~char_("a-z"), 'b')); | |
81 | BOOST_TEST(test("A", ~char_("a-z"), 'A')); | |
82 | ||
83 | BOOST_TEST(test("x", ~~char_('x'))); | |
84 | BOOST_TEST(!test("x", ~~char_('y'))); | |
85 | ||
86 | BOOST_TEST(test("x", ~~char_('x'), 'x')); | |
87 | BOOST_TEST(!test("", ~~char_('y'), 'x')); | |
88 | ||
89 | BOOST_TEST(test("x", ~~char_("x"))); | |
90 | ||
91 | BOOST_TEST(test("a", ~~char_('a', 'z'), 'a')); | |
92 | BOOST_TEST(test("b", ~~char_('a', 'z'), 'b')); | |
93 | BOOST_TEST(!test("", ~~char_('a', 'z'), 'A')); | |
94 | ||
95 | BOOST_TEST(test("a", ~~char_("a-z"), 'a')); | |
96 | BOOST_TEST(test("b", ~~char_("a-z"), 'b')); | |
97 | BOOST_TEST(!test("", ~~char_("a-z"), 'A')); | |
98 | } | |
99 | ||
100 | { | |
101 | using namespace boost::spirit::standard_wide; | |
102 | ||
103 | BOOST_TEST(test(L"x", 'x')); | |
104 | BOOST_TEST(test(L"x", L'x')); | |
105 | BOOST_TEST(!test(L"x", 'y')); | |
106 | BOOST_TEST(!test(L"x", L'y')); | |
107 | ||
108 | BOOST_TEST(test(L"x", "x")); | |
109 | BOOST_TEST(test(L"x", L"x")); | |
110 | BOOST_TEST(!test(L"x", "y")); | |
111 | BOOST_TEST(!test(L"x", L"y")); | |
112 | ||
113 | BOOST_TEST(test(L"x", char_, 'x')); | |
114 | BOOST_TEST(test(L"x", char_, L'x')); | |
115 | BOOST_TEST(!test(L"x", char_, 'y')); | |
116 | BOOST_TEST(!test(L"x", char_, L'y')); | |
117 | ||
118 | BOOST_TEST(test(L"x", char_('x'))); | |
119 | BOOST_TEST(test(L"x", char_(L'x'))); | |
120 | BOOST_TEST(!test(L"x", char_('y'))); | |
121 | BOOST_TEST(!test(L"x", char_(L'y'))); | |
122 | ||
123 | BOOST_TEST(test(L"x", char_(L'x'), L'x')); | |
124 | BOOST_TEST(!test(L"", char_('y'), L'x')); | |
125 | ||
126 | BOOST_TEST(test(L"x", char_(L"x"))); | |
127 | ||
128 | BOOST_TEST(test("a", char_("a", "z"), 'a')); | |
129 | BOOST_TEST(test(L"a", char_(L"a", L"z"), L'a')); | |
130 | ||
131 | #if defined(KARMA_FAIL_COMPILATION) | |
132 | BOOST_TEST(test("x", char_)); // anychar without a parameter doesn't make any sense | |
133 | #endif | |
134 | ||
135 | BOOST_TEST(!test(L"", ~char_('x'))); | |
136 | BOOST_TEST(!test(L"", ~char_(L'x'))); | |
137 | ||
138 | BOOST_TEST(!test(L"", ~char_(L'x'), L'x')); | |
139 | BOOST_TEST(test(L"x", ~char_('y'), L'x')); | |
140 | ||
141 | BOOST_TEST(!test(L"", ~char_(L"x"))); | |
142 | } | |
143 | ||
144 | { // lazy chars | |
145 | namespace ascii = boost::spirit::ascii; | |
146 | namespace wide = boost::spirit::standard_wide; | |
147 | ||
148 | using namespace boost::phoenix; | |
149 | ||
150 | BOOST_TEST((test("x", ascii::char_(val('x'))))); | |
151 | BOOST_TEST((test(L"x", wide::char_(val(L'x'))))); | |
152 | ||
153 | BOOST_TEST((test("x", ascii::char_(val('x')), 'x'))); | |
154 | BOOST_TEST((test(L"x", wide::char_(val(L'x')), L'x'))); | |
155 | ||
156 | BOOST_TEST((!test("", ascii::char_(val('y')), 'x'))); | |
157 | BOOST_TEST((!test(L"", wide::char_(val(L'y')), L'x'))); | |
158 | } | |
159 | ||
160 | // we can pass optionals as attributes to any generator | |
161 | { | |
162 | namespace ascii = boost::spirit::ascii; | |
163 | namespace wide = boost::spirit::standard_wide; | |
164 | ||
165 | boost::optional<char> v; | |
166 | boost::optional<wchar_t> w; | |
167 | ||
168 | BOOST_TEST(!test("", ascii::char_, v)); | |
169 | BOOST_TEST(!test(L"", wide::char_, w)); | |
170 | ||
171 | BOOST_TEST(!test("", ascii::char_('x'), v)); | |
172 | BOOST_TEST(!test(L"", wide::char_(L'x'), w)); | |
173 | } | |
174 | ||
175 | return boost::report_errors(); | |
176 | } |