]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/classic/test/primitives_tests.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / spirit / classic / test / primitives_tests.cpp
1 /*=============================================================================
2 Copyright (c) 1998-2003 Joel de Guzman
3 Copyright (c) 2002-2003 Martin Wille
4 http://spirit.sourceforge.net/
5
6 Use, modification and distribution is subject to the Boost Software
7 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
8 http://www.boost.org/LICENSE_1_0.txt)
9 =============================================================================*/
10 #include <iostream>
11
12 #include <boost/spirit/include/classic_core.hpp>
13 #include <boost/detail/lightweight_test.hpp>
14 #include "impl/string_length.hpp"
15 using namespace BOOST_SPIRIT_CLASSIC_NS;
16
17 ///////////////////////////////////////////////////////////////////////////////
18 //
19 // Primitives tests
20 //
21 ///////////////////////////////////////////////////////////////////////////////
22 void
23 primitives_tests()
24 {
25 char const* cp = "xyz.Jambalaya";
26 char const* cp_first = cp;
27 char const* cp_last = cp + test_impl::string_length(cp);
28
29 chlit<> cpx('x');
30 parse_info<char const*> pi = parse(cp_first, cp_last, cpx);
31 BOOST_TEST(pi.hit);
32 BOOST_TEST(!pi.full);
33 BOOST_TEST(pi.length == 1);
34 BOOST_TEST(pi.stop == &cp[1]);
35
36 pi = parse(pi.stop, ch_p('y'));
37 BOOST_TEST(pi.hit);
38 BOOST_TEST(!pi.full);
39 BOOST_TEST(pi.length == 1);
40 BOOST_TEST(pi.stop == &cp[2]);
41
42 scanner<char const*> scan(pi.stop, cp_last);
43 match<char> hit = ch_p('z').parse(scan);
44 BOOST_TEST(hit);
45 BOOST_TEST(hit.value() == 'z');
46 BOOST_TEST(pi.stop == &cp[3]);
47
48 pi = parse(pi.stop, eps_p);
49 BOOST_TEST(pi.hit);
50 BOOST_TEST(!pi.full);
51 BOOST_TEST(pi.length == 0);
52 BOOST_TEST(pi.stop == &cp[3]);
53
54 pi = parse(pi.stop, nothing_p);
55 BOOST_TEST(!pi.hit);
56 BOOST_TEST(!pi.full);
57 BOOST_TEST(pi.stop == &cp[3]);
58
59 pi = parse(pi.stop, anychar_p);
60 BOOST_TEST(pi.hit);
61 BOOST_TEST(!pi.full);
62 BOOST_TEST(pi.length == 1);
63 BOOST_TEST(pi.stop == &cp[4]);
64
65 scan.first = pi.stop;
66 hit = range_p('A','Z').parse(scan);
67 BOOST_TEST(hit);
68 BOOST_TEST(hit.value() == 'J');
69 BOOST_TEST(pi.stop == &cp[5]);
70
71 strlit<char const*> sp("ambalaya");
72 strlit<wchar_t const*> wsp(L"ambalaya");
73
74 char const* save = pi.stop;
75 pi = parse(save, sp);
76 BOOST_TEST(pi.hit);
77 BOOST_TEST(pi.full);
78 BOOST_TEST(pi.length == 8);
79 BOOST_TEST(pi.stop == cp_last);
80
81 pi = parse(save, wsp);
82 BOOST_TEST(pi.hit);
83 BOOST_TEST(pi.full);
84 BOOST_TEST(pi.length == 8);
85 BOOST_TEST(pi.stop == cp_last);
86
87 pi = parse("\n", eol_p);
88 BOOST_TEST(pi.hit);
89 BOOST_TEST(pi.full);
90
91 pi = parse("\r", eol_p);
92 BOOST_TEST(pi.hit);
93 BOOST_TEST(pi.full);
94
95 pi = parse("\r\n", eol_p);
96 BOOST_TEST(pi.hit);
97 BOOST_TEST(pi.full);
98
99 pi = parse("\n\r", eol_p);
100 BOOST_TEST(pi.hit);
101 BOOST_TEST(!pi.full);
102
103 pi = parse("", end_p);
104 BOOST_TEST(pi.hit);
105 BOOST_TEST(pi.full);
106
107 pi = parse("1", ~alpha_p);
108 BOOST_TEST(pi.hit);
109 BOOST_TEST(pi.full);
110
111 pi = parse("a", ~alpha_p);
112 BOOST_TEST(!pi.hit);
113
114 pi = parse("a", ~~alpha_p);
115 BOOST_TEST(pi.hit);
116 BOOST_TEST(pi.full);
117
118 pi = parse("1", ~~alpha_p);
119 BOOST_TEST(!pi.hit);
120 }
121
122 ///////////////////////////////////////////////////////////////////////////////
123 //
124 // Main
125 //
126 ///////////////////////////////////////////////////////////////////////////////
127 int
128 main()
129 {
130 primitives_tests();
131 if (boost::report_errors() == 0)
132 std::cout << "Tests concluded successfully\n";
133 return boost::report_errors();
134 }
135