| 1 | #include this file into another test for subclass testing...
|
|---|
| 2 |
|
|---|
| 3 | ok ($class->config()->{lib},$CL);
|
|---|
| 4 |
|
|---|
| 5 | $setup = '';
|
|---|
| 6 |
|
|---|
| 7 | while (<DATA>)
|
|---|
| 8 | {
|
|---|
| 9 | chomp;
|
|---|
| 10 | $_ =~ s/#.*$//; # remove comments
|
|---|
| 11 | $_ =~ s/\s+$//; # trailing spaces
|
|---|
| 12 | next if /^$/; # skip empty lines & comments
|
|---|
| 13 | if (s/^&//)
|
|---|
| 14 | {
|
|---|
| 15 | $f = $_;
|
|---|
| 16 | }
|
|---|
| 17 | elsif (/^\$/)
|
|---|
| 18 | {
|
|---|
| 19 | $setup = $_; $setup =~ s/\$/\$${class}::/g; # round_mode, div_scale
|
|---|
| 20 | #print "\$setup== $setup\n";
|
|---|
| 21 | }
|
|---|
| 22 | else
|
|---|
| 23 | {
|
|---|
| 24 | if (m|^(.*?):(/.+)$|)
|
|---|
| 25 | {
|
|---|
| 26 | $ans = $2;
|
|---|
| 27 | @args = split(/:/,$1,99);
|
|---|
| 28 | }
|
|---|
| 29 | else
|
|---|
| 30 | {
|
|---|
| 31 | @args = split(/:/,$_,99); $ans = pop(@args);
|
|---|
| 32 | }
|
|---|
| 33 | $try = "\$x = new $class \"$args[0]\";";
|
|---|
| 34 | if ($f eq "bnorm")
|
|---|
| 35 | {
|
|---|
| 36 | $try .= "\$x;";
|
|---|
| 37 | } elsif ($f eq "finf") {
|
|---|
| 38 | my $a = $args[1] || '';
|
|---|
| 39 | $try .= "\$x->binf('$a');";
|
|---|
| 40 | } elsif ($f eq "is_inf") {
|
|---|
| 41 | $try .= "\$x->is_inf('$args[1]');";
|
|---|
| 42 | } elsif ($f eq "fone") {
|
|---|
| 43 | $try .= "\$x->bone('$args[1]');";
|
|---|
| 44 | } elsif ($f eq "fstr") {
|
|---|
| 45 | $try .= "\$x->accuracy($args[1]); \$x->precision($args[2]);";
|
|---|
| 46 | $try .= '$x->bstr();';
|
|---|
| 47 | } elsif ($f eq "parts") {
|
|---|
| 48 | # ->bstr() to see if an object is returned
|
|---|
| 49 | $try .= '($a,$b) = $x->parts(); $a = $a->bstr(); $b = $b->bstr();';
|
|---|
| 50 | $try .= '"$a $b";';
|
|---|
| 51 | } elsif ($f eq "numerator") {
|
|---|
| 52 | # ->bstr() to see if an object is returned
|
|---|
| 53 | $try .= '$x->numerator()->bstr();';
|
|---|
| 54 | } elsif ($f eq "denominator") {
|
|---|
| 55 | # ->bstr() to see if an object is returned
|
|---|
| 56 | $try .= '$x->denominator()->bstr();';
|
|---|
| 57 | } elsif ($f =~ /^(length|numify)$/) {
|
|---|
| 58 | $try .= "\$x->$f();";
|
|---|
| 59 | # some unary ops (can't test the fxxx form, since no AUTOLOAD in BigRat)
|
|---|
| 60 | } elsif ($f =~ /^f(nan|sstr|neg|floor|ceil|abs)$/) {
|
|---|
| 61 | $try .= "\$x->b$1();";
|
|---|
| 62 | # some is_xxx test function
|
|---|
| 63 | } elsif ($f =~ /^is_(zero|one|pos|neg|negative|positive|odd|even|nan|int)\z/) {
|
|---|
| 64 | $try .= "\$x->$f();";
|
|---|
| 65 | } elsif ($f =~ /^(as_number|as_int)\z/){
|
|---|
| 66 | $try .= "\$x->$1();";
|
|---|
| 67 | } elsif ($f eq "finc") {
|
|---|
| 68 | $try .= '++$x;';
|
|---|
| 69 | } elsif ($f eq "fdec") {
|
|---|
| 70 | $try .= '--$x;';
|
|---|
| 71 | } elsif ($f eq "digit") {
|
|---|
| 72 | $try .= "\$x->digit($args[1]);";
|
|---|
| 73 | } elsif ($f eq "fround") {
|
|---|
| 74 | $try .= "$setup; \$x->bround($args[1]);";
|
|---|
| 75 | } elsif ($f eq "ffround") {
|
|---|
| 76 | $try .= "$setup; \$x->bfround($args[1]);";
|
|---|
| 77 | } elsif ($f eq "fsqrt") {
|
|---|
| 78 | $try .= "$setup; \$x->bsqrt();";
|
|---|
| 79 | } elsif ($f eq "flog") {
|
|---|
| 80 | $try .= "$setup; \$x->blog();";
|
|---|
| 81 | } elsif ($f eq "ffac") {
|
|---|
| 82 | $try .= "$setup; \$x->bfac();";
|
|---|
| 83 | }
|
|---|
| 84 | else
|
|---|
| 85 | {
|
|---|
| 86 | $try .= "\$y = new $class \"$args[1]\";";
|
|---|
| 87 | if ($f eq "bcmp") {
|
|---|
| 88 | $try .= '$x <=> $y;';
|
|---|
| 89 | } elsif ($f eq "bacmp") {
|
|---|
| 90 | $try .= '$x->bacmp($y);';
|
|---|
| 91 | } elsif ($f eq "bpow") {
|
|---|
| 92 | $try .= '$x ** $y;';
|
|---|
| 93 | } elsif ($f eq "fpow") {
|
|---|
| 94 | $try .= '$x->bpow($y);';
|
|---|
| 95 | } elsif ($f eq "badd") {
|
|---|
| 96 | $try .= '$x + $y;';
|
|---|
| 97 | } elsif ($f eq "bsub") {
|
|---|
| 98 | $try .= '$x - $y;';
|
|---|
| 99 | } elsif ($f eq "bmul") {
|
|---|
| 100 | $try .= '$x * $y;';
|
|---|
| 101 | } elsif ($f eq "bdiv") {
|
|---|
| 102 | $try .= "$setup; \$x / \$y;";
|
|---|
| 103 | } elsif ($f eq "fdiv-list") {
|
|---|
| 104 | $try .= "$setup; join(',',\$x->bdiv(\$y));";
|
|---|
| 105 | } elsif ($f eq "brsft") {
|
|---|
| 106 | $try .= '$x >> $y;';
|
|---|
| 107 | } elsif ($f eq "blsft") {
|
|---|
| 108 | $try .= '$x << $y;';
|
|---|
| 109 | } elsif ($f eq "bmod") {
|
|---|
| 110 | $try .= '$x % $y;';
|
|---|
| 111 | } elsif( $f eq "bmodinv") {
|
|---|
| 112 | $try .= "\$x->bmodinv(\$y);";
|
|---|
| 113 | } elsif( $f eq "blog") {
|
|---|
| 114 | $try .= "\$x->blog(\$y);";
|
|---|
| 115 | } else {
|
|---|
| 116 | $try .= "\$z = $class->new(\"$args[2]\");";
|
|---|
| 117 |
|
|---|
| 118 | # Functions with three arguments
|
|---|
| 119 | if( $f eq "bmodpow") {
|
|---|
| 120 | $try .= "\$x->bmodpow(\$y,\$z);";
|
|---|
| 121 | } else { warn "Unknown op '$f'"; }
|
|---|
| 122 | }
|
|---|
| 123 | }
|
|---|
| 124 | # print "# Trying: '$try'\n";
|
|---|
| 125 | $ans1 = eval $try;
|
|---|
| 126 | if ($ans =~ m|^/(.*)$|)
|
|---|
| 127 | {
|
|---|
| 128 | my $pat = $1;
|
|---|
| 129 | if ($ans1 =~ /$pat/)
|
|---|
| 130 | {
|
|---|
| 131 | ok (1,1);
|
|---|
| 132 | }
|
|---|
| 133 | else
|
|---|
| 134 | {
|
|---|
| 135 | print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
|
|---|
| 136 | }
|
|---|
| 137 | }
|
|---|
| 138 | else
|
|---|
| 139 | {
|
|---|
| 140 | if ($ans eq "")
|
|---|
| 141 | {
|
|---|
| 142 | ok_undef ($ans1);
|
|---|
| 143 | }
|
|---|
| 144 | else
|
|---|
| 145 | {
|
|---|
| 146 | print "# Tried: '$try'\n" if !ok ($ans1, $ans);
|
|---|
| 147 | # if (ref($ans1) eq "$class")
|
|---|
| 148 | # {
|
|---|
| 149 | # # float numbers are normalized (for now), so mantissa shouldn't have
|
|---|
| 150 | # # trailing zeros
|
|---|
| 151 | # #print $ans1->_trailing_zeros(),"\n";
|
|---|
| 152 | # print "# Has trailing zeros after '$try'\n"
|
|---|
| 153 | # if !ok ($ans1->{_m}->_trailing_zeros(), 0);
|
|---|
| 154 | # }
|
|---|
| 155 | }
|
|---|
| 156 | } # end pattern or string
|
|---|
| 157 | }
|
|---|
| 158 | } # end while
|
|---|
| 159 |
|
|---|
| 160 | # check whether $class->new( Math::BigInt->new()) destroys it
|
|---|
| 161 | # ($y == 12 in this case)
|
|---|
| 162 | $x = Math::BigInt->new(1200); $y = $class->new($x);
|
|---|
| 163 | ok ($y,1200); ok ($x,1200);
|
|---|
| 164 |
|
|---|
| 165 | ###############################################################################
|
|---|
| 166 | # zero,inf,one,nan
|
|---|
| 167 |
|
|---|
| 168 | $x = $class->new(2); $x->bzero(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
|
|---|
| 169 | $x = $class->new(2); $x->binf(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
|
|---|
| 170 | $x = $class->new(2); $x->bone(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
|
|---|
| 171 | $x = $class->new(2); $x->bnan(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
|
|---|
| 172 |
|
|---|
| 173 | 1; # all done
|
|---|
| 174 |
|
|---|
| 175 | ###############################################################################
|
|---|
| 176 | # Perl 5.005 does not like ok ($x,undef)
|
|---|
| 177 |
|
|---|
| 178 | sub ok_undef
|
|---|
| 179 | {
|
|---|
| 180 | my $x = shift;
|
|---|
| 181 |
|
|---|
| 182 | ok (1,1) and return if !defined $x;
|
|---|
| 183 | ok ($x,'undef');
|
|---|
| 184 | }
|
|---|
| 185 |
|
|---|
| 186 | __DATA__
|
|---|
| 187 | &digit
|
|---|
| 188 | 123:2:1
|
|---|
| 189 | 1234:0:4
|
|---|
| 190 | 1234:1:3
|
|---|
| 191 | 1234:2:2
|
|---|
| 192 | 1234:3:1
|
|---|
| 193 | 1234:-1:1
|
|---|
| 194 | 1234:-2:2
|
|---|
| 195 | 1234:-3:3
|
|---|
| 196 | 1234:-4:4
|
|---|
| 197 | 0:0:0
|
|---|
| 198 | 0:1:0
|
|---|
| 199 | &bmodinv
|
|---|
| 200 | # format: number:modulus:result
|
|---|
| 201 | # bmodinv Data errors
|
|---|
| 202 | abc:abc:NaN
|
|---|
| 203 | abc:5:NaN
|
|---|
| 204 | 5:abc:NaN
|
|---|
| 205 | # bmodinv Expected Results from normal use
|
|---|
| 206 | 1:5:1
|
|---|
| 207 | 3:5:2
|
|---|
| 208 | -2:5:2
|
|---|
| 209 | 8:5033:4404
|
|---|
| 210 | 1234567891:13:6
|
|---|
| 211 | -1234567891:13:7
|
|---|
| 212 | 324958749843759385732954874325984357439658735983745:2348249874968739:1741662881064902
|
|---|
| 213 | ## bmodinv Error cases / useless use of function
|
|---|
| 214 | 3:-5:NaN
|
|---|
| 215 | inf:5:NaN
|
|---|
| 216 | 5:inf:NaN
|
|---|
| 217 | -inf:5:NaN
|
|---|
| 218 | 5:-inf:NaN
|
|---|
| 219 | &as_number
|
|---|
| 220 | 144/7:20
|
|---|
| 221 | 12/1:12
|
|---|
| 222 | -12/1:-12
|
|---|
| 223 | -12/3:-4
|
|---|
| 224 | NaN:NaN
|
|---|
| 225 | +inf:inf
|
|---|
| 226 | -inf:-inf
|
|---|
| 227 | &as_int
|
|---|
| 228 | 144/7:20
|
|---|
| 229 | 12/1:12
|
|---|
| 230 | -12/1:-12
|
|---|
| 231 | -12/3:-4
|
|---|
| 232 | NaN:NaN
|
|---|
| 233 | +inf:inf
|
|---|
| 234 | -inf:-inf
|
|---|
| 235 | &bmodpow
|
|---|
| 236 | # format: number:exponent:modulus:result
|
|---|
| 237 | # bmodpow Data errors
|
|---|
| 238 | abc:abc:abc:NaN
|
|---|
| 239 | 5:abc:abc:NaN
|
|---|
| 240 | abc:5:abc:NaN
|
|---|
| 241 | abc:abc:5:NaN
|
|---|
| 242 | 5:5:abc:NaN
|
|---|
| 243 | 5:abc:5:NaN
|
|---|
| 244 | abc:5:5:NaN
|
|---|
| 245 | # bmodpow Expected results
|
|---|
| 246 | 0:0:2:1
|
|---|
| 247 | 1:0:2:1
|
|---|
| 248 | 0:0:1:0
|
|---|
| 249 | 8:7:5032:3840
|
|---|
| 250 | 8:-1:5033:4404
|
|---|
| 251 | 98436739867439843769485798542749827593285729587325:43698764986460981048259837659386739857456983759328457:6943857329857295827698367:3104744730915914415259518
|
|---|
| 252 | # bmodpow Error cases
|
|---|
| 253 | 8:8:-5:NaN
|
|---|
| 254 | 8:-1:16:NaN
|
|---|
| 255 | inf:5:13:NaN
|
|---|
| 256 | 5:inf:13:NaN
|
|---|
| 257 | &bmod
|
|---|
| 258 | NaN:1:NaN
|
|---|
| 259 | 1:NaN:NaN
|
|---|
| 260 | 1:1:0
|
|---|
| 261 | 2:2:0
|
|---|
| 262 | 12:6:0
|
|---|
| 263 | 7/4:4/14:1/28
|
|---|
| 264 | 7/4:4/16:0
|
|---|
| 265 | -7/4:4/16:0
|
|---|
| 266 | -7/4:-4/16:0
|
|---|
| 267 | 7/4:-4/16:0
|
|---|
| 268 | 7/4:4/32:0
|
|---|
| 269 | -7/4:4/32:0
|
|---|
| 270 | -7/4:-4/32:0
|
|---|
| 271 | 7/4:-4/32:0
|
|---|
| 272 | 7/4:4/28:1/28
|
|---|
| 273 | -7/4:4/28:-1/28
|
|---|
| 274 | 7/4:-4/28:1/28
|
|---|
| 275 | -7/4:-4/28:-1/28
|
|---|
| 276 | &fsqrt
|
|---|
| 277 | 1:1
|
|---|
| 278 | 0:0
|
|---|
| 279 | NaN:NaN
|
|---|
| 280 | +inf:inf
|
|---|
| 281 | -inf:NaN
|
|---|
| 282 | 144:12
|
|---|
| 283 | # sqrt(144) / sqrt(4) = 12/2 = 6/1
|
|---|
| 284 | 144/4:6
|
|---|
| 285 | 25/16:5/4
|
|---|
| 286 | -3:NaN
|
|---|
| 287 | &flog
|
|---|
| 288 | NaN:NaN
|
|---|
| 289 | 0:NaN
|
|---|
| 290 | -2:NaN
|
|---|
| 291 | &blog
|
|---|
| 292 | NaN:NaN:NaN
|
|---|
| 293 | 0:NaN:NaN
|
|---|
| 294 | NaN:0:NaN
|
|---|
| 295 | NaN:1:NaN
|
|---|
| 296 | 1:NaN:NaN
|
|---|
| 297 | 0:2:NaN
|
|---|
| 298 | 0:-2:NaN
|
|---|
| 299 | 3:-2:NaN
|
|---|
| 300 | &finf
|
|---|
| 301 | 1:+:inf
|
|---|
| 302 | 2:-:-inf
|
|---|
| 303 | 3:abc:inf
|
|---|
| 304 | &numify
|
|---|
| 305 | 0:0
|
|---|
| 306 | +1:1
|
|---|
| 307 | 1234:1234
|
|---|
| 308 | 3/4:0.75
|
|---|
| 309 | 5/2:2.5
|
|---|
| 310 | 3/2:1.5
|
|---|
| 311 | 5/4:1.25
|
|---|
| 312 | NaN:NaN
|
|---|
| 313 | +inf:inf
|
|---|
| 314 | -inf:-inf
|
|---|
| 315 | &fnan
|
|---|
| 316 | abc:NaN
|
|---|
| 317 | 2:NaN
|
|---|
| 318 | -2:NaN
|
|---|
| 319 | 0:NaN
|
|---|
| 320 | &fone
|
|---|
| 321 | 2:+:1
|
|---|
| 322 | -2:-:-1
|
|---|
| 323 | -2:+:1
|
|---|
| 324 | 2:-:-1
|
|---|
| 325 | 0::1
|
|---|
| 326 | -2::1
|
|---|
| 327 | abc::1
|
|---|
| 328 | 2:abc:1
|
|---|
| 329 | &fsstr
|
|---|
| 330 | +inf:inf
|
|---|
| 331 | -inf:-inf
|
|---|
| 332 | abcfsstr:NaN
|
|---|
| 333 | 1:1/1
|
|---|
| 334 | 3/1:3/1
|
|---|
| 335 | 0.1:1/10
|
|---|
| 336 | &bnorm
|
|---|
| 337 | 1:1
|
|---|
| 338 | -0:0
|
|---|
| 339 | bnormNaN:NaN
|
|---|
| 340 | +inf:inf
|
|---|
| 341 | -inf:-inf
|
|---|
| 342 | inf/inf:NaN
|
|---|
| 343 | 5/inf:0
|
|---|
| 344 | 5/-inf:0
|
|---|
| 345 | inf/5:inf
|
|---|
| 346 | -inf/5:-inf
|
|---|
| 347 | inf/-5:-inf
|
|---|
| 348 | -inf/-5:inf
|
|---|
| 349 | 123:123
|
|---|
| 350 | -123.4567:-1234567/10000
|
|---|
| 351 | # invalid inputs
|
|---|
| 352 | 1__2:NaN
|
|---|
| 353 | 1E1__2:NaN
|
|---|
| 354 | 11__2E2:NaN
|
|---|
| 355 | #1.E3:NaN
|
|---|
| 356 | .2E-3.:NaN
|
|---|
| 357 | #1e3e4:NaN
|
|---|
| 358 | .2E2:20
|
|---|
| 359 | inf:inf
|
|---|
| 360 | +inf:inf
|
|---|
| 361 | -inf:-inf
|
|---|
| 362 | +infinity:NaN
|
|---|
| 363 | +-inf:NaN
|
|---|
| 364 | abc:NaN
|
|---|
| 365 | 1 a:NaN
|
|---|
| 366 | 1bcd2:NaN
|
|---|
| 367 | 11111b:NaN
|
|---|
| 368 | +1z:NaN
|
|---|
| 369 | -1z:NaN
|
|---|
| 370 | 0:0
|
|---|
| 371 | +0:0
|
|---|
| 372 | +00:0
|
|---|
| 373 | +0_0_0:0
|
|---|
| 374 | 000000_0000000_00000:0
|
|---|
| 375 | -0:0
|
|---|
| 376 | -0000:0
|
|---|
| 377 | +1:1
|
|---|
| 378 | +01:1
|
|---|
| 379 | +001:1
|
|---|
| 380 | +00000100000:100000
|
|---|
| 381 | +00000800/00000010:80
|
|---|
| 382 | -00000800/00000010:-80
|
|---|
| 383 | +00000800/-00000010:-80
|
|---|
| 384 | -00000800/-00000010:80
|
|---|
| 385 | 123456789:123456789
|
|---|
| 386 | -1:-1
|
|---|
| 387 | -01:-1
|
|---|
| 388 | -001:-1
|
|---|
| 389 | -123456789:-123456789
|
|---|
| 390 | -00000100000:-100000
|
|---|
| 391 | 123.456a:NaN
|
|---|
| 392 | 123.456:15432/125
|
|---|
| 393 | 0.01:1/100
|
|---|
| 394 | .002:1/500
|
|---|
| 395 | +.2:1/5
|
|---|
| 396 | -0.0003:-3/10000
|
|---|
| 397 | -.0000000004:-1/2500000000
|
|---|
| 398 | 123456E2:12345600
|
|---|
| 399 | 123456E-2:30864/25
|
|---|
| 400 | -123456E2:-12345600
|
|---|
| 401 | -123456E-2:-30864/25
|
|---|
| 402 | 1e1:10
|
|---|
| 403 | 2e-11:1/50000000000
|
|---|
| 404 | 12/10:6/5
|
|---|
| 405 | 0.1/0.1:1
|
|---|
| 406 | 100/0.1:1000
|
|---|
| 407 | 0.1/10:1/100
|
|---|
| 408 | 1 / 3:1/3
|
|---|
| 409 | 1/ 3:1/3
|
|---|
| 410 | 1 /3:1/3
|
|---|
| 411 | &fneg
|
|---|
| 412 | fnegNaN:NaN
|
|---|
| 413 | +inf:-inf
|
|---|
| 414 | -inf:inf
|
|---|
| 415 | +0:0
|
|---|
| 416 | +1:-1
|
|---|
| 417 | -1:1
|
|---|
| 418 | +123456789:-123456789
|
|---|
| 419 | -123456789:123456789
|
|---|
| 420 | +123.456789:-123456789/1000000
|
|---|
| 421 | -123456.789:123456789/1000
|
|---|
| 422 | 123/7:-123/7
|
|---|
| 423 | -123/7:123/7
|
|---|
| 424 | 123/-7:123/7
|
|---|
| 425 | &fabs
|
|---|
| 426 | fabsNaN:NaN
|
|---|
| 427 | +inf:inf
|
|---|
| 428 | -inf:inf
|
|---|
| 429 | +0:0
|
|---|
| 430 | +1:1
|
|---|
| 431 | -1:1
|
|---|
| 432 | +123456789:123456789
|
|---|
| 433 | -123456789:123456789
|
|---|
| 434 | +123.456789:123456789/1000000
|
|---|
| 435 | -123456.789:123456789/1000
|
|---|
| 436 | &badd
|
|---|
| 437 | abc:abc:NaN
|
|---|
| 438 | abc:+0:NaN
|
|---|
| 439 | +0:abc:NaN
|
|---|
| 440 | +inf:-inf:NaN
|
|---|
| 441 | -inf:+inf:NaN
|
|---|
| 442 | +inf:+inf:inf
|
|---|
| 443 | -inf:-inf:-inf
|
|---|
| 444 | baddNaN:+inf:NaN
|
|---|
| 445 | baddNaN:+inf:NaN
|
|---|
| 446 | +inf:baddNaN:NaN
|
|---|
| 447 | -inf:baddNaN:NaN
|
|---|
| 448 | +0:+0:0
|
|---|
| 449 | +1:+0:1
|
|---|
| 450 | +0:+1:1
|
|---|
| 451 | +1:+1:2
|
|---|
| 452 | -1:+0:-1
|
|---|
| 453 | +0:-1:-1
|
|---|
| 454 | -1:-1:-2
|
|---|
| 455 | -1:+1:0
|
|---|
| 456 | +1:-1:0
|
|---|
| 457 | +9:+1:10
|
|---|
| 458 | +99:+1:100
|
|---|
| 459 | +999:+1:1000
|
|---|
| 460 | +9999:+1:10000
|
|---|
| 461 | +99999:+1:100000
|
|---|
| 462 | +999999:+1:1000000
|
|---|
| 463 | +9999999:+1:10000000
|
|---|
| 464 | +99999999:+1:100000000
|
|---|
| 465 | +999999999:+1:1000000000
|
|---|
| 466 | +9999999999:+1:10000000000
|
|---|
| 467 | +99999999999:+1:100000000000
|
|---|
| 468 | +10:-1:9
|
|---|
| 469 | +100:-1:99
|
|---|
| 470 | +1000:-1:999
|
|---|
| 471 | +10000:-1:9999
|
|---|
| 472 | +100000:-1:99999
|
|---|
| 473 | +1000000:-1:999999
|
|---|
| 474 | +10000000:-1:9999999
|
|---|
| 475 | +100000000:-1:99999999
|
|---|
| 476 | +1000000000:-1:999999999
|
|---|
| 477 | +10000000000:-1:9999999999
|
|---|
| 478 | +123456789:+987654321:1111111110
|
|---|
| 479 | -123456789:+987654321:864197532
|
|---|
| 480 | -123456789:-987654321:-1111111110
|
|---|
| 481 | +123456789:-987654321:-864197532
|
|---|
| 482 | 1/3:1/3:2/3
|
|---|
| 483 | 2/3:-1/3:1/3
|
|---|
| 484 | &bsub
|
|---|
| 485 | abc:abc:NaN
|
|---|
| 486 | abc:+0:NaN
|
|---|
| 487 | +0:abc:NaN
|
|---|
| 488 | +inf:-inf:inf
|
|---|
| 489 | -inf:+inf:-inf
|
|---|
| 490 | +inf:+inf:NaN
|
|---|
| 491 | -inf:-inf:NaN
|
|---|
| 492 | baddNaN:+inf:NaN
|
|---|
| 493 | baddNaN:+inf:NaN
|
|---|
| 494 | +inf:baddNaN:NaN
|
|---|
| 495 | -inf:baddNaN:NaN
|
|---|
| 496 | +0:+0:0
|
|---|
| 497 | +1:+0:1
|
|---|
| 498 | +0:+1:-1
|
|---|
| 499 | +1:+1:0
|
|---|
| 500 | -1:+0:-1
|
|---|
| 501 | +0:-1:1
|
|---|
| 502 | -1:-1:0
|
|---|
| 503 | -1:+1:-2
|
|---|
| 504 | +1:-1:2
|
|---|
| 505 | +9:+1:8
|
|---|
| 506 | +99:+1:98
|
|---|
| 507 | +999:+1:998
|
|---|
| 508 | +9999:+1:9998
|
|---|
| 509 | +99999:+1:99998
|
|---|
| 510 | +999999:+1:999998
|
|---|
| 511 | +9999999:+1:9999998
|
|---|
| 512 | +99999999:+1:99999998
|
|---|
| 513 | +999999999:+1:999999998
|
|---|
| 514 | +9999999999:+1:9999999998
|
|---|
| 515 | +99999999999:+1:99999999998
|
|---|
| 516 | +10:-1:11
|
|---|
| 517 | +100:-1:101
|
|---|
| 518 | +1000:-1:1001
|
|---|
| 519 | +10000:-1:10001
|
|---|
| 520 | +100000:-1:100001
|
|---|
| 521 | +1000000:-1:1000001
|
|---|
| 522 | +10000000:-1:10000001
|
|---|
| 523 | +100000000:-1:100000001
|
|---|
| 524 | +1000000000:-1:1000000001
|
|---|
| 525 | +10000000000:-1:10000000001
|
|---|
| 526 | +123456789:+987654321:-864197532
|
|---|
| 527 | -123456789:+987654321:-1111111110
|
|---|
| 528 | -123456789:-987654321:864197532
|
|---|
| 529 | +123456789:-987654321:1111111110
|
|---|
| 530 | 2/3:1/3:1/3
|
|---|
| 531 | 7/27:3/54:11/54
|
|---|
| 532 | -2/3:+2/3:-4/3
|
|---|
| 533 | -2/3:-2/3:0
|
|---|
| 534 | 0:-123:123
|
|---|
| 535 | 0:123:-123
|
|---|
| 536 | &bmul
|
|---|
| 537 | abc:abc:NaN
|
|---|
| 538 | abc:+0:NaN
|
|---|
| 539 | +0:abc:NaN
|
|---|
| 540 | +inf:NaNmul:NaN
|
|---|
| 541 | +inf:NaNmul:NaN
|
|---|
| 542 | NaNmul:+inf:NaN
|
|---|
| 543 | NaNmul:-inf:NaN
|
|---|
| 544 | +inf:+inf:inf
|
|---|
| 545 | +inf:-inf:-inf
|
|---|
| 546 | +inf:-inf:-inf
|
|---|
| 547 | +inf:+inf:inf
|
|---|
| 548 | +inf:123.34:inf
|
|---|
| 549 | +inf:-123.34:-inf
|
|---|
| 550 | -inf:123.34:-inf
|
|---|
| 551 | -inf:-123.34:inf
|
|---|
| 552 | 123.34:+inf:inf
|
|---|
| 553 | -123.34:+inf:-inf
|
|---|
| 554 | 123.34:-inf:-inf
|
|---|
| 555 | -123.34:-inf:inf
|
|---|
| 556 | +0:+0:0
|
|---|
| 557 | +0:+1:0
|
|---|
| 558 | +1:+0:0
|
|---|
| 559 | +0:-1:0
|
|---|
| 560 | -1:+0:0
|
|---|
| 561 | +123456789123456789:+0:0
|
|---|
| 562 | +0:+123456789123456789:0
|
|---|
| 563 | -1:-1:1
|
|---|
| 564 | -1:+1:-1
|
|---|
| 565 | +1:-1:-1
|
|---|
| 566 | +1:+1:1
|
|---|
| 567 | +2:+3:6
|
|---|
| 568 | -2:+3:-6
|
|---|
| 569 | +2:-3:-6
|
|---|
| 570 | -2:-3:6
|
|---|
| 571 | +111:+111:12321
|
|---|
| 572 | +10101:+10101:102030201
|
|---|
| 573 | +1001001:+1001001:1002003002001
|
|---|
| 574 | +100010001:+100010001:10002000300020001
|
|---|
| 575 | +10000100001:+10000100001:100002000030000200001
|
|---|
| 576 | +11111111111:+9:99999999999
|
|---|
| 577 | +22222222222:+9:199999999998
|
|---|
| 578 | +33333333333:+9:299999999997
|
|---|
| 579 | +44444444444:+9:399999999996
|
|---|
| 580 | +55555555555:+9:499999999995
|
|---|
| 581 | +66666666666:+9:599999999994
|
|---|
| 582 | +77777777777:+9:699999999993
|
|---|
| 583 | +88888888888:+9:799999999992
|
|---|
| 584 | +99999999999:+9:899999999991
|
|---|
| 585 | 6:120:720
|
|---|
| 586 | 10:10000:100000
|
|---|
| 587 | 1/4:1/3:1/12
|
|---|
| 588 | &bdiv
|
|---|
| 589 | $div_scale = 40; $round_mode = 'even'
|
|---|
| 590 | abc:abc:NaN
|
|---|
| 591 | abc:+1:abc:NaN
|
|---|
| 592 | +1:abc:NaN
|
|---|
| 593 | -1:abc:NaN
|
|---|
| 594 | 0:abc:NaN
|
|---|
| 595 | +0:+0:NaN
|
|---|
| 596 | +0:+1:0
|
|---|
| 597 | +1:+0:inf
|
|---|
| 598 | +3214:+0:inf
|
|---|
| 599 | +0:-1:0
|
|---|
| 600 | -1:+0:-inf
|
|---|
| 601 | -3214:+0:-inf
|
|---|
| 602 | +1:+1:1
|
|---|
| 603 | -1:-1:1
|
|---|
| 604 | +1:-1:-1
|
|---|
| 605 | -1:+1:-1
|
|---|
| 606 | +1:+2:1/2
|
|---|
| 607 | +2:+1:2
|
|---|
| 608 | 123:+inf:0
|
|---|
| 609 | 123:-inf:0
|
|---|
| 610 | +10:+5:2
|
|---|
| 611 | +100:+4:25
|
|---|
| 612 | +1000:+8:125
|
|---|
| 613 | +10000:+16:625
|
|---|
| 614 | +10000:-16:-625
|
|---|
| 615 | +999999999999:+9:111111111111
|
|---|
| 616 | +999999999999:+99:10101010101
|
|---|
| 617 | +999999999999:+999:1001001001
|
|---|
| 618 | +999999999999:+9999:100010001
|
|---|
| 619 | +999999999999999:+99999:10000100001
|
|---|
| 620 | +1000000000:+9:1000000000/9
|
|---|
| 621 | +2000000000:+9:2000000000/9
|
|---|
| 622 | +3000000000:+9:1000000000/3
|
|---|
| 623 | +4000000000:+9:4000000000/9
|
|---|
| 624 | +5000000000:+9:5000000000/9
|
|---|
| 625 | +6000000000:+9:2000000000/3
|
|---|
| 626 | +7000000000:+9:7000000000/9
|
|---|
| 627 | +8000000000:+9:8000000000/9
|
|---|
| 628 | +9000000000:+9:1000000000
|
|---|
| 629 | +35500000:+113:35500000/113
|
|---|
| 630 | +71000000:+226:35500000/113
|
|---|
| 631 | +106500000:+339:35500000/113
|
|---|
| 632 | +1000000000:+3:1000000000/3
|
|---|
| 633 | 2:25.024996000799840031993601279744051189762:1000000000000000000000000000000000000000/12512498000399920015996800639872025594881
|
|---|
| 634 | 123456:1:123456
|
|---|
| 635 | 1/4:1/3:3/4
|
|---|
| 636 | # reset scale for further tests
|
|---|
| 637 | $div_scale = 40
|
|---|
| 638 | &is_nan
|
|---|
| 639 | 123:0
|
|---|
| 640 | abc:1
|
|---|
| 641 | NaN:1
|
|---|
| 642 | -123:0
|
|---|
| 643 | &is_inf
|
|---|
| 644 | +inf::1
|
|---|
| 645 | -inf::1
|
|---|
| 646 | abc::0
|
|---|
| 647 | 1::0
|
|---|
| 648 | NaN::0
|
|---|
| 649 | -1::0
|
|---|
| 650 | +inf:-:0
|
|---|
| 651 | +inf:+:1
|
|---|
| 652 | -inf:-:1
|
|---|
| 653 | -inf:+:0
|
|---|
| 654 | # it must be exactly /^[+-]inf$/
|
|---|
| 655 | +infinity::0
|
|---|
| 656 | -infinity::0
|
|---|
| 657 | &is_odd
|
|---|
| 658 | abc:0
|
|---|
| 659 | 0:0
|
|---|
| 660 | -1:1
|
|---|
| 661 | -3:1
|
|---|
| 662 | 1:1
|
|---|
| 663 | 3:1
|
|---|
| 664 | 1000001:1
|
|---|
| 665 | 1000002:0
|
|---|
| 666 | +inf:0
|
|---|
| 667 | -inf:0
|
|---|
| 668 | 123.45:0
|
|---|
| 669 | -123.45:0
|
|---|
| 670 | 2:0
|
|---|
| 671 | &is_int
|
|---|
| 672 | NaNis_int:0
|
|---|
| 673 | 0:1
|
|---|
| 674 | 1:1
|
|---|
| 675 | 2:1
|
|---|
| 676 | -2:1
|
|---|
| 677 | -1:1
|
|---|
| 678 | -inf:0
|
|---|
| 679 | +inf:0
|
|---|
| 680 | 123.4567:0
|
|---|
| 681 | -0.1:0
|
|---|
| 682 | -0.002:0
|
|---|
| 683 | 1/3:0
|
|---|
| 684 | 3/1:1
|
|---|
| 685 | &is_even
|
|---|
| 686 | abc:0
|
|---|
| 687 | 0:1
|
|---|
| 688 | -1:0
|
|---|
| 689 | -3:0
|
|---|
| 690 | 1:0
|
|---|
| 691 | 3:0
|
|---|
| 692 | 1000001:0
|
|---|
| 693 | 1000002:1
|
|---|
| 694 | 2:1
|
|---|
| 695 | +inf:0
|
|---|
| 696 | -inf:0
|
|---|
| 697 | 123.456:0
|
|---|
| 698 | -123.456:0
|
|---|
| 699 | 0.01:0
|
|---|
| 700 | -0.01:0
|
|---|
| 701 | 120:1
|
|---|
| 702 | 1200:1
|
|---|
| 703 | -1200:1
|
|---|
| 704 | &is_pos
|
|---|
| 705 | 0:0
|
|---|
| 706 | 1:1
|
|---|
| 707 | -1:0
|
|---|
| 708 | -123:0
|
|---|
| 709 | NaN:0
|
|---|
| 710 | -inf:0
|
|---|
| 711 | +inf:1
|
|---|
| 712 | &is_positive
|
|---|
| 713 | 0:0
|
|---|
| 714 | 1:1
|
|---|
| 715 | -1:0
|
|---|
| 716 | -123:0
|
|---|
| 717 | NaN:0
|
|---|
| 718 | -inf:0
|
|---|
| 719 | +inf:1
|
|---|
| 720 | &is_neg
|
|---|
| 721 | 0:0
|
|---|
| 722 | 1:0
|
|---|
| 723 | -1:1
|
|---|
| 724 | -123:1
|
|---|
| 725 | NaN:0
|
|---|
| 726 | -inf:1
|
|---|
| 727 | +inf:0
|
|---|
| 728 | &is_negative
|
|---|
| 729 | 0:0
|
|---|
| 730 | 1:0
|
|---|
| 731 | -1:1
|
|---|
| 732 | -123:1
|
|---|
| 733 | NaN:0
|
|---|
| 734 | -inf:1
|
|---|
| 735 | +inf:0
|
|---|
| 736 | &parts
|
|---|
| 737 | 0:0 1
|
|---|
| 738 | 1:1 1
|
|---|
| 739 | 123:123 1
|
|---|
| 740 | -123:-123 1
|
|---|
| 741 | -1200:-1200 1
|
|---|
| 742 | 5/7:5 7
|
|---|
| 743 | -5/7:-5 7
|
|---|
| 744 | NaNparts:NaN NaN
|
|---|
| 745 | +inf:inf inf
|
|---|
| 746 | -inf:-inf inf
|
|---|
| 747 | &length
|
|---|
| 748 | 123:3
|
|---|
| 749 | -123:3
|
|---|
| 750 | 0:1
|
|---|
| 751 | 1:1
|
|---|
| 752 | 12345678901234567890:20
|
|---|
| 753 | &is_zero
|
|---|
| 754 | NaNzero:0
|
|---|
| 755 | +inf:0
|
|---|
| 756 | -inf:0
|
|---|
| 757 | 0:1
|
|---|
| 758 | -1:0
|
|---|
| 759 | 1:0
|
|---|
| 760 | 0/3:1
|
|---|
| 761 | 1/3:0
|
|---|
| 762 | -0/3:1
|
|---|
| 763 | 5/inf:1
|
|---|
| 764 | &is_one
|
|---|
| 765 | NaNone:0
|
|---|
| 766 | +inf:0
|
|---|
| 767 | -inf:0
|
|---|
| 768 | 0:0
|
|---|
| 769 | 2:0
|
|---|
| 770 | 1:1
|
|---|
| 771 | -1:0
|
|---|
| 772 | -2:0
|
|---|
| 773 | 1/3:0
|
|---|
| 774 | 100/100:1
|
|---|
| 775 | 0.1/0.1:1
|
|---|
| 776 | 5/inf:0
|
|---|
| 777 | &ffloor
|
|---|
| 778 | 0:0
|
|---|
| 779 | abc:NaN
|
|---|
| 780 | +inf:inf
|
|---|
| 781 | -inf:-inf
|
|---|
| 782 | 1:1
|
|---|
| 783 | -51:-51
|
|---|
| 784 | -51.2:-52
|
|---|
| 785 | 12.2:12
|
|---|
| 786 | 3/7:0
|
|---|
| 787 | 6/7:0
|
|---|
| 788 | 7/7:1
|
|---|
| 789 | 8/7:1
|
|---|
| 790 | 13/7:1
|
|---|
| 791 | 14/7:2
|
|---|
| 792 | 15/7:2
|
|---|
| 793 | -3/7:-1
|
|---|
| 794 | -6/7:-1
|
|---|
| 795 | -7/1:-7
|
|---|
| 796 | -8/7:-2
|
|---|
| 797 | -13/7:-2
|
|---|
| 798 | -14/7:-2
|
|---|
| 799 | -15/7:-3
|
|---|
| 800 | &fceil
|
|---|
| 801 | 0:0
|
|---|
| 802 | abc:NaN
|
|---|
| 803 | +inf:inf
|
|---|
| 804 | -inf:-inf
|
|---|
| 805 | 1:1
|
|---|
| 806 | -51:-51
|
|---|
| 807 | -51.2:-51
|
|---|
| 808 | 12.2:13
|
|---|
| 809 | 3/7:1
|
|---|
| 810 | 6/7:1
|
|---|
| 811 | 8/7:2
|
|---|
| 812 | 13/7:2
|
|---|
| 813 | 14/7:2
|
|---|
| 814 | 15/7:3
|
|---|
| 815 | -3/7:0
|
|---|
| 816 | -6/7:0
|
|---|
| 817 | -8/7:-1
|
|---|
| 818 | -13/7:-1
|
|---|
| 819 | -14/7:-2
|
|---|
| 820 | -15/7:-2
|
|---|
| 821 | &ffac
|
|---|
| 822 | NaN:NaN
|
|---|
| 823 | 1:1
|
|---|
| 824 | -1:NaN
|
|---|
| 825 | &bpow
|
|---|
| 826 | # bpow test for overload of **
|
|---|
| 827 | 2:2:4
|
|---|
| 828 | 3:3:27
|
|---|
| 829 | &bacmp
|
|---|
| 830 | +0:-0:0
|
|---|
| 831 | +0:+1:-1
|
|---|
| 832 | -1:+1:0
|
|---|
| 833 | +1:-1:0
|
|---|
| 834 | -1:+2:-1
|
|---|
| 835 | +2:-1:1
|
|---|
| 836 | -123456789:+987654321:-1
|
|---|
| 837 | +123456789:-987654321:-1
|
|---|
| 838 | +987654321:+123456789:1
|
|---|
| 839 | -987654321:+123456789:1
|
|---|
| 840 | -123:+4567889:-1
|
|---|
| 841 | # NaNs
|
|---|
| 842 | acmpNaN:123:
|
|---|
| 843 | 123:acmpNaN:
|
|---|
| 844 | acmpNaN:acmpNaN:
|
|---|
| 845 | # infinity
|
|---|
| 846 | +inf:+inf:0
|
|---|
| 847 | -inf:-inf:0
|
|---|
| 848 | +inf:-inf:0
|
|---|
| 849 | -inf:+inf:0
|
|---|
| 850 | +inf:123:1
|
|---|
| 851 | -inf:123:1
|
|---|
| 852 | +inf:-123:1
|
|---|
| 853 | -inf:-123:1
|
|---|
| 854 | +inf:1/23:1
|
|---|
| 855 | -inf:1/23:1
|
|---|
| 856 | +inf:-1/23:1
|
|---|
| 857 | -inf:-1/23:1
|
|---|
| 858 | +inf:12/3:1
|
|---|
| 859 | -inf:12/3:1
|
|---|
| 860 | +inf:-12/3:1
|
|---|
| 861 | -inf:-12/3:1
|
|---|
| 862 | 123:inf:-1
|
|---|
| 863 | -123:inf:-1
|
|---|
| 864 | 123:-inf:-1
|
|---|
| 865 | -123:-inf:-1
|
|---|
| 866 | 1/23:inf:-1
|
|---|
| 867 | -1/23:inf:-1
|
|---|
| 868 | 1/23:-inf:-1
|
|---|
| 869 | -1/23:-inf:-1
|
|---|
| 870 | 12/3:inf:-1
|
|---|
| 871 | -12/3:inf:-1
|
|---|
| 872 | 12/3:-inf:-1
|
|---|
| 873 | -12/3:-inf:-1
|
|---|
| 874 | # return undef
|
|---|
| 875 | +inf:NaN:
|
|---|
| 876 | NaN:inf:
|
|---|
| 877 | -inf:NaN:
|
|---|
| 878 | NaN:-inf:
|
|---|
| 879 | 1/3:2/3:-1
|
|---|
| 880 | 2/3:1/3:1
|
|---|
| 881 | 2/3:2/3:0
|
|---|
| 882 | &fpow
|
|---|
| 883 | 2/1:3/1:8
|
|---|
| 884 | 3/1:3/1:27
|
|---|
| 885 | 5/2:3/1:125/8
|
|---|
| 886 | -2/1:3/1:-8
|
|---|
| 887 | -3/1:3/1:-27
|
|---|
| 888 | -5/2:3/1:-125/8
|
|---|
| 889 | -2/1:4/1:16
|
|---|
| 890 | -3/1:4/1:81
|
|---|
| 891 | -5/2:4/1:625/16
|
|---|
| 892 | -5/2:-4/1:16/625
|
|---|
| 893 | 1/5:-3:125
|
|---|
| 894 | -1/5:-3:-125
|
|---|
| 895 | &numerator
|
|---|
| 896 | NaN:NaN
|
|---|
| 897 | inf:inf
|
|---|
| 898 | -inf:-inf
|
|---|
| 899 | 3/7:3
|
|---|
| 900 | -3/7:-3
|
|---|
| 901 | 0:0
|
|---|
| 902 | 1:1
|
|---|
| 903 | 5/-3:-5
|
|---|
| 904 | &denominator
|
|---|
| 905 | NaN:NaN
|
|---|
| 906 | inf:1
|
|---|
| 907 | -inf:1
|
|---|
| 908 | 3/7:7
|
|---|
| 909 | 0:1
|
|---|
| 910 | 1/1:1
|
|---|
| 911 | -1/1:1
|
|---|
| 912 | -3/7:7
|
|---|
| 913 | 4/-5:5
|
|---|
| 914 | &finc
|
|---|
| 915 | 3/2:5/2
|
|---|
| 916 | -15/6:-3/2
|
|---|
| 917 | NaN:NaN
|
|---|
| 918 | -1/3:2/3
|
|---|
| 919 | -2/7:5/7
|
|---|
| 920 | &fdec
|
|---|
| 921 | 15/6:3/2
|
|---|
| 922 | -3/2:-5/2
|
|---|
| 923 | 1/3:-2/3
|
|---|
| 924 | 2/7:-5/7
|
|---|
| 925 | NaN:NaN
|
|---|