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