]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/spirit/classic/test/operators_tests.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / spirit / classic / test / operators_tests.cpp
CommitLineData
7c673cae
FG
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>
7c673cae
FG
10
11using namespace std;
12
7c673cae 13#include <boost/spirit/include/classic_core.hpp>
1e59de90
TL
14
15#include <boost/core/lightweight_test.hpp>
16
7c673cae
FG
17using namespace BOOST_SPIRIT_CLASSIC_NS;
18
19///////////////////////////////////////////////////////////////////////////////
20//
21// Operators tests
22//
23///////////////////////////////////////////////////////////////////////////////
24void
25operators_tests()
26{
27 parse_info<char const*> pi;
28
29 pi = parse("Hello World", str_p("Hello ") >> "World");
30 BOOST_TEST(pi.hit);
31 BOOST_TEST(pi.full);
32 BOOST_TEST(pi.length == 11);
33 BOOST_TEST(*pi.stop == 0);
34
35 pi = parse("Banana", str_p("Banana") | "Pineapple");
36 BOOST_TEST(pi.hit);
37 BOOST_TEST(pi.full);
38 BOOST_TEST(pi.length == 6);
39 BOOST_TEST(*pi.stop == 0);
40
41 pi = parse("Pineapple", str_p("Banana") | "Pineapple");
42 BOOST_TEST(pi.hit);
43 BOOST_TEST(pi.full);
44 BOOST_TEST(pi.length == 9);
45 BOOST_TEST(*pi.stop == 0);
46
47 pi = parse("a.2 ", alpha_p || ('.' >> digit_p));
48 BOOST_TEST(pi.hit);
49 BOOST_TEST(pi.length == 3);
50
51 pi = parse("a ", alpha_p || ('.' >> digit_p));
52 BOOST_TEST(pi.hit);
53 BOOST_TEST(pi.length == 1);
54
55 pi = parse(".1 ", alpha_p || ('.' >> digit_p));
56 BOOST_TEST(pi.hit);
57 BOOST_TEST(pi.length == 2);
58
59 pi = parse("1.a ", alpha_p || ('.' >> digit_p));
60 BOOST_TEST(!pi.hit);
61
62 pi = parse("abcdefghij", +xdigit_p & +alpha_p);
63 BOOST_TEST(pi.hit);
64 BOOST_TEST(pi.length == 6);
65
66 pi = parse("abcdefghij", +alpha_p & +xdigit_p);
67 BOOST_TEST(!pi.hit);
68
69 pi = parse("abcdefghij", +digit_p & +alpha_p);
70 BOOST_TEST(!pi.hit);
71
72 pi = parse("abcdefghij", +alpha_p & +digit_p);
73 BOOST_TEST(!pi.hit);
74
75 // Test for bug reported by Yusaku Sugai here:
76 // http://article.gmane.org/gmane.comp.parsers.spirit.general/8544
77 pi = parse( "foo", (anychar_p & anychar_p), ch_p(' ') );
78 BOOST_TEST(pi.hit);
79
80 pi = parse("F", xdigit_p - range_p('5','8'));
81 BOOST_TEST(pi.hit);
82 BOOST_TEST(pi.length == 1);
83
84 pi = parse("0", xdigit_p - range_p('5','8'));
85 BOOST_TEST(pi.hit);
86 BOOST_TEST(pi.length == 1);
87
88 pi = parse("4", xdigit_p - range_p('5','8'));
89 BOOST_TEST(pi.hit);
90 BOOST_TEST(pi.length == 1);
91
92 pi = parse("9", xdigit_p - range_p('5','8'));
93 BOOST_TEST(pi.hit);
94 BOOST_TEST(pi.length == 1);
95
96 pi = parse("5", xdigit_p - range_p('5','8'));
97 BOOST_TEST(!pi.hit);
98
99 pi = parse("7", xdigit_p - range_p('5','8'));
100 BOOST_TEST(!pi.hit);
101
102 pi = parse("x*/", anychar_p - "*/");
103 BOOST_TEST(pi.hit);
104 BOOST_TEST(pi.length == 1);
105
106 pi = parse("*/", anychar_p - "*/");
107 BOOST_TEST(!pi.hit);
108
109 pi = parse("switcher ", str_p("switcher") - "switch");
110 BOOST_TEST(pi.hit);
111 BOOST_TEST(pi.length == 8);
112
113 pi = parse("Z", alpha_p ^ xdigit_p);
114 BOOST_TEST(pi.hit);
115 BOOST_TEST(pi.length == 1);
116
117 pi = parse("1", alpha_p ^ xdigit_p);
118 BOOST_TEST(pi.hit);
119 BOOST_TEST(pi.length == 1);
120
121 pi = parse("B", alpha_p ^ xdigit_p);
122 BOOST_TEST(!pi.hit);
123
124 pi = parse("B", !alpha_p);
125 BOOST_TEST(pi.hit);
126 BOOST_TEST(pi.length == 1);
127
128 pi = parse("1", !alpha_p);
129 BOOST_TEST(pi.hit);
130 BOOST_TEST(pi.length == 0);
131 BOOST_TEST(*pi.stop == '1');
132
133 pi = parse("1234 5678 1234 5678", *(+digit_p >> *space_p));
134 BOOST_TEST(pi.hit);
135 BOOST_TEST(pi.full);
136 BOOST_TEST(pi.length == 19);
137 BOOST_TEST(*pi.stop == 0);
138
139 pi = parse("abcdefghijklmnopqrstuvwxyz123", *alpha_p);
140 BOOST_TEST(pi.hit);
141 BOOST_TEST(pi.length == 26);
142
143 pi = parse("1234+5678*1234/5678", +digit_p % (ch_p('+') | '*' | '/'));
144 BOOST_TEST(pi.hit);
145 BOOST_TEST(pi.full);
146 BOOST_TEST(pi.length == 19);
147 BOOST_TEST(*pi.stop == 0);
148
149 pi = parse("1234+", +digit_p % '+');
150 BOOST_TEST(pi.hit);
151 BOOST_TEST(!pi.full);
152 BOOST_TEST(pi.length == 4);
153}
154
155///////////////////////////////////////////////////////////////////////////////
156//
157// Main
158//
159///////////////////////////////////////////////////////////////////////////////
160int
161main()
162{
163 operators_tests();
164 return boost::report_errors();
165}
166