Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

updated boost from 1_33_1 to 1_34_1

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