1 /* Test number input.
2 Copyright (C) 2001-2010 Roberto Bagnara <bagnara@cs.unipr.it>
3 Copyright (C) 2010-2016 BUGSENG srl (http://bugseng.com)
4
5 This file is part of the Parma Polyhedra Library (PPL).
6
7 The PPL is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11
12 The PPL is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software Foundation,
19 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, USA.
20
21 For the most up-to-date information see the Parma Polyhedra Library
22 site: http://bugseng.com/products/ppl/ . */
23
24 #include "ppl_test.hh"
25 #include <string>
26 #include <sstream>
27 #include <cstdlib>
28
29 namespace {
30
31 using namespace Checked;
32
33 struct Test_Extended_Number_Policy {
34 const_bool_nodef(check_overflow, true);
35 const_bool_nodef(check_inf_add_inf, false);
36 const_bool_nodef(check_inf_sub_inf, false);
37 const_bool_nodef(check_inf_mul_zero, false);
38 const_bool_nodef(check_div_zero, false);
39 const_bool_nodef(check_inf_div_inf, false);
40 const_bool_nodef(check_inf_mod, false);
41 const_bool_nodef(check_sqrt_neg, false);
42 const_bool_nodef(has_nan, true);
43 const_bool_nodef(has_infinity, true);
44 const_bool_nodef(fpu_check_inexact, false);
45 const_bool_nodef(check_nan_result, true);
46 static const Rounding_Dir ROUND_DEFAULT = ROUND_UP;
47 static void handle_result(Result r);
48 };
49
50 inline void
handle_result(Result r)51 Test_Extended_Number_Policy::handle_result(Result r) {
52 if (r == V_NAN)
53 return;
54 Extended_Number_Policy::handle_result(r);
55 }
56
57 bool
aux_test(std::string input_string,std::string expected_output,std::string expected_residual,Result expected_result)58 aux_test(std::string input_string,
59 std::string expected_output,
60 std::string expected_residual,
61 Result expected_result) {
62 std::stringstream input_stream(input_string);
63 Checked_Number<mpq_class, Test_Extended_Number_Policy> value;
64 Result result = input(value, input_stream, ROUND_UP);
65 // NOTE: clear input_stream status bits, since otherwise the next call
66 // to getline will retrieve nothing at all.
67 input_stream.clear();
68 std::string residual;
69 getline(input_stream, residual, '\0');
70 std::stringstream output_stream;
71 output_stream << value;
72 std::string output = output_stream.str();
73
74 bool ok = (result == expected_result
75 && residual == expected_residual
76 && output == expected_output);
77
78 nout << "input = \"" << input_string << "\""
79 << endl
80 << "expected result = " << expected_result
81 << ", actual result = " << result
82 << endl
83 << "expected value = \"" << expected_output << "\""
84 << ", actual value = \"" << output << "\""
85 << endl
86 << "expected residual = \"" << expected_residual << "\""
87 << ", actual residual = \"" << residual << "\""
88 << endl;
89
90 return ok;
91 }
92
93 // Testing symbols.
94 bool
test01()95 test01() {
96 return aux_test("inf", "+inf", "", V_EQ_PLUS_INFINITY)
97 && aux_test("InF", "+inf", "", V_EQ_PLUS_INFINITY)
98 && aux_test("+inF", "+inf", "", V_EQ_PLUS_INFINITY)
99 && aux_test("-InF", "-inf", "", V_EQ_MINUS_INFINITY)
100 && aux_test("-InFinity", "-inf", "inity", V_EQ_MINUS_INFINITY)
101 && aux_test("Inf7", "+inf", "7", V_EQ_PLUS_INFINITY)
102 && aux_test("nan", "nan", "", V_NAN)
103 && aux_test("NAN", "nan", "", V_NAN)
104 && aux_test("Nan", "nan", "", V_NAN);
105 }
106
107 // Testing symbols with trailing input and errors.
108 bool
test02()109 test02() {
110 return aux_test("nAn+", "nan", "+", V_NAN)
111 && aux_test("naN/", "nan", "/", V_NAN)
112 && aux_test("nAN/0", "nan", "/0", V_NAN)
113 && aux_test("nAN/-3", "nan", "/-3", V_NAN)
114 && aux_test("inF/3", "+inf", "/3", V_EQ_PLUS_INFINITY)
115 && aux_test("Inf/-3", "+inf", "/-3", V_EQ_PLUS_INFINITY)
116 && aux_test("-inf/-3", "-inf", "/-3", V_EQ_MINUS_INFINITY)
117 && aux_test("-NAn", "nan", "NAn", V_CVT_STR_UNK);
118 }
119
120 // Testing integers.
121 bool
test03()122 test03() {
123 return aux_test(" - 2", "nan", " 2", V_CVT_STR_UNK)
124 && aux_test("15", "15", "", V_EQ)
125 && aux_test("34976098", "34976098", "", V_EQ)
126 && aux_test("34976098349760983497609834976098",
127 "34976098349760983497609834976098", "", V_EQ)
128 && aux_test("3/-inf", "nan", "", V_CVT_STR_UNK)
129 && aux_test("+77", "77", "", V_EQ)
130 && aux_test("-77", "-77", "", V_EQ)
131 && aux_test("-7777777777777777777777777",
132 "-7777777777777777777777777", "", V_EQ)
133 && aux_test("-77 ", "-77", " ", V_EQ)
134 && aux_test("-77 ", "-77", " ", V_EQ)
135 && aux_test("-77ab", "-77", "ab", V_EQ)
136 && aux_test("-77,33", "-77", ",33", V_EQ)
137 && aux_test(" - 2", "nan", " 2", V_CVT_STR_UNK);
138 }
139
140 // Testing fractions.
141 bool
test04()142 test04() {
143 return aux_test("71.3", "713/10", "", V_EQ)
144 && aux_test("0.123456", "1929/15625", "", V_EQ)
145 && aux_test("12345678910111213141516.12345678910111213141516",
146 "308641972752780328537903086419727527803285379/25000000000000000000000",
147 "", V_EQ)
148 && aux_test("0.123456 101", "1929/15625", " 101", V_EQ)
149 && aux_test("0.123456 101", "1929/15625", " 101", V_EQ)
150 && aux_test("0.123456 ", "1929/15625", " ", V_EQ)
151 && aux_test(".499975", "19999/40000", "", V_EQ)
152 && aux_test(".333", "333/1000", "", V_EQ)
153 && aux_test("+.333", "333/1000", "", V_EQ)
154 && aux_test("-.333", "-333/1000", "", V_EQ)
155 && aux_test(".0x333", "0", "x333", V_EQ);
156 }
157
158 // Testing exponent.
159 bool
test05()160 test05() {
161 return aux_test("15e1", "150", "", V_EQ)
162 && aux_test("15*^8", "1500000000", "", V_EQ)
163 && aux_test("1*^009", "1000000000", "", V_EQ)
164 && aux_test("15*^111",
165 "15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
166 "", V_EQ)
167 && aux_test("151515e+1", "1515150", "", V_EQ)
168 && aux_test("151515151515151515e+1", "1515151515151515150", "", V_EQ)
169 && aux_test("9200e-2", "92", "", V_EQ)
170 && aux_test("15*^7e4", "150000000", "e4", V_EQ)
171 && aux_test("15*^6/", "nan", "", V_CVT_STR_UNK)
172 && aux_test("9200e", "nan", "", V_CVT_STR_UNK)
173 && aux_test("9200ea", "nan", "a", V_CVT_STR_UNK)
174 && aux_test("9200*^", "nan", "", V_CVT_STR_UNK)
175 && aux_test("9200*^b", "nan", "b", V_CVT_STR_UNK)
176 // Exponent and fraction.
177 && aux_test("5.3e3", "5300", "", V_EQ)
178 && aux_test("2.2e-1", "11/50", "", V_EQ)
179 && aux_test("5.33333*^-4", "533333/1000000000", "", V_EQ)
180 && aux_test("-2.20001*^+3", "-220001/100", "", V_EQ)
181 && aux_test("7.e", "nan", "", V_CVT_STR_UNK)
182 && aux_test("7.0 e3", "7", " e3", V_EQ);
183 }
184
185 // Testing exponent size limit.
186 bool
test06()187 test06() {
188 std::stringstream ss;
189 ss << "1e" << (LONG_MAX / 10) + 1 << "0";
190 std::stringstream ss2;
191 ss2 << "1e" << (LONG_MAX / 10) << (LONG_MAX % 10) + 1;
192 return aux_test(ss.str(), "nan", "", V_CVT_STR_UNK)
193 && aux_test(ss2.str(), "nan", "", V_CVT_STR_UNK);
194 }
195
196 // Testing hexadecimals.
197 bool
test07()198 test07() {
199 return aux_test("0x", "nan", "", V_CVT_STR_UNK)
200 && aux_test("0xx", "nan", "x", V_CVT_STR_UNK)
201 && aux_test("0x0.f", "15/16", "", V_EQ)
202 && aux_test("0x.f", "15/16", "", V_EQ)
203 && aux_test("0x.fp3", "15/2", "", V_EQ)
204 && aux_test("16^^.fp3", "15/2", "", V_EQ)
205 && aux_test("0x100p-9", "1/2", "", V_EQ)
206 && aux_test("16^^100p-9", "1/2", "", V_EQ)
207 && aux_test("100p-9", "nan", "p-9", V_CVT_STR_UNK)
208 && aux_test("0x.f*^1", "15", "", V_EQ)
209 && aux_test("0x-f", "nan", "-f", V_CVT_STR_UNK)
210 && aux_test("0xfa", "250", "", V_EQ)
211 && aux_test("-0xfa", "-250", "", V_EQ)
212 && aux_test("-0x000000000000000000000000fa", "-250", "", V_EQ)
213 && aux_test("-0xfaz", "-250", "z", V_EQ)
214 && aux_test("-0xfa .", "-250", " .", V_EQ)
215 && aux_test("0xfa0xfa", "4000", "xfa", V_EQ)
216 && aux_test("0x0b123", "45347", "", V_EQ);
217 }
218
219 // Testing hexadecimals fractions and exponents.
220 bool
test08()221 test08() {
222 return
223 // Fraction.
224 aux_test("0xfa.a", "2005/8", "", V_EQ)
225 && aux_test("0xfa.ay", "2005/8", "y", V_EQ)
226 && aux_test("-0xfa.", "-250", "", V_EQ)
227 // Exponent.
228 && aux_test("0x1e2", "482", "", V_EQ)
229 && aux_test("0x1*^2", "256", "", V_EQ)
230 && aux_test("0x1*^2-1", "256", "-1", V_EQ)
231 // Fraction and exponent.
232 && aux_test("0x0.1*^3", "256", "", V_EQ)
233 && aux_test("-0x29382a093589c501594f729e672567.2f09f342582b4598*^-2",
234 "-493504168323155221903720496056512238754896365637429427/590295810358705651712",
235 "", V_EQ)
236 && aux_test("-0x29382a093589c501594f729e672567.2f09f342582b4598*^-20",
237 "-493504168323155221903720496056512238754896365637429427/2787593149816327892691964784081045188247552",
238 "", V_EQ)
239 && aux_test("-0x29382a093589c501594f729e672567.2f09f342582b4598*^-20b",
240 "-493504168323155221903720496056512238754896365637429427/2787593149816327892691964784081045188247552",
241 "b", V_EQ)
242 && aux_test("0x0.1*^3 -0", "256", " -0", V_EQ);
243 }
244
245 // Testing bases.
246 bool
test09()247 test09() {
248 return aux_test("3^^", "nan", "", V_CVT_STR_UNK)
249 && aux_test("3^^z", "nan", "z", V_CVT_STR_UNK)
250 && aux_test("^^3", "nan", "^^3", V_CVT_STR_UNK)
251 && aux_test("3^^1", "1", "", V_EQ)
252 && aux_test("2^^0", "0", "", V_EQ)
253 && aux_test("2^^1", "1", "", V_EQ)
254 && aux_test("2^^10", "2", "", V_EQ)
255 && aux_test("2^^11", "3", "", V_EQ)
256 && aux_test("36^^z", "35", "", V_EQ)
257 && aux_test("36^^yz", "1259", "", V_EQ)
258 && aux_test("36^^xyz", "44027", "", V_EQ)
259 && aux_test("37^^2", "nan", "^2", V_CVT_STR_UNK)
260 && aux_test("37^^1.1", "nan", "^1.1", V_CVT_STR_UNK)
261 && aux_test("2^^113", "3", "3", V_EQ)
262 && aux_test("2^^11 3", "3", " 3", V_EQ)
263 && aux_test("3^^e2", "nan", "e2", V_CVT_STR_UNK);
264 }
265
266 // Testing bases with fractions and exponents.
267 bool
test10()268 test10() {
269 return
270 // Fraction.
271 aux_test("2^^11.1", "7/2", "", V_EQ)
272 && aux_test("2^^11.1a", "7/2", "a", V_EQ)
273 && aux_test("2^^11.1.", "7/2", ".", V_EQ)
274 && aux_test("2^^11.1 ", "7/2", " ", V_EQ)
275 // Exponent.
276 && aux_test("10^^2e3", "2000", "", V_EQ)
277 && aux_test("8^^2e3", "1024", "", V_EQ)
278 && aux_test("8^^2e38", "41538374868278621028243970633760768", "", V_EQ)
279 && aux_test("8^^2e3e", "1024", "e", V_EQ)
280 // Fraction and exponent.
281 && aux_test("8^^2.1e3", "1088", "", V_EQ)
282 && aux_test("8^^20402543.120347e7", "9073863231288", "", V_EQ)
283 && aux_test("8^^2.18e3", "17/8", "8e3", V_EQ);
284 }
285
286 // Testing denominators.
287 bool
test11()288 test11() {
289 return aux_test("15/0", "nan", "", V_NAN)
290 && aux_test("15/1", "15", "", V_EQ)
291 && aux_test("15/3", "5", "", V_EQ)
292 && aux_test("15/-3", "-5", "", V_EQ)
293 && aux_test("15/3f", "5", "f", V_EQ);
294 }
295
296 // Testing denominators with fractions and exponents.
297 bool
test12()298 test12() {
299 return
300 // Fraction.
301 aux_test("27.9/3.1", "9", "", V_EQ)
302 && aux_test("27.9/3.1=9", "9", "=9", V_EQ)
303 // Exponent.
304 && aux_test("15/30e-1", "5", "", V_EQ)
305 && aux_test("27e3/30e-1", "9000", "", V_EQ)
306 && aux_test("15*^-3/29e2", "3/580000", "", V_EQ)
307 && aux_test("15/30e-1,2", "5", ",2", V_EQ)
308 && aux_test("15/30e-1.2", "5", ".2", V_EQ)
309 // Exponent and fraction.
310 && aux_test("27.9e3/30e-1", "9300", "", V_EQ)
311 && aux_test("27.9e3/30e-1/2", "9300", "/2", V_EQ)
312 && aux_test("27.9e3/30e-1^^", "9300", "^^", V_EQ);
313 }
314
315 // Testing denominators with hexadecimals and bases.
316 bool
test13()317 test13() {
318 return
319 // Hexadecimal.
320 aux_test("0xf/0x3", "5", "", V_EQ)
321 && aux_test("3048227.23429e3/0x230abc43",
322 "304822723429/58790611500", "", V_EQ)
323 && aux_test("0xf/0x3g", "5", "g", V_EQ)
324 // Base.
325 && aux_test("16^^f/4^^3.0e0*^3", "5", "*^3", V_EQ);
326 }
327
328 // LARGE_NUM has 14057 digits.
329 #define LARGE_NUM "29382093589501594796725672938209358950159472967256372938209358950159472967256729382093589501594729672567293820935899501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729611972567293820935899501594729672567229382093589501594292729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567299382093589501594072967256729382093589501594729672567293820935895015947296725672938209358950159472967256729383333332093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567293820935895015947296725672938209358950159472967256729382093589501594729672567"
330
331 // Testing a very large number.
332 bool
test14()333 test14() {
334 return aux_test(LARGE_NUM, LARGE_NUM, "", V_EQ);
335 }
336
337 } // namespace
338
339 BEGIN_MAIN
340 DO_TEST(test01);
341 DO_TEST(test02);
342 DO_TEST(test03);
343 DO_TEST(test04);
344 DO_TEST(test05);
345 DO_TEST(test06);
346 DO_TEST(test07);
347 DO_TEST(test08);
348 DO_TEST(test09);
349 DO_TEST(test10);
350 DO_TEST(test11);
351 DO_TEST(test12);
352 DO_TEST(test13);
353 DO_TEST(test14);
354 END_MAIN
355