Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/spirit/test/operators_tests.cpp @ 33

Last change on this file since 33 was 29, checked in by landauf, 17 years ago

updated boost from 1_33_1 to 1_34_1

File size: 4.4 KB
Line 
1/*=============================================================================
2    Copyright (c) 1998-2003 Joel de Guzman
3    http://spirit.sourceforge.net/
4
5    Use, modification and distribution is subject to the Boost Software
6    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
7    http://www.boost.org/LICENSE_1_0.txt)
8=============================================================================*/
9#include <iostream>
10#include <boost/detail/lightweight_test.hpp>
11
12using namespace std;
13
14//#define BOOST_SPIRIT_DEBUG
15#include <boost/spirit/core.hpp>
16using namespace boost::spirit;
17
18///////////////////////////////////////////////////////////////////////////////
19//
20//  Operators tests
21//
22///////////////////////////////////////////////////////////////////////////////
23void
24operators_tests()
25{
26    parse_info<char const*> pi;
27
28    pi = parse("Hello World", str_p("Hello ") >> "World");
29    BOOST_TEST(pi.hit);
30    BOOST_TEST(pi.full);
31    BOOST_TEST(pi.length == 11);
32    BOOST_TEST(*pi.stop == 0);
33
34    pi = parse("Banana", str_p("Banana") | "Pineapple");
35    BOOST_TEST(pi.hit);
36    BOOST_TEST(pi.full);
37    BOOST_TEST(pi.length == 6);
38    BOOST_TEST(*pi.stop == 0);
39
40    pi = parse("Pineapple", str_p("Banana") | "Pineapple");
41    BOOST_TEST(pi.hit);
42    BOOST_TEST(pi.full);
43    BOOST_TEST(pi.length == 9);
44    BOOST_TEST(*pi.stop == 0);
45
46    pi = parse("a.2  ", alpha_p || ('.' >> digit_p));
47    BOOST_TEST(pi.hit);
48    BOOST_TEST(pi.length == 3);
49
50    pi = parse("a  ", alpha_p || ('.' >> digit_p));
51    BOOST_TEST(pi.hit);
52    BOOST_TEST(pi.length == 1);
53
54    pi = parse(".1  ", alpha_p || ('.' >> digit_p));
55    BOOST_TEST(pi.hit);
56    BOOST_TEST(pi.length == 2);
57
58    pi = parse("1.a  ", alpha_p || ('.' >> digit_p));
59    BOOST_TEST(!pi.hit);
60
61    pi = parse("abcdefghij", +xdigit_p & +alpha_p);
62    BOOST_TEST(pi.hit);
63    BOOST_TEST(pi.length == 6);
64
65    pi = parse("abcdefghij", +alpha_p & +xdigit_p);
66    BOOST_TEST(!pi.hit);
67
68    pi = parse("abcdefghij", +digit_p & +alpha_p);
69    BOOST_TEST(!pi.hit);
70
71    pi = parse("abcdefghij", +alpha_p & +digit_p);
72    BOOST_TEST(!pi.hit);
73
74    // Test for bug reported by Yusaku Sugai here:
75    // http://article.gmane.org/gmane.comp.parsers.spirit.general/8544
76    pi = parse( "foo", (anychar_p & anychar_p), ch_p(' ') );
77    BOOST_TEST(pi.hit);
78
79    pi = parse("F", xdigit_p - range_p('5','8'));
80    BOOST_TEST(pi.hit);
81    BOOST_TEST(pi.length == 1);
82
83    pi = parse("0", xdigit_p - range_p('5','8'));
84    BOOST_TEST(pi.hit);
85    BOOST_TEST(pi.length == 1);
86
87    pi = parse("4", xdigit_p - range_p('5','8'));
88    BOOST_TEST(pi.hit);
89    BOOST_TEST(pi.length == 1);
90
91    pi = parse("9", xdigit_p - range_p('5','8'));
92    BOOST_TEST(pi.hit);
93    BOOST_TEST(pi.length == 1);
94
95    pi = parse("5", xdigit_p - range_p('5','8'));
96    BOOST_TEST(!pi.hit);
97
98    pi = parse("7", xdigit_p - range_p('5','8'));
99    BOOST_TEST(!pi.hit);
100
101    pi = parse("x*/", anychar_p - "*/");
102    BOOST_TEST(pi.hit);
103    BOOST_TEST(pi.length == 1);
104
105    pi = parse("*/", anychar_p - "*/");
106    BOOST_TEST(!pi.hit);
107
108    pi = parse("switcher  ", str_p("switcher") - "switch");
109    BOOST_TEST(pi.hit);
110    BOOST_TEST(pi.length == 8);
111
112    pi = parse("Z", alpha_p ^ xdigit_p);
113    BOOST_TEST(pi.hit);
114    BOOST_TEST(pi.length == 1);
115
116    pi = parse("1", alpha_p ^ xdigit_p);
117    BOOST_TEST(pi.hit);
118    BOOST_TEST(pi.length == 1);
119
120    pi = parse("B", alpha_p ^ xdigit_p);
121    BOOST_TEST(!pi.hit);
122
123    pi = parse("B", !alpha_p);
124    BOOST_TEST(pi.hit);
125    BOOST_TEST(pi.length == 1);
126
127    pi = parse("1", !alpha_p);
128    BOOST_TEST(pi.hit);
129    BOOST_TEST(pi.length == 0);
130    BOOST_TEST(*pi.stop == '1');
131
132    pi = parse("1234 5678 1234 5678", *(+digit_p >> *space_p));
133    BOOST_TEST(pi.hit);
134    BOOST_TEST(pi.full);
135    BOOST_TEST(pi.length == 19);
136    BOOST_TEST(*pi.stop == 0);
137
138    pi = parse("abcdefghijklmnopqrstuvwxyz123", *alpha_p);
139    BOOST_TEST(pi.hit);
140    BOOST_TEST(pi.length == 26);
141
142    pi = parse("1234+5678*1234/5678", +digit_p % (ch_p('+') | '*' | '/'));
143    BOOST_TEST(pi.hit);
144    BOOST_TEST(pi.full);
145    BOOST_TEST(pi.length == 19);
146    BOOST_TEST(*pi.stop == 0);
147
148    pi = parse("1234+", +digit_p % '+');
149    BOOST_TEST(pi.hit);
150    BOOST_TEST(!pi.full);
151    BOOST_TEST(pi.length == 4);
152}
153
154///////////////////////////////////////////////////////////////////////////////
155//
156//  Main
157//
158///////////////////////////////////////////////////////////////////////////////
159int
160main()
161{
162    operators_tests();
163    return boost::report_errors();
164}
165
Note: See TracBrowser for help on using the repository browser.