1/*=============================================================================
2 Copyright (c) 2001-2011 Joel de Guzman
3 Copyright (c) 2001-2011 Hartmut Kaiser
4 Copyright (c) 2011 Bryce Lelbach
5
6 Distributed under the Boost Software License, Version 1.0. (See accompanying
7 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8=============================================================================*/
9
10#include "int.hpp"
11#include <boost/spirit/include/qi_rule.hpp>
12
13int
14main()
15{
16 using spirit_test::test;
17 using spirit_test::test_attr;
18
19 ///////////////////////////////////////////////////////////////////////////
20 // parameterized signed integer tests
21 ///////////////////////////////////////////////////////////////////////////
22 {
23 using boost::spirit::int_;
24 int i;
25
26 BOOST_TEST(test("123456", int_(123456)));
27 BOOST_TEST(!test("123456", int_(654321)));
28 BOOST_TEST(test_attr("123456", int_(123456), i));
29 BOOST_TEST(i == 123456);
30 BOOST_TEST(!test_attr("123456", int_(654321), i));
31
32 BOOST_TEST(test("+123456", int_(123456)));
33 BOOST_TEST(!test("+123456", int_(654321)));
34 BOOST_TEST(test_attr("+123456", int_(123456), i));
35 BOOST_TEST(i == 123456);
36 BOOST_TEST(!test_attr("+123456", int_(654321), i));
37
38 BOOST_TEST(test("-123456", int_(-123456)));
39 BOOST_TEST(!test("-123456", int_(123456)));
40 BOOST_TEST(test_attr("-123456", int_(-123456), i));
41 BOOST_TEST(i == -123456);
42 BOOST_TEST(!test_attr("-123456", int_(123456), i));
43
44 BOOST_TEST(test(max_int, int_(INT_MAX)));
45 BOOST_TEST(test_attr(max_int, int_(INT_MAX), i));
46 BOOST_TEST(i == INT_MAX);
47
48 BOOST_TEST(test(min_int, int_(INT_MIN)));
49 BOOST_TEST(test_attr(min_int, int_(INT_MIN), i));
50 BOOST_TEST(i == INT_MIN);
51
52 // with leading zeros
53 BOOST_TEST(test("0000000000123456", int_(123456)));
54 BOOST_TEST(test_attr("0000000000123456", int_(123456), i));
55 BOOST_TEST(i == 123456);
56 }
57
58 ///////////////////////////////////////////////////////////////////////////
59 // parameterized long long tests
60 ///////////////////////////////////////////////////////////////////////////
61#ifdef BOOST_HAS_LONG_LONG
62 {
63 using boost::spirit::long_long;
64 boost::long_long_type ll;
65
66 BOOST_TEST(test("1234567890123456789"
67 , long_long(1234567890123456789LL)));
68 BOOST_TEST(!test("1234567890123456789"
69 , long_long(0)));
70 BOOST_TEST(test_attr("1234567890123456789"
71 , long_long(1234567890123456789LL), ll));
72 BOOST_TEST(ll == 1234567890123456789LL);
73 BOOST_TEST(!test_attr("1234567890123456789"
74 , long_long(0), ll));
75
76 BOOST_TEST(test("-1234567890123456789"
77 , long_long(-1234567890123456789LL)));
78 BOOST_TEST(!test("-1234567890123456789"
79 , long_long(1234567890123456789LL)));
80 BOOST_TEST(test_attr("-1234567890123456789"
81 , long_long(-1234567890123456789LL), ll));
82 BOOST_TEST(ll == -1234567890123456789LL);
83 BOOST_TEST(!test_attr("-1234567890123456789"
84 , long_long(1234567890123456789LL), ll));
85
86 BOOST_TEST(test(max_long_long, long_long(LONG_LONG_MAX)));
87 BOOST_TEST(test_attr(max_long_long, long_long(LONG_LONG_MAX), ll));
88 BOOST_TEST(ll == LONG_LONG_MAX);
89
90 BOOST_TEST(test(min_long_long, long_long(LONG_LONG_MIN)));
91 BOOST_TEST(test_attr(min_long_long, long_long(LONG_LONG_MIN), ll));
92 BOOST_TEST(ll == LONG_LONG_MIN);
93 }
94#endif
95
96 ///////////////////////////////////////////////////////////////////////////
97 // parameterized short_ and long_ tests
98 ///////////////////////////////////////////////////////////////////////////
99 {
100 using boost::spirit::short_;
101 using boost::spirit::long_;
102 int i;
103
104 BOOST_TEST(test("12345", short_(12345)));
105 BOOST_TEST(!test("12345", short_(54321)));
106 BOOST_TEST(test_attr("12345", short_(12345), i));
107 BOOST_TEST(i == 12345);
108 BOOST_TEST(!test_attr("12345", short_(54321), i));
109
110 BOOST_TEST(test("1234567890", long_(1234567890L)));
111 BOOST_TEST(!test("1234567890", long_(987654321L)));
112 BOOST_TEST(test_attr("1234567890", long_(1234567890L), i));
113 BOOST_TEST(i == 1234567890);
114 BOOST_TEST(!test_attr("1234567890", long_(987654321L), i));
115 }
116
117 ///////////////////////////////////////////////////////////////////////////
118 // parameterized action tests
119 ///////////////////////////////////////////////////////////////////////////
120 {
121 using boost::phoenix::ref;
122 using boost::spirit::ascii::space;
123 using boost::spirit::qi::int_;
124 using boost::spirit::qi::_1;
125 int n = 0, m = 0;
126
127 BOOST_TEST(test("123", int_(123)[ref(n) = _1]));
128 BOOST_TEST(n == 123);
129 BOOST_TEST(!test("123", int_(321)[ref(n) = _1]));
130
131 BOOST_TEST(test_attr("789", int_(789)[ref(n) = _1], m));
132 BOOST_TEST(n == 789 && m == 789);
133 BOOST_TEST(!test_attr("789", int_(987)[ref(n) = _1], m));
134
135 BOOST_TEST(test(" 456", int_(456)[ref(n) = _1], space));
136 BOOST_TEST(n == 456);
137 BOOST_TEST(!test(" 456", int_(654)[ref(n) = _1], space));
138 }
139
140 ///////////////////////////////////////////////////////////////////////////
141 {
142 using boost::spirit::qi::int_;
143 using boost::spirit::qi::_1;
144 using boost::spirit::qi::_val;
145 using boost::spirit::qi::space;
146
147 int i = 0;
148 int j = 0;
149 BOOST_TEST(test_attr("456", int_[_val = _1], i) && i == 456);
150 BOOST_TEST(test_attr(" 456", int_[_val = _1], j, space) && j == 456);
151 }
152
153 ///////////////////////////////////////////////////////////////////////////
154 // parameterized lazy tests
155 ///////////////////////////////////////////////////////////////////////////
156 {
157 using boost::phoenix::ref;
158 using boost::spirit::qi::int_;
159 int n = 123, m = 321;
160
161 BOOST_TEST(test("123", int_(ref(n))));
162 BOOST_TEST(!test("123", int_(ref(m))));
163 }
164
165 ///////////////////////////////////////////////////////////////////////////
166 // parameterized custom int tests
167 ///////////////////////////////////////////////////////////////////////////
168 {
169 using boost::spirit::qi::int_;
170 using boost::spirit::qi::int_parser;
171 custom_int i;
172
173 BOOST_TEST(test_attr("-123456", int_(-123456), i));
174 int_parser<custom_int, 10, 1, 2> int2;
175 BOOST_TEST(test_attr("-12", int2(-12), i));
176 }
177
178 return boost::report_errors();
179}
180

source code of boost/libs/spirit/test/qi/int3.cpp