• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
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_directive.hpp>
12 
13 #include <string>
14 #include <iterator>
15 
16 #include "test.hpp"
17 
18 ///////////////////////////////////////////////////////////////////////////////
main()19 int main()
20 {
21     using namespace spirit_test;
22     using namespace boost::spirit;
23 
24     {
25         using namespace boost::spirit::ascii;
26         BOOST_TEST(test("a", alpha, 'a'));
27         BOOST_TEST(!test("", alpha, '1'));
28         BOOST_TEST(test(" ", blank, ' '));
29         BOOST_TEST(!test("", blank, 'x'));
30         BOOST_TEST(test("1", digit, '1'));
31         BOOST_TEST(!test("", digit, 'x'));
32         BOOST_TEST(test("a", lower, 'a'));
33         BOOST_TEST(!test("", lower, 'A'));
34         BOOST_TEST(test("!", punct, '!'));
35         BOOST_TEST(!test("", punct, 'x'));
36         BOOST_TEST(test(" ", space));
37         BOOST_TEST(test(" ", space, ' '));
38         BOOST_TEST(!test("", space, '\n'));
39         BOOST_TEST(test("\r", space, '\r'));
40         BOOST_TEST(test("\t", space, '\t'));
41         BOOST_TEST(test("A", upper, 'A'));
42         BOOST_TEST(!test("", upper, 'a'));
43         BOOST_TEST(test("A", xdigit, 'A'));
44         BOOST_TEST(test("0", xdigit, '0'));
45         BOOST_TEST(test("f", xdigit, 'f'));
46         BOOST_TEST(!test("", xdigit, 'g'));
47     }
48 
49     {
50         using namespace boost::spirit::ascii;
51         BOOST_TEST(!test("", ~alpha, 'a'));
52         BOOST_TEST(test("1", ~alpha, '1'));
53         BOOST_TEST(!test("", ~blank, ' '));
54         BOOST_TEST(test("x", ~blank, 'x'));
55         BOOST_TEST(!test("", ~digit, '1'));
56         BOOST_TEST(test("x", ~digit, 'x'));
57         BOOST_TEST(!test("", ~lower, 'a'));
58         BOOST_TEST(test("A", ~lower, 'A'));
59         BOOST_TEST(!test("", ~punct, '!'));
60         BOOST_TEST(test("x", ~punct, 'x'));
61         BOOST_TEST(!test("", ~space));
62         BOOST_TEST(!test("", ~space, ' '));
63         BOOST_TEST(!test("", ~space, '\r'));
64         BOOST_TEST(!test("", ~space, '\t'));
65         BOOST_TEST(!test("", ~upper, 'A'));
66         BOOST_TEST(test("a", ~upper, 'a'));
67         BOOST_TEST(!test("", ~xdigit, 'A'));
68         BOOST_TEST(!test("", ~xdigit, '0'));
69         BOOST_TEST(!test("", ~xdigit, 'f'));
70         BOOST_TEST(test("g", ~xdigit, 'g'));
71     }
72 
73     {
74         using namespace boost::spirit::ascii;
75         BOOST_TEST(test("a", ~~alpha, 'a'));
76         BOOST_TEST(!test("", ~~alpha, '1'));
77         BOOST_TEST(test(" ", ~~blank, ' '));
78         BOOST_TEST(!test("", ~~blank, 'x'));
79         BOOST_TEST(test("1", ~~digit, '1'));
80         BOOST_TEST(!test("", ~~digit, 'x'));
81         BOOST_TEST(test("a", ~~lower, 'a'));
82         BOOST_TEST(!test("", ~~lower, 'A'));
83         BOOST_TEST(test("!", ~~punct, '!'));
84         BOOST_TEST(!test("", ~~punct, 'x'));
85         BOOST_TEST(test(" ", ~~space));
86         BOOST_TEST(test(" ", ~~space, ' '));
87         BOOST_TEST(!test("", ~~space, '\n'));
88         BOOST_TEST(test("\r", ~~space, '\r'));
89         BOOST_TEST(test("\t", ~~space, '\t'));
90         BOOST_TEST(test("A", ~~upper, 'A'));
91         BOOST_TEST(!test("", ~~upper, 'a'));
92         BOOST_TEST(test("A", ~~xdigit, 'A'));
93         BOOST_TEST(test("0", ~~xdigit, '0'));
94         BOOST_TEST(test("f", ~~xdigit, 'f'));
95         BOOST_TEST(!test("", ~~xdigit, 'g'));
96     }
97 
98     {
99         using namespace boost::spirit::ascii;
100         BOOST_TEST(test("a", lower[alpha], 'a'));
101         BOOST_TEST(!test("", lower[alpha], 'A'));
102         BOOST_TEST(!test("", lower[alpha], '1'));
103         BOOST_TEST(test("a", lower[alnum], 'a'));
104         BOOST_TEST(!test("", lower[alnum], 'A'));
105         BOOST_TEST(test("1", lower[alnum], '1'));
106 
107         BOOST_TEST(!test("", upper[alpha], 'a'));
108         BOOST_TEST(test("A", upper[alpha], 'A'));
109         BOOST_TEST(!test("", upper[alpha], '1'));
110         BOOST_TEST(!test("", upper[alnum], 'a'));
111         BOOST_TEST(test("A", upper[alnum], 'A'));
112         BOOST_TEST(test("1", upper[alnum], '1'));
113     }
114 
115     {
116         using namespace boost::spirit::iso8859_1;
117         BOOST_TEST(test("a", alpha, 'a'));
118         BOOST_TEST(!test("", alpha, '1'));
119         BOOST_TEST(test(" ", blank, ' '));
120         BOOST_TEST(!test("", blank, 'x'));
121         BOOST_TEST(test("1", digit, '1'));
122         BOOST_TEST(!test("", digit, 'x'));
123         BOOST_TEST(test("a", lower, 'a'));
124         BOOST_TEST(!test("", lower, 'A'));
125         BOOST_TEST(test("!", punct, '!'));
126         BOOST_TEST(!test("", punct, 'x'));
127         BOOST_TEST(test(" ", space));
128         BOOST_TEST(test(" ", space, ' '));
129         BOOST_TEST(!test("", space, '\n'));
130         BOOST_TEST(test("\r", space, '\r'));
131         BOOST_TEST(test("\t", space, '\t'));
132         BOOST_TEST(test("A", upper, 'A'));
133         BOOST_TEST(!test("", upper, 'a'));
134         BOOST_TEST(test("A", xdigit, 'A'));
135         BOOST_TEST(test("0", xdigit, '0'));
136         BOOST_TEST(test("f", xdigit, 'f'));
137         BOOST_TEST(!test("", xdigit, 'g'));
138 
139 
140         // test extended ASCII characters
141         BOOST_TEST(test("\xE9", alpha, '\xE9'));
142         BOOST_TEST(test("\xE9", lower, '\xE9'));
143         BOOST_TEST(!test("", upper, '\xE9'));
144     }
145 
146     {
147         using namespace boost::spirit::standard;
148         BOOST_TEST(test("a", alpha, 'a'));
149         BOOST_TEST(!test("", alpha, '1'));
150         BOOST_TEST(test(" ", blank, ' '));
151         BOOST_TEST(!test("", blank, 'x'));
152         BOOST_TEST(test("1", digit, '1'));
153         BOOST_TEST(!test("", digit, 'x'));
154         BOOST_TEST(test("a", lower, 'a'));
155         BOOST_TEST(!test("", lower, 'A'));
156         BOOST_TEST(test("!", punct, '!'));
157         BOOST_TEST(!test("", punct, 'x'));
158         BOOST_TEST(test(" ", space));
159         BOOST_TEST(test(" ", space, ' '));
160         BOOST_TEST(!test("", space, '\n'));
161         BOOST_TEST(test("\r", space, '\r'));
162         BOOST_TEST(test("\t", space, '\t'));
163         BOOST_TEST(test("A", upper, 'A'));
164         BOOST_TEST(!test("", upper, 'a'));
165         BOOST_TEST(test("A", xdigit, 'A'));
166         BOOST_TEST(test("0", xdigit, '0'));
167         BOOST_TEST(test("f", xdigit, 'f'));
168         BOOST_TEST(!test("", xdigit, 'g'));
169     }
170 
171     {
172         using namespace boost::spirit::standard_wide;
173         BOOST_TEST(test(L"a", alpha, L'a'));
174         BOOST_TEST(!test(L"", alpha, L'1'));
175         BOOST_TEST(test(L" ", blank, L' '));
176         BOOST_TEST(!test(L"", blank, L'x'));
177         BOOST_TEST(test(L"1", digit, L'1'));
178         BOOST_TEST(!test(L"", digit, L'x'));
179         BOOST_TEST(test(L"a", lower, L'a'));
180         BOOST_TEST(!test(L"", lower, L'A'));
181         BOOST_TEST(test(L"!", punct, L'!'));
182         BOOST_TEST(!test(L"", punct, L'x'));
183         BOOST_TEST(test(L" ", space));
184         BOOST_TEST(test(L" ", space, L' '));
185         BOOST_TEST(!test(L"", space, L'\n'));
186         BOOST_TEST(test(L"\r", space, L'\r'));
187         BOOST_TEST(test(L"\t", space, L'\t'));
188         BOOST_TEST(test(L"A", upper, L'A'));
189         BOOST_TEST(!test(L"", upper, L'a'));
190         BOOST_TEST(test(L"A", xdigit, L'A'));
191         BOOST_TEST(test(L"0", xdigit, L'0'));
192         BOOST_TEST(test(L"f", xdigit, L'f'));
193         BOOST_TEST(!test(L"", xdigit, L'g'));
194     }
195 
196     return boost::report_errors();
197 }
198