]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/spirit/classic/test/loops_tests.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / spirit / classic / test / loops_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>
10#include <boost/detail/lightweight_test.hpp>
11
12
13//#define BOOST_SPIRIT_DEBUG
14#include <boost/spirit/include/classic_core.hpp>
15#include <boost/spirit/include/classic_loops.hpp>
16using namespace BOOST_SPIRIT_CLASSIC_NS;
17
18///////////////////////////////////////////////////////////////////////////////
19//
20// Loops tests
21//
22///////////////////////////////////////////////////////////////////////////////
23void
24loops_tests()
25{
26 parse_info<char const*> pi;
27
28 pi = parse("\"Hello World\"", "\"" >> *(anychar_p - "\"") >> "\"");
29 BOOST_TEST(pi.hit);
30 BOOST_TEST(pi.full);
31 BOOST_TEST(pi.length == 13);
32 BOOST_TEST(*pi.stop == 0);
33
34 pi = parse("\"Hello World\"", "\"" >> repeat_p(0, more)[anychar_p - "\""] >> "\"");
35 BOOST_TEST(pi.hit);
36 BOOST_TEST(pi.full);
37 BOOST_TEST(pi.length == 13);
38 BOOST_TEST(*pi.stop == 0);
39
40 pi = parse("xx", +ch_p('x'));
41 BOOST_TEST(pi.hit);
42 BOOST_TEST(pi.full);
43 BOOST_TEST(pi.length == 2);
44 BOOST_TEST(*pi.stop == 0);
45
46 pi = parse("xx", repeat_p(1, more)[ch_p('x')]);
47 BOOST_TEST(pi.hit);
48 BOOST_TEST(pi.full);
49 BOOST_TEST(pi.length == 2);
50 BOOST_TEST(*pi.stop == 0);
51
52 pi = parse("", +ch_p('x'));
53 BOOST_TEST(!pi.hit);
54
55 pi = parse("", repeat_p(1, more)[ch_p('x')]);
56 BOOST_TEST(!pi.hit);
57
58 pi = parse("", *ch_p('x'));
59 BOOST_TEST(pi.hit);
60 BOOST_TEST(pi.full);
61 BOOST_TEST(pi.length == 0);
62 BOOST_TEST(*pi.stop == 0);
63
64 pi = parse("", repeat_p(0, more)[ch_p('x')]);
65 BOOST_TEST(pi.hit);
66 BOOST_TEST(pi.full);
67 BOOST_TEST(pi.length == 0);
68 BOOST_TEST(*pi.stop == 0);
69
70 // repeat exact 8
71 rule<> rep8 = repeat_p(8)[alpha_p] >> 'X';
72 BOOST_TEST(!parse("abcdefgX", rep8).hit);
73 BOOST_TEST(parse("abcdefghX", rep8).full);
74 BOOST_TEST(!parse("abcdefghiX", rep8).hit);
75 BOOST_TEST(!parse("abcdefgX", rep8).hit);
76 BOOST_TEST(!parse("aX", rep8).hit);
77
78 // repeat 2 to 8
79 rule<> rep28 = repeat_p(2, 8)[alpha_p] >> '*';
80 BOOST_TEST(parse("abcdefg*", rep28).full);
81 BOOST_TEST(parse("abcdefgh*", rep28).full);
82 BOOST_TEST(!parse("abcdefghi*", rep28).hit);
83 BOOST_TEST(!parse("a*", rep28).hit);
84
85 // repeat 2 or more
86 rule<> rep2_ = repeat_p(2, more)[alpha_p] >> '+';
87 BOOST_TEST(parse("abcdefg+", rep2_).full);
88 BOOST_TEST(parse("abcdefgh+", rep2_).full);
89 BOOST_TEST(parse("abcdefghi+", rep2_).full);
90 BOOST_TEST(parse("abcdefg+", rep2_).full);
91 BOOST_TEST(!parse("a+", rep2_).hit);
92
93 // repeat 0
94 rule<> rep0 = repeat_p(0)[alpha_p] >> '/';
95 BOOST_TEST(parse("/", rep0).full);
96 BOOST_TEST(!parse("a/", rep0).hit);
97
98 // repeat 0 or 1
99 rule<> rep01 = repeat_p(0, 1)[alpha_p >> digit_p] >> '?';
100 BOOST_TEST(!parse("abcdefg?", rep01).hit);
101 BOOST_TEST(!parse("a?", rep01).hit);
102 BOOST_TEST(!parse("1?", rep01).hit);
103 BOOST_TEST(!parse("11?", rep01).hit);
104 BOOST_TEST(!parse("aa?", rep01).hit);
105 BOOST_TEST(parse("?", rep01).full);
106 BOOST_TEST(parse("a1?", rep01).full);
107}
108
109///////////////////////////////////////////////////////////////////////////////
110//
111// Main
112//
113///////////////////////////////////////////////////////////////////////////////
114int
115main()
116{
117 loops_tests();
118 return boost::report_errors();
119}
120