Blame t/bigintpm.inc

Packit dcde0c
#include this file into another for subclass testing
Packit dcde0c
Packit dcde0c
use strict;
Packit dcde0c
use warnings;
Packit dcde0c
Packit dcde0c
our ($CLASS, $CALC);
Packit dcde0c
Packit dcde0c
##############################################################################
Packit dcde0c
# for testing inheritance of _swap
Packit dcde0c
Packit dcde0c
package Math::Foo;
Packit dcde0c
Packit dcde0c
use Math::BigInt lib => $main::CALC;
Packit dcde0c
our @ISA = qw/Math::BigInt/;
Packit dcde0c
Packit dcde0c
use overload
Packit dcde0c
  # customized overload for sub, since original does not use swap there
Packit dcde0c
  '-'     =>      sub { my @a = ref($_[0])->_swap(@_);
Packit dcde0c
                        $a[0]->bsub($a[1]);
Packit dcde0c
                      };
Packit dcde0c
Packit dcde0c
sub _swap {
Packit dcde0c
    # a fake _swap, which reverses the params
Packit dcde0c
    my $self = shift;           # for override in subclass
Packit dcde0c
    if ($_[2]) {
Packit dcde0c
        my $c = ref($_[0]) || 'Math::Foo';
Packit dcde0c
        return( $_[0]->copy(), $_[1] );
Packit dcde0c
    } else {
Packit dcde0c
        return( Math::Foo->new($_[1]), $_[0] );
Packit dcde0c
    }
Packit dcde0c
}
Packit dcde0c
Packit dcde0c
##############################################################################
Packit dcde0c
package main;
Packit dcde0c
Packit dcde0c
is($CLASS->config('lib'), $CALC, "$CLASS->config('lib')");
Packit dcde0c
Packit dcde0c
my ($x, $y, $z, @args, $try, $got, $want);
Packit dcde0c
my ($f, $round_mode, $expected_class);
Packit dcde0c
Packit dcde0c
while (<DATA>) {
Packit dcde0c
    s/#.*$//;                   # remove comments
Packit dcde0c
    s/\s+$//;                   # remove trailing whitespace
Packit dcde0c
    next unless length;         # skip empty lines
Packit dcde0c
Packit dcde0c
    my ($m, $e);
Packit dcde0c
Packit dcde0c
    if (s/^&//) {
Packit dcde0c
        $f = $_;
Packit dcde0c
        next;
Packit dcde0c
    }
Packit dcde0c
Packit dcde0c
    if (/^\$/) {
Packit dcde0c
        $round_mode = $_;
Packit dcde0c
        $round_mode =~ s/^\$/$CLASS\->/;
Packit dcde0c
        next;
Packit dcde0c
    }
Packit dcde0c
Packit dcde0c
    @args = split(/:/, $_, 99);
Packit dcde0c
    $want = pop(@args);
Packit dcde0c
    $expected_class = $CLASS;
Packit dcde0c
Packit dcde0c
    if ($want =~ /(.*?)=(.*)/) {
Packit dcde0c
        $expected_class = $2;
Packit dcde0c
        $want = $1;
Packit dcde0c
    }
Packit dcde0c
Packit dcde0c
    $try = qq|\$x = $CLASS->new("$args[0]");|;
Packit dcde0c
    if ($f eq "bnorm") {
Packit dcde0c
        $try = qq|\$x = $CLASS->bnorm("$args[0]");|;
Packit dcde0c
    } elsif ($f =~ /^is_(zero|one|odd|even|negative|positive|nan|int)$/) {
Packit dcde0c
        $try .= " \$x->$f() || 0;";
Packit dcde0c
    } elsif ($f eq "is_inf") {
Packit dcde0c
        $try .= qq| \$x->is_inf("$args[1]");|;
Packit dcde0c
    } elsif ($f eq "binf") {
Packit dcde0c
        $try .= qq| \$x->binf("$args[1]");|;
Packit dcde0c
    } elsif ($f eq "bone") {
Packit dcde0c
        $try .= qq| \$x->bone("$args[1]");|;
Packit dcde0c
    # some unary ops
Packit dcde0c
    } elsif ($f =~ /^b(nan|floor|ceil|int|sstr|neg|abs|sgn|inc|dec|not|sqrt|fac)$/) {
Packit dcde0c
        $try .= " \$x->$f();";
Packit dcde0c
    # overloaded functions
Packit dcde0c
    } elsif ($f =~ /^(log|exp|sin|cos|atan2|int|neg|abs|sqrt)$/) {
Packit dcde0c
        $try .= " \$x = $f(\$x);";
Packit dcde0c
    } elsif ($f =~ /^(numify|length|stringify)$/) {
Packit dcde0c
        $try .= " \$x->$f();";
Packit dcde0c
    } elsif ($f =~ /^(to|as)_(hex|oct|bin)$/) {
Packit dcde0c
        $try .= " \$x->$f();";
Packit dcde0c
    } elsif ($f eq "exponent") {
Packit dcde0c
        # ->bstr() to see if an object is returned
Packit dcde0c
        $try .= ' $x = $x->exponent()->bstr();';
Packit dcde0c
    } elsif ($f eq "mantissa") {
Packit dcde0c
        # ->bstr() to see if an object is returned
Packit dcde0c
        $try .= ' $x = $x->mantissa()->bstr();';
Packit dcde0c
    } elsif ($f eq "parts") {
Packit dcde0c
        $try .= ' ($m, $e) = $x->parts();';
Packit dcde0c
        # ->bstr() to see if an object is returned
Packit dcde0c
        $try .= ' $m = $m->bstr(); $m = "NaN" if !defined $m;';
Packit dcde0c
        $try .= ' $e = $e->bstr(); $e = "NaN" if !defined $e;';
Packit dcde0c
        $try .= ' "$m,$e";';
Packit dcde0c
    } elsif ($f eq "bexp") {
Packit dcde0c
        $try .= " \$x->bexp();";
Packit dcde0c
    } elsif ($f eq "bpi") {
Packit dcde0c
        $try .= " $CLASS\->bpi(\$x);";
Packit dcde0c
    } else {
Packit dcde0c
        # binary operators
Packit dcde0c
        $try .= qq| \$y = $CLASS->new("$args[1]");|;
Packit dcde0c
        if ($f eq "bcmp") {
Packit dcde0c
            $try .= ' $x->bcmp($y);';
Packit dcde0c
        } elsif ($f eq "bround") {
Packit dcde0c
            $try .= " $round_mode; \$x->bround(\$y);";
Packit dcde0c
        } elsif ($f eq "bacmp") {
Packit dcde0c
            $try .= ' $x->bacmp($y);';
Packit dcde0c
        } elsif ($f eq "badd") {
Packit dcde0c
            $try .= ' $x->badd($y);';
Packit dcde0c
        } elsif ($f eq "bsub") {
Packit dcde0c
            $try .= ' $x->bsub($y);';
Packit dcde0c
        } elsif ($f eq "bmul") {
Packit dcde0c
            $try .= ' $x->bmul($y);';
Packit dcde0c
        } elsif ($f eq "bdiv") {
Packit dcde0c
            $try .= ' $x->bdiv($y);';
Packit dcde0c
        } elsif ($f eq "bdiv-list") {
Packit dcde0c
            $try .= ' join(",", $x->bdiv($y));';
Packit dcde0c
        } elsif ($f eq "btdiv") {
Packit dcde0c
            $try .= ' $x->btdiv($y);';
Packit dcde0c
        } elsif ($f eq "btdiv-list") {
Packit dcde0c
            $try .= ' join (",", $x->btdiv($y));';
Packit dcde0c
        # overload via x=
Packit dcde0c
        } elsif ($f =~ /^.=$/) {
Packit dcde0c
            $try .= " \$x $f \$y;";
Packit dcde0c
            # overload via x
Packit dcde0c
        } elsif ($f =~ /^.$/) {
Packit dcde0c
            $try .= " \$x $f \$y;";
Packit dcde0c
        } elsif ($f eq "bmod") {
Packit dcde0c
            $try .= ' $x % $y;';
Packit dcde0c
        } elsif ($f eq "bgcd") {
Packit dcde0c
            if (defined $args[2]) {
Packit dcde0c
                $try .= qq| \$z = $CLASS->new("$args[2]");|;
Packit dcde0c
            }
Packit dcde0c
            $try .= " $CLASS\::bgcd(\$x, \$y";
Packit dcde0c
            $try .= ", \$z" if defined $args[2];
Packit dcde0c
            $try .= ");";
Packit dcde0c
        } elsif ($f eq "blcm") {
Packit dcde0c
            if (defined $args[2]) {
Packit dcde0c
                $try .= qq| \$z = $CLASS->new("$args[2]");|;
Packit dcde0c
            }
Packit dcde0c
            $try .= " $CLASS\::blcm(\$x, \$y";
Packit dcde0c
            $try .= ", \$z" if defined $args[2];
Packit dcde0c
            $try .= ");";
Packit dcde0c
        } elsif ($f eq "blsft") {
Packit dcde0c
            if (defined $args[2]) {
Packit dcde0c
                $try .= " \$x->blsft(\$y, $args[2]);";
Packit dcde0c
            } else {
Packit dcde0c
                $try .= " \$x << \$y;";
Packit dcde0c
            }
Packit dcde0c
        } elsif ($f eq "brsft") {
Packit dcde0c
            if (defined $args[2]) {
Packit dcde0c
                $try .= " \$x->brsft(\$y, $args[2]);";
Packit dcde0c
            } else {
Packit dcde0c
                $try .= " \$x >> \$y;";
Packit dcde0c
            }
Packit dcde0c
        } elsif ($f eq "bnok") {
Packit dcde0c
            $try .= " \$x->bnok(\$y);";
Packit dcde0c
        } elsif ($f eq "broot") {
Packit dcde0c
            $try .= " \$x->broot(\$y);";
Packit dcde0c
        } elsif ($f eq "blog") {
Packit dcde0c
            $try .= " \$x->blog(\$y);";
Packit dcde0c
        } elsif ($f eq "band") {
Packit dcde0c
            $try .= " \$x & \$y;";
Packit dcde0c
        } elsif ($f eq "bior") {
Packit dcde0c
            $try .= " \$x | \$y;";
Packit dcde0c
        } elsif ($f eq "bxor") {
Packit dcde0c
            $try .= " \$x ^ \$y;";
Packit dcde0c
        } elsif ($f eq "bpow") {
Packit dcde0c
            $try .= " \$x ** \$y;";
Packit dcde0c
        } elsif ( $f eq "bmodinv") {
Packit dcde0c
            $try .= " \$x->bmodinv(\$y);";
Packit dcde0c
        } elsif ($f eq "digit") {
Packit dcde0c
            $try .= " \$x->digit(\$y);";
Packit dcde0c
        } elsif ($f eq "batan2") {
Packit dcde0c
            $try .= " \$x->batan2(\$y);";
Packit dcde0c
        } else {
Packit dcde0c
            # Functions with three arguments
Packit dcde0c
            $try .= qq| \$z = $CLASS->new("$args[2]");|;
Packit dcde0c
Packit dcde0c
            if ( $f eq "bmodpow") {
Packit dcde0c
                $try .= " \$x->bmodpow(\$y, \$z);";
Packit dcde0c
            } elsif ($f eq "bmuladd") {
Packit dcde0c
                $try .= " \$x->bmuladd(\$y, \$z);";
Packit dcde0c
            } else {
Packit dcde0c
                warn "Unknown op '$f'";
Packit dcde0c
            }
Packit dcde0c
        }
Packit dcde0c
    }                           # end else all other ops
Packit dcde0c
Packit dcde0c
    $got = eval $try;
Packit dcde0c
    print "# Error: $@\n" if $@;
Packit dcde0c
Packit dcde0c
    # convert hex/binary targets to decimal
Packit dcde0c
    if ($want =~ /^(0x0x|0b0b)/) {
Packit dcde0c
        $want =~ s/^0[xb]//;
Packit dcde0c
        $want = Math::BigInt->new($want)->bstr();
Packit dcde0c
    }
Packit dcde0c
    if ($want eq "") {
Packit dcde0c
        is($got, undef, $try);
Packit dcde0c
    } else {
Packit dcde0c
        # print "try: $try ans: $got $want\n";
Packit dcde0c
        is($got, $want, $try);
Packit dcde0c
        is(ref($got), $expected_class,
Packit dcde0c
           qq|output is a "$expected_class" object|)
Packit dcde0c
          if $expected_class ne $CLASS;
Packit dcde0c
    }
Packit dcde0c
    # check internal state of number objects
Packit dcde0c
    is_valid($got, $f) if ref $got;
Packit dcde0c
}                               # end while data tests
Packit dcde0c
close DATA;
Packit dcde0c
Packit dcde0c
# test whether self-multiplication works correctly (result is 2**64)
Packit dcde0c
$try = qq|\$x = $CLASS->new("4294967296");|;
Packit dcde0c
$try .= ' $a = $x->bmul($x);';
Packit dcde0c
$got = eval $try;
Packit dcde0c
is($got, $CLASS->new(2) ** 64, $try);
Packit dcde0c
Packit dcde0c
# test self-pow
Packit dcde0c
$try = qq|\$x = $CLASS->new(10);|;
Packit dcde0c
$try .= ' $a = $x->bpow($x);';
Packit dcde0c
$got = eval $try;
Packit dcde0c
is($got, $CLASS->new(10) ** 10, $try);
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
# test whether op destroys args or not (should better not)
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(3);
Packit dcde0c
$y = $CLASS->new(4);
Packit dcde0c
$z = $x & $y;
Packit dcde0c
is($x, 3, '$z = $x & $y; $x');
Packit dcde0c
is($y, 4, '$z = $x & $y; $y');
Packit dcde0c
is($z, 0, '$z = $x & $y; $z');
Packit dcde0c
Packit dcde0c
$z = $x | $y;
Packit dcde0c
is($x, 3, '$z = $x | $y; $x');
Packit dcde0c
is($y, 4, '$z = $x | $y; $y');
Packit dcde0c
is($z, 7, '$z = $x | $y; $z');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(1);
Packit dcde0c
$y = $CLASS->new(2);
Packit dcde0c
$z = $x | $y;
Packit dcde0c
is($x, 1, '$z = $x | $y; $x');
Packit dcde0c
is($y, 2, '$z = $x | $y; $y');
Packit dcde0c
is($z, 3, '$z = $x | $y; $z');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(5);
Packit dcde0c
$y = $CLASS->new(4);
Packit dcde0c
$z = $x ^ $y;
Packit dcde0c
is($x, 5, '$z = $x ^ $y; $x');
Packit dcde0c
is($y, 4, '$z = $x ^ $y; $y');
Packit dcde0c
is($z, 1, '$z = $x ^ $y; $z');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(-5);
Packit dcde0c
$y = -$x;
Packit dcde0c
is($x, -5, '$y = -$x; $x');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(-5);
Packit dcde0c
$y = abs($x);
Packit dcde0c
is($x, -5, '$y = abs($x); $x');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(8);
Packit dcde0c
$y = $CLASS->new(-1);
Packit dcde0c
$z = $CLASS->new(5033);
Packit dcde0c
my $u = $x->copy()->bmodpow($y, $z);
Packit dcde0c
is($u, 4404, '$x->copy()->bmodpow($y, $z); $u');
Packit dcde0c
is($y, -1,   '$x->copy()->bmodpow($y, $z); $y');
Packit dcde0c
is($z, 5033, '$x->copy()->bmodpow($y, $z); $z');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(-5);
Packit dcde0c
$y = -$x;
Packit dcde0c
is($x, -5, '$y = -$x; $x');
Packit dcde0c
is($y, 5,  '$y = -$x; $y');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(-5);
Packit dcde0c
$y = $x->copy()->bneg();
Packit dcde0c
is($x, -5, '$y = $x->copy()->bneg(); $x');
Packit dcde0c
is($y, 5,  '$y = $x->copy()->bneg(); $y');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(-5);
Packit dcde0c
$y = $CLASS->new(3);
Packit dcde0c
$x->bmul($y);
Packit dcde0c
is($x, -15, '$x->bmul($y); $x');
Packit dcde0c
is($y, 3,   '$x->bmul($y); $y');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(-5);
Packit dcde0c
$y = $CLASS->new(3);
Packit dcde0c
$x->badd($y);
Packit dcde0c
is($x, -2, '$x->badd($y); $x');
Packit dcde0c
is($y, 3,  '$x->badd($y); $y');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(-5);
Packit dcde0c
$y = $CLASS->new(3);
Packit dcde0c
$x->bsub($y);
Packit dcde0c
is($x, -8, '$x->bsub($y); $x');
Packit dcde0c
is($y, 3,  '$x->bsub($y); $y');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(-15);
Packit dcde0c
$y = $CLASS->new(3);
Packit dcde0c
$x->bdiv($y);
Packit dcde0c
is($x, -5, '$x->bdiv($y); $x');
Packit dcde0c
is($y, 3,  '$x->bdiv($y); $y');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(-5);
Packit dcde0c
$y = $CLASS->new(3);
Packit dcde0c
$x->bmod($y);
Packit dcde0c
is($x, 1, '$x->bmod($y); $x');
Packit dcde0c
is($y, 3, '$x->bmod($y); $y');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(5);
Packit dcde0c
$y = $CLASS->new(3);
Packit dcde0c
$x->bmul($y);
Packit dcde0c
is($x, 15, '$x->bmul($y); $x');
Packit dcde0c
is($y, 3,  '$x->bmul($y); $y');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(5);
Packit dcde0c
$y = $CLASS->new(3);
Packit dcde0c
$x->badd($y);
Packit dcde0c
is($x, 8, '$x->badd($y); $x');
Packit dcde0c
is($y, 3, '$x->badd($y); $y');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(5);
Packit dcde0c
$y = $CLASS->new(3);
Packit dcde0c
$x->bsub($y);
Packit dcde0c
is($x, 2, '$x->bsub($y); $x');
Packit dcde0c
is($y, 3, '$x->bsub($y); $y');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(15);
Packit dcde0c
$y = $CLASS->new(3);
Packit dcde0c
$x->bdiv($y);
Packit dcde0c
is($x, 5, '$x->bdiv($y); $x');
Packit dcde0c
is($y, 3, '$x->bdiv($y); $y');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(5);
Packit dcde0c
$y = $CLASS->new(3);
Packit dcde0c
$x->bmod($y);
Packit dcde0c
is($x, 2, '$x->bmod($y); $x');
Packit dcde0c
is($y, 3, '$x->bmod($y); $y');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(5);
Packit dcde0c
$y = $CLASS->new(-3);
Packit dcde0c
$x->bmul($y);
Packit dcde0c
is($x, -15, '$x->bmul($y); $x');
Packit dcde0c
is($y, -3,  '$x->bmul($y); $y');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(5);
Packit dcde0c
$y = $CLASS->new(-3);
Packit dcde0c
$x->badd($y);
Packit dcde0c
is($x, 2,  '$x->badd($y); $x');
Packit dcde0c
is($y, -3, '$x->badd($y); $y');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(5);
Packit dcde0c
$y = $CLASS->new(-3);
Packit dcde0c
$x->bsub($y);
Packit dcde0c
is($x, 8,  '$x->bsub($y); $x');
Packit dcde0c
is($y, -3, '$x->bsub($y); $y');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(15);
Packit dcde0c
$y = $CLASS->new(-3);
Packit dcde0c
$x->bdiv($y);
Packit dcde0c
is($x, -5, '$x->bdiv($y); $x');
Packit dcde0c
is($y, -3, '$x->bdiv($y); $y');
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(5);
Packit dcde0c
$y = $CLASS->new(-3);
Packit dcde0c
$x->bmod($y);
Packit dcde0c
is($x, -1, '$x->bmod($y); $x');
Packit dcde0c
is($y, -3, '$x->bmod($y); $y');
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
# check whether overloading cmp works
Packit dcde0c
$try = '$x = $CLASS->new(0);';
Packit dcde0c
$try .= ' $y = 10;';
Packit dcde0c
$try .= ' $x ne $y;';
Packit dcde0c
$want = eval $try;
Packit dcde0c
ok($want, "overloading cmp works");
Packit dcde0c
Packit dcde0c
# We can't test for working cmpt with other objects here, we would need a dummy
Packit dcde0c
# object with stringify overload for this. See Math::String tests as example.
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
# check reversed order of arguments
Packit dcde0c
Packit dcde0c
$try = "\$x = $CLASS->new(10); \$x = 2 ** \$x; \$x == 1024;";
Packit dcde0c
$want = eval $try;
Packit dcde0c
ok($want, $try);
Packit dcde0c
Packit dcde0c
$try = "\$x = $CLASS->new(10); \$x = 2 * \$x; \$x == 20;";
Packit dcde0c
$want = eval $try;
Packit dcde0c
ok($want, $try);
Packit dcde0c
Packit dcde0c
$try = "\$x = $CLASS->new(10); \$x = 2 + \$x; \$x == 12;";
Packit dcde0c
$want = eval $try;
Packit dcde0c
ok($want, $try);
Packit dcde0c
Packit dcde0c
$try = "\$x = $CLASS\->new(10); \$x = 2 - \$x; \$x == -8;";
Packit dcde0c
$want = eval $try;
Packit dcde0c
ok($want, $try);
Packit dcde0c
Packit dcde0c
$try = "\$x = $CLASS\->new(10); \$x = 20 / \$x; \$x == 2;";
Packit dcde0c
$want = eval $try;
Packit dcde0c
ok($want, $try);
Packit dcde0c
Packit dcde0c
$try = "\$x = $CLASS\->new(3); \$x = 20 % \$x; \$x == 2;";
Packit dcde0c
$want = eval $try;
Packit dcde0c
ok($want, $try);
Packit dcde0c
Packit dcde0c
$try = "\$x = $CLASS\->new(7); \$x = 20 & \$x; \$x == 4;";
Packit dcde0c
$want = eval $try;
Packit dcde0c
ok($want, $try);
Packit dcde0c
Packit dcde0c
$try = "\$x = $CLASS\->new(7); \$x = 0x20 | \$x; \$x == 0x27;";
Packit dcde0c
$want = eval $try;
Packit dcde0c
ok($want, $try);
Packit dcde0c
Packit dcde0c
$try = "\$x = $CLASS\->new(7); \$x = 0x20 ^ \$x; \$x == 0x27;";
Packit dcde0c
$want = eval $try;
Packit dcde0c
ok($want, $try);
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
# check badd(4, 5) form
Packit dcde0c
Packit dcde0c
$try = "\$x = $CLASS\->badd(4, 5); \$x == 9;";
Packit dcde0c
$want = eval $try;
Packit dcde0c
ok($want, $try);
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
# check undefs: NOT DONE YET
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
# bool
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(1);
Packit dcde0c
if ($x) {
Packit dcde0c
    pass("\$x = $CLASS->new(1); \$x is true");
Packit dcde0c
} else {
Packit dcde0c
    fail("\$x = $CLASS->new(1); \$x is true");
Packit dcde0c
}
Packit dcde0c
Packit dcde0c
$x = $CLASS->new(0);
Packit dcde0c
if (!$x) {
Packit dcde0c
    pass("\$x = $CLASS->new(0); !\$x is false");
Packit dcde0c
} else {
Packit dcde0c
    fail("\$x = $CLASS->new(0); !\$x is false");
Packit dcde0c
}
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
# objectify()
Packit dcde0c
Packit dcde0c
@args = Math::BigInt::objectify(2, 4, 5);
Packit dcde0c
is(scalar(@args), 3,                 "objectify(2, 4, 5) gives $CLASS, 4, 5");
Packit dcde0c
like($args[0],    qr/^Math::BigInt/, "first arg matches /^Math::BigInt/");
Packit dcde0c
is($args[1],      4,                 "second arg is 4");
Packit dcde0c
is($args[2],      5,                 "third arg is 5");
Packit dcde0c
Packit dcde0c
@args = Math::BigInt::objectify(0, 4, 5);
Packit dcde0c
is(scalar(@args), 3,                 "objectify(0, 4, 5) gives $CLASS, 4, 5");
Packit dcde0c
like($args[0],    qr/^Math::BigInt/, "first arg matches /^Math::BigInt/");
Packit dcde0c
is($args[1],      4,                 "second arg is 4");
Packit dcde0c
is($args[2],      5,                 "third arg is 5");
Packit dcde0c
Packit dcde0c
@args = Math::BigInt::objectify(2, 4, 5);
Packit dcde0c
is(scalar(@args), 3,                 "objectify(2, 4, 5) gives $CLASS, 4, 5");
Packit dcde0c
like($args[0],    qr/^Math::BigInt/, "first arg matches /^Math::BigInt/");
Packit dcde0c
is($args[1],      4,                 "second arg is 4");
Packit dcde0c
is($args[2],      5,                 "third arg is 5");
Packit dcde0c
Packit dcde0c
@args = Math::BigInt::objectify(2, 4, 5, 6, 7);
Packit dcde0c
is(scalar(@args), 5,
Packit dcde0c
   "objectify(2, 4, 5, 6, 7) gives $CLASS, 4, 5, 6, 7");
Packit dcde0c
like($args[0],    qr/^Math::BigInt/, "first arg matches /^Math::BigInt/");
Packit dcde0c
is($args[1],      4,                 "second arg is 4");
Packit dcde0c
is(ref($args[1]), $args[0],          "second arg is a $args[0] object");
Packit dcde0c
is($args[2],      5,                 "third arg is 5");
Packit dcde0c
is(ref($args[2]), $args[0],          "third arg is a $args[0] object");
Packit dcde0c
is($args[3],      6,                 "fourth arg is 6");
Packit dcde0c
is(ref($args[3]), '',                "fourth arg is a scalar");
Packit dcde0c
is($args[4],      7,                 "fifth arg is 7");
Packit dcde0c
is(ref($args[4]), '',                "fifth arg is a scalar");
Packit dcde0c
Packit dcde0c
@args = Math::BigInt::objectify(2, $CLASS, 4, 5, 6, 7);
Packit dcde0c
is(scalar(@args), 5,
Packit dcde0c
   "objectify(2, $CLASS, 4, 5, 6, 7) gives $CLASS, 4, 5, 6, 7");
Packit dcde0c
is($args[0],      $CLASS,            "first arg is $CLASS");
Packit dcde0c
is($args[1],      4,                 "second arg is 4");
Packit dcde0c
is(ref($args[1]), $args[0],          "second arg is a $args[0] object");
Packit dcde0c
is($args[2],      5,                 "third arg is 5");
Packit dcde0c
is(ref($args[2]), $args[0],          "third arg is a $args[0] object");
Packit dcde0c
is($args[3],      6,                 "fourth arg is 6");
Packit dcde0c
is(ref($args[3]), '',                "fourth arg is a scalar");
Packit dcde0c
is($args[4],      7,                 "fifth arg is 7");
Packit dcde0c
is(ref($args[4]), '',                "fifth arg is a scalar");
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
# test whether an opp calls objectify properly or not (or at least does what
Packit dcde0c
# it should do given non-objects, w/ or w/o objectify())
Packit dcde0c
Packit dcde0c
is($CLASS->new(123)->badd(123), 246,
Packit dcde0c
   qq|$CLASS->new(123)->badd(123) = 246|);;
Packit dcde0c
is($CLASS->badd(123, 321), 444,
Packit dcde0c
   qq|$CLASS->badd(123, 321) = 444|);;
Packit dcde0c
is($CLASS->badd(123, $CLASS->new(321)), 444,
Packit dcde0c
   qq|$CLASS->badd(123, $CLASS->new(321)) = 444|);;
Packit dcde0c
Packit dcde0c
is($CLASS->new(123)->bsub(122), 1,
Packit dcde0c
   qq|$CLASS->new(123)->bsub(122) = 1|);;
Packit dcde0c
is($CLASS->bsub(321, 123), 198,
Packit dcde0c
   qq|$CLASS->bsub(321, 123) = 198|);;
Packit dcde0c
is($CLASS->bsub(321, $CLASS->new(123)), 198,
Packit dcde0c
   qq|$CLASS->bsub(321, $CLASS->new(123)) = 198|);;
Packit dcde0c
Packit dcde0c
is($CLASS->new(123)->bmul(123), 15129,
Packit dcde0c
   qq|$CLASS->new(123)->bmul(123) = 15129|);;
Packit dcde0c
is($CLASS->bmul(123, 123), 15129,
Packit dcde0c
   qq|$CLASS->bmul(123, 123) = 15129|);;
Packit dcde0c
is($CLASS->bmul(123, $CLASS->new(123)), 15129,
Packit dcde0c
   qq|$CLASS->bmul(123, $CLASS->new(123)) = 15129|);;
Packit dcde0c
Packit dcde0c
is($CLASS->new(15129)->bdiv(123), 123,
Packit dcde0c
   qq|$CLASS->new(15129)->bdiv(123) = 123|);;
Packit dcde0c
is($CLASS->bdiv(15129, 123), 123,
Packit dcde0c
   qq|$CLASS->bdiv(15129, 123) = 123|);;
Packit dcde0c
is($CLASS->bdiv(15129, $CLASS->new(123)), 123,
Packit dcde0c
   qq|$CLASS->bdiv(15129, $CLASS->new(123)) = 123|);;
Packit dcde0c
Packit dcde0c
is($CLASS->new(15131)->bmod(123), 2,
Packit dcde0c
   qq|$CLASS->new(15131)->bmod(123) = 2|);;
Packit dcde0c
is($CLASS->bmod(15131, 123), 2,
Packit dcde0c
   qq|$CLASS->bmod(15131, 123) = 2|);;
Packit dcde0c
is($CLASS->bmod(15131, $CLASS->new(123)), 2,
Packit dcde0c
   qq|$CLASS->bmod(15131, $CLASS->new(123)) = 2|);;
Packit dcde0c
Packit dcde0c
is($CLASS->new(2)->bpow(16), 65536,
Packit dcde0c
   qq|$CLASS->new(2)->bpow(16) = 65536|);;
Packit dcde0c
is($CLASS->bpow(2, 16), 65536,
Packit dcde0c
   qq|$CLASS->bpow(2, 16) = 65536|);;
Packit dcde0c
is($CLASS->bpow(2, $CLASS->new(16)), 65536,
Packit dcde0c
   qq|$CLASS->bpow(2, $CLASS->new(16)) = 65536|);;
Packit dcde0c
Packit dcde0c
is($CLASS->new(2**15)->brsft(1), 2**14,
Packit dcde0c
   qq|$CLASS->new(2**15)->brsft(1) = 2**14|);;
Packit dcde0c
is($CLASS->brsft(2**15, 1), 2**14,
Packit dcde0c
   qq|$CLASS->brsft(2**15, 1) = 2**14|);;
Packit dcde0c
is($CLASS->brsft(2**15, $CLASS->new(1)), 2**14,
Packit dcde0c
   qq|$CLASS->brsft(2**15, $CLASS->new(1)) = 2**14|);;
Packit dcde0c
Packit dcde0c
is($CLASS->new(2**13)->blsft(1), 2**14,
Packit dcde0c
   qq|$CLASS->new(2**13)->blsft(1) = 2**14|);;
Packit dcde0c
is($CLASS->blsft(2**13, 1), 2**14,
Packit dcde0c
   qq|$CLASS->blsft(2**13, 1) = 2**14|);;
Packit dcde0c
is($CLASS->blsft(2**13, $CLASS->new(1)), 2**14,
Packit dcde0c
   qq|$CLASS->blsft(2**13, $CLASS->new(1)) = 2**14|);;
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
# test for floating-point input (other tests in bnorm() below)
Packit dcde0c
Packit dcde0c
$z = 1050000000000000;          # may be int on systems with 64bit?
Packit dcde0c
$x = $CLASS->new($z);
Packit dcde0c
is($x->bsstr(), '105e+13',	# not 1.05e+15
Packit dcde0c
   qq|\$x = $CLASS->new($z); \$x->bsstr() = "105e+13"|);
Packit dcde0c
$z = 1e+129;			# definitely a float (may fail on UTS)
Packit dcde0c
# don't compare to $z, since some Perl versions stringify $z into something
Packit dcde0c
# like '1.e+129' or something equally ugly
Packit dcde0c
SKIP:{
Packit dcde0c
    my $vax_float = (pack("d", 1) =~ /^[\x80\x10]\x40/);
Packit dcde0c
    skip("vax float range smaller", 1) if $vax_float;
Packit dcde0c
    $x = $CLASS->new($z);
Packit dcde0c
    is($x -> bsstr(), '1e+129',
Packit dcde0c
       qq|\$x = $CLASS->new($z); \$x->bsstr() = "1e+129"|);
Packit dcde0c
}
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
# test for whitespace including newlines to be handled correctly
Packit dcde0c
Packit dcde0c
# is($Math::BigInt::strict, 1);		# the default
Packit dcde0c
Packit dcde0c
foreach my $c (qw/1 12 123 1234 12345 123456 1234567
Packit dcde0c
                  12345678 123456789 1234567890/)
Packit dcde0c
{
Packit dcde0c
    my $m = $CLASS->new($c);
Packit dcde0c
    is($CLASS->new("$c"),        $m,    qq|$CLASS->new("$c") = $m|);
Packit dcde0c
    is($CLASS->new(" $c"),       $m,    qq|$CLASS->new(" $c") = $m|);
Packit dcde0c
    is($CLASS->new("$c "),       $m,    qq|$CLASS->new("$c ") = $m|);
Packit dcde0c
    is($CLASS->new(" $c "),      $m,    qq|$CLASS->new(" $c ") = $m|);
Packit dcde0c
    is($CLASS->new("\n$c"),      $m,    qq|$CLASS->new("\\n$c") = $m|);
Packit dcde0c
    is($CLASS->new("$c\n"),      $m,    qq|$CLASS->new("$c\\n") = $m|);
Packit dcde0c
    is($CLASS->new("\n$c\n"),    $m,    qq|$CLASS->new("\\n$c\\n") = $m|);
Packit dcde0c
    is($CLASS->new(" \n$c\n"),   $m,    qq|$CLASS->new(" \\n$c\\n") = $m|);
Packit dcde0c
    is($CLASS->new(" \n$c \n"),  $m,    qq|$CLASS->new(" \\n$c \\n") = $m|);
Packit dcde0c
    is($CLASS->new(" \n$c\n "),  $m,    qq|$CLASS->new(" \\n$c\\n ") = $m|);
Packit dcde0c
    is($CLASS->new(" \n$c\n1"),  'NaN', qq|$CLASS->new(" \\n$c\\n1") = 'NaN'|);
Packit dcde0c
    is($CLASS->new("1 \n$c\n1"), 'NaN', qq|$CLASS->new("1 \\n$c\\n1") = 'NaN'|);
Packit dcde0c
}
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
# prime number tests, also test for **= and length()
Packit dcde0c
# found on: http://www.utm.edu/research/primes/notes/by_year.html
Packit dcde0c
Packit dcde0c
# ((2^148)+1)/17
Packit dcde0c
$x = $CLASS->new(2);
Packit dcde0c
$x **= 148;
Packit dcde0c
$x++;
Packit dcde0c
$x = $x / 17;
Packit dcde0c
is($x, "20988936657440586486151264256610222593863921",
Packit dcde0c
   "value of ((2^148)+1)/17");
Packit dcde0c
is($x->length(), length("20988936657440586486151264256610222593863921"),
Packit dcde0c
   "number of digits in ((2^148)+1)/17");
Packit dcde0c
Packit dcde0c
# MM7 = 2^127-1
Packit dcde0c
$x = $CLASS->new(2);
Packit dcde0c
$x **= 127;
Packit dcde0c
$x--;
Packit dcde0c
is($x, "170141183460469231731687303715884105727", "value of 2^127-1");
Packit dcde0c
Packit dcde0c
$x = $CLASS->new('215960156869840440586892398248');
Packit dcde0c
($x, $y) = $x->length();
Packit dcde0c
is($x, 30, "number of digits in 2^127-1");
Packit dcde0c
is($y, 0, "number of digits in fraction part of 2^127-1");
Packit dcde0c
Packit dcde0c
$x = $CLASS->new('1_000_000_000_000');
Packit dcde0c
($x, $y) = $x->length();
Packit dcde0c
is($x, 13, "number of digits in 1_000_000_000_000");
Packit dcde0c
is($y, 0, "number of digits in fraction part of 1_000_000_000_000");
Packit dcde0c
Packit dcde0c
# test <<=, >>=
Packit dcde0c
$x = $CLASS->new('2');
Packit dcde0c
$y = $CLASS->new('18');
Packit dcde0c
is($x <<= $y, 2 << 18, "2 <<= 18 with $CLASS objects");
Packit dcde0c
is($x,        2 << 18, "2 <<= 18 with $CLASS objects");
Packit dcde0c
is($x >>= $y, 2,       "2 >>= 18 with $CLASS objects");
Packit dcde0c
is($x,        2,       "2 >>= 18 with $CLASS objects");
Packit dcde0c
Packit dcde0c
# I am afraid the following is not yet possible due to slowness
Packit dcde0c
# Also, testing for 2 meg output is a bit hard ;)
Packit dcde0c
#$x = $CLASS->new(2);
Packit dcde0c
#$x **= 6972593;
Packit dcde0c
#$x--;
Packit dcde0c
Packit dcde0c
# 593573509*2^332162+1 has exactly 1,000,000 digits
Packit dcde0c
# takes about 24 mins on 300 Mhz, so cannot be done yet ;)
Packit dcde0c
#$x = $CLASS->new(2);
Packit dcde0c
#$x **= 332162;
Packit dcde0c
#$x *= "593573509";
Packit dcde0c
#$x++;
Packit dcde0c
#is($x->length(), 1_000_000);
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
# inheritance and overriding of _swap
Packit dcde0c
Packit dcde0c
$x = Math::Foo->new(5);
Packit dcde0c
$x = $x - 8;		# 8 - 5 instead of 5-8
Packit dcde0c
is($x, 3, '$x = Math::Foo->new(5); $x = $x - 8; $x = 3');
Packit dcde0c
is(ref($x), 'Math::Foo', '$x is an object of class "Math::Foo"');
Packit dcde0c
Packit dcde0c
$x = Math::Foo->new(5);
Packit dcde0c
$x = 8 - $x;		# 5 - 8 instead of 8 - 5
Packit dcde0c
is($x, -3, '$x = Math::Foo->new(5); $x = 8 - $x; $x = -3');
Packit dcde0c
is(ref($x), 'Math::Foo', '$x is an object of class "Math::Foo"');
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
# Test whether +inf eq inf
Packit dcde0c
#
Packit dcde0c
# This tried to test whether Math::BigInt inf equals Perl inf. Unfortunately,
Packit dcde0c
# Perl hasn't (before 5.7.3 at least) a consistent way to say inf, and some
Packit dcde0c
# things like 1e100000 crash on some platforms. So simple test for the string
Packit dcde0c
# 'inf'.
Packit dcde0c
Packit dcde0c
$x = $CLASS->new('+inf');
Packit dcde0c
is($x, 'inf', qq|$CLASS->new("+inf") = "inf"|);
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
# numify() and 64 bit integer support
Packit dcde0c
Packit dcde0c
require Config;
Packit dcde0c
SKIP: {
Packit dcde0c
    skip("no 64 bit integer support", 4)
Packit dcde0c
      if ! $Config::Config{use64bitint} || ! $Config::Config{use64bitall}
Packit dcde0c
          || $] <= 5.006002;
Packit dcde0c
Packit dcde0c
    # The following should not give "1.84467440737096e+19".
Packit dcde0c
Packit dcde0c
    $x = $CLASS -> new(2) -> bpow(64) -> bdec();
Packit dcde0c
    is($x -> bstr(),   "18446744073709551615", "bigint 2**64-1 as string");
Packit dcde0c
    is($x -> numify(), "18446744073709551615", "bigint 2**64-1 as number");
Packit dcde0c
Packit dcde0c
    # The following should not give "-9.22337203685478e+18".
Packit dcde0c
Packit dcde0c
    $x = $CLASS -> new(2) -> bpow(63) -> bneg();
Packit dcde0c
    is($x -> bstr(),   "-9223372036854775808", "bigint -2**63 as string");
Packit dcde0c
    is($x -> numify(), "-9223372036854775808", "bigint -2**63 as number");
Packit dcde0c
};
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
###############################################################################
Packit dcde0c
# the following tests only make sense with Math::BigInt::Calc or BareCalc or
Packit dcde0c
# FastCalc
Packit dcde0c
Packit dcde0c
SKIP: {
Packit dcde0c
    # skip GMP, Pari et al.
Packit dcde0c
    skip("skipping tests not intended for the backend $CALC", 50)
Packit dcde0c
      unless $CALC =~ /^Math::BigInt::(Bare|Fast)?Calc$/;
Packit dcde0c
Packit dcde0c
    ###########################################################################
Packit dcde0c
    # check proper length of internal arrays
Packit dcde0c
Packit dcde0c
    my $bl = $CALC->_base_len();
Packit dcde0c
    my $BASE = '9' x $bl;
Packit dcde0c
    my $MAX = $BASE;
Packit dcde0c
    $BASE++;
Packit dcde0c
Packit dcde0c
    # f.i. 9999
Packit dcde0c
    $x = $CLASS->new($MAX);
Packit dcde0c
    is_valid($x);
Packit dcde0c
Packit dcde0c
    # 10000
Packit dcde0c
    $x += 1;
Packit dcde0c
    is($x, $BASE, "\$x == $BASE");
Packit dcde0c
    is_valid($x);
Packit dcde0c
Packit dcde0c
    # 9999 again
Packit dcde0c
    $x -= 1;
Packit dcde0c
    is($x, $MAX, "\$x == $MAX");
Packit dcde0c
    is_valid($x);
Packit dcde0c
Packit dcde0c
    ###########################################################################
Packit dcde0c
    # check numify
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new($BASE-1);
Packit dcde0c
    is($x->numify(), $BASE-1, q|$x->numify() = $BASE-1|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new(-($BASE-1));
Packit dcde0c
    is($x->numify(), -($BASE-1), q|$x->numify() = -($BASE-1)|);
Packit dcde0c
Packit dcde0c
    # +0 is to protect from 1e15 vs 100000000 (stupid to_string aaarglburbll...)
Packit dcde0c
    $x = $CLASS->new($BASE);
Packit dcde0c
    is($x->numify()+0, $BASE+0, q|$x->numify()+0 = $BASE+0|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new(-$BASE);
Packit dcde0c
    is($x->numify(), -$BASE, q|$x->numify() = -$BASE|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new(-($BASE*$BASE*1+$BASE*1+1));
Packit dcde0c
    is($x->numify(), -($BASE*$BASE*1+$BASE*1+1),
Packit dcde0c
       q|$x->numify() = -($BASE*$BASE*1+$BASE*1+1))|);
Packit dcde0c
Packit dcde0c
    ###########################################################################
Packit dcde0c
    # test bug in _digits with length($c[-1]) where $c[-1] was "00001" instead
Packit dcde0c
    # of 1
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new($BASE - 2);
Packit dcde0c
    $x++;
Packit dcde0c
    $x++;
Packit dcde0c
    $x++;
Packit dcde0c
    $x++;
Packit dcde0c
    ok($x > $BASE, '$x > $BASE');
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new($BASE + 3);
Packit dcde0c
    $x++;
Packit dcde0c
    ok($x > $BASE, '$x > $BASE');
Packit dcde0c
Packit dcde0c
    # test for +0 instead of int():
Packit dcde0c
    $x = $CLASS->new($MAX);
Packit dcde0c
    is($x->length(), length($MAX), q|$x->length() = length($MAX)|);
Packit dcde0c
Packit dcde0c
    ###########################################################################
Packit dcde0c
    # test bug that $CLASS->digit($string) did not work
Packit dcde0c
Packit dcde0c
    is($CLASS->digit(123, 2), 1, qq|$CLASS->digit(123, 2) = 1|);
Packit dcde0c
Packit dcde0c
    ###########################################################################
Packit dcde0c
    # bug in sub where number with at least 6 trailing zeros after any op failed
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new(123456);
Packit dcde0c
    $z = $CLASS->new(10000);
Packit dcde0c
    $z *= 10;
Packit dcde0c
    $x -= $z;
Packit dcde0c
    is($z, 100000, "testing bug in sub");
Packit dcde0c
    is($x, 23456, "testing bug in sub");
Packit dcde0c
Packit dcde0c
    ###########################################################################
Packit dcde0c
    # bug in shortcut in mul()
Packit dcde0c
Packit dcde0c
    # construct a number with a zero-hole of BASE_LEN_SMALL
Packit dcde0c
    {
Packit dcde0c
        my @bl = $CALC->_base_len();
Packit dcde0c
        my $bl = $bl[5];
Packit dcde0c
Packit dcde0c
        $x = '1' x $bl . '0' x $bl . '1' x $bl . '0' x $bl;
Packit dcde0c
        $y = '1' x (2 * $bl);
Packit dcde0c
        $x = $CLASS->new($x)->bmul($y);
Packit dcde0c
        # result is 123..$bl .  $bl x (3*bl-1) . $bl...321 . '0' x $bl
Packit dcde0c
        $y = '';
Packit dcde0c
        my $d = '';
Packit dcde0c
        for (my $i = 1; $i <= $bl; $i++) {
Packit dcde0c
            $y .= $i;
Packit dcde0c
            $d = $i . $d;
Packit dcde0c
        }
Packit dcde0c
        $y .= $bl x (3 * $bl - 1) . $d . '0' x $bl;
Packit dcde0c
        is($x, $y, "testing number with a zero-hole of BASE_LEN_SMALL");
Packit dcde0c
Packit dcde0c
        #########################################################################
Packit dcde0c
        # see if mul shortcut for small numbers works
Packit dcde0c
Packit dcde0c
        $x = '9' x $bl;
Packit dcde0c
        $x = $CLASS->new($x);
Packit dcde0c
        # 999 * 999 => 998 . 001, 9999*9999 => 9998 . 0001
Packit dcde0c
        is($x * $x, '9' x ($bl - 1) . '8' . '0' x ($bl - 1) . '1',
Packit dcde0c
           "see if mul shortcut for small numbers works");
Packit dcde0c
    }
Packit dcde0c
Packit dcde0c
    ###########################################################################
Packit dcde0c
    # bug with rest "-0" in div, causing further div()s to fail
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new('-322056000');
Packit dcde0c
    ($x, $y) = $x->bdiv('-12882240');
Packit dcde0c
Packit dcde0c
    is($y, '0', '-322056000 / -12882240 has remainder 0');
Packit dcde0c
    is_valid($y);               # $y not '-0'
Packit dcde0c
Packit dcde0c
    ###########################################################################
Packit dcde0c
    # bug in $x->bmod($y)
Packit dcde0c
Packit dcde0c
    # if $x < 0 and $y > 0
Packit dcde0c
    $x = $CLASS->new('-629');
Packit dcde0c
    is($x->bmod(5033), 4404, q|$x->bmod(5033) = 4404|);
Packit dcde0c
Packit dcde0c
    ###########################################################################
Packit dcde0c
    # bone/binf etc as plain calls (Lite failed them)
Packit dcde0c
Packit dcde0c
    is($CLASS->bzero(),      0,      qq|$CLASS->bzero() = 0|);
Packit dcde0c
    is($CLASS->bone(),       1,      qq|$CLASS->bone() = 1|);
Packit dcde0c
    is($CLASS->bone("+"),    1,      qq|$CLASS->bone("+") = 1|);
Packit dcde0c
    is($CLASS->bone("-"),    -1,     qq|$CLASS->bone("-") = -1|);
Packit dcde0c
    is($CLASS->bnan(),       "NaN",  qq|$CLASS->bnan() = "NaN"|);
Packit dcde0c
    is($CLASS->binf(),       "inf",  qq|$CLASS->binf() = "inf"|);
Packit dcde0c
    is($CLASS->binf("+"),    "inf",  qq|$CLASS->binf("+") = "inf"|);
Packit dcde0c
    is($CLASS->binf("-"),    "-inf", qq|$CLASS->binf("-") = "-inf"|);
Packit dcde0c
    is($CLASS->binf("-inf"), "-inf", qq|$CLASS->binf("-inf") = "-inf"|);
Packit dcde0c
Packit dcde0c
    ###########################################################################
Packit dcde0c
    # is_one("-")
Packit dcde0c
Packit dcde0c
    is($CLASS->new(1)->is_one("-"),  0, qq|$CLASS->new(1)->is_one("-") = 0|);
Packit dcde0c
    is($CLASS->new(-1)->is_one("-"), 1, qq|$CLASS->new(-1)->is_one("-") = 1|);
Packit dcde0c
    is($CLASS->new(1)->is_one(),     1, qq|$CLASS->new(1)->is_one() = 1|);
Packit dcde0c
    is($CLASS->new(-1)->is_one(),    0, qq|$CLASS->new(-1)->is_one() = 0|);
Packit dcde0c
Packit dcde0c
    ###########################################################################
Packit dcde0c
    # [perl #30609] bug with $x -= $x not being 0, but 2*$x
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new(3);
Packit dcde0c
    $x -= $x;
Packit dcde0c
    is($x, 0, qq|\$x = $CLASS->new(3); \$x -= \$x; = 0|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new(-3);
Packit dcde0c
    $x -= $x;
Packit dcde0c
    is($x, 0, qq|\$x = $CLASS->new(-3); \$x -= \$x; = 0|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new("NaN");
Packit dcde0c
    $x -= $x;
Packit dcde0c
    is($x->is_nan(), 1,
Packit dcde0c
       qq|\$x = $CLASS->new("NaN"); \$x -= \$x; \$x->is_nan() = 1|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new("inf");
Packit dcde0c
    $x -= $x;
Packit dcde0c
    is($x->is_nan(), 1,
Packit dcde0c
       qq|\$x = $CLASS->new("inf"); \$x -= \$x; \$x->is_nan() = 1|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new("-inf");
Packit dcde0c
    $x -= $x;
Packit dcde0c
    is($x->is_nan(), 1,
Packit dcde0c
       qq|\$x = $CLASS->new("-inf"); \$x -= \$x; \$x->is_nan() = 1|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new("NaN");
Packit dcde0c
    $x += $x;
Packit dcde0c
    is($x->is_nan(), 1,
Packit dcde0c
       qq|\$x = $CLASS->new("NaN"); \$x += \$x; \$x->is_nan() = 1|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new("inf");
Packit dcde0c
    $x += $x;
Packit dcde0c
    is($x->is_inf(), 1,
Packit dcde0c
       qq|\$x = $CLASS->new("inf"); \$x += \$x; \$x->is_inf() = 1|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new("-inf");
Packit dcde0c
    $x += $x;
Packit dcde0c
    is($x->is_inf("-"), 1,
Packit dcde0c
       qq|\$x = $CLASS->new("-inf"); \$x += \$x; \$x->is_inf("-") = 1|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new(3);
Packit dcde0c
    $x += $x;
Packit dcde0c
    is($x, 6, qq|\$x = $CLASS->new(3); \$x += \$x; \$x = 6|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new(-3);
Packit dcde0c
    $x += $x;
Packit dcde0c
    is($x, -6, qq|\$x = $CLASS->new(-3); \$x += \$x; \$x = -6|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new(3);
Packit dcde0c
    $x *= $x;
Packit dcde0c
    is($x, 9, qq|\$x = $CLASS->new(3); \$x *= \$x; \$x = 9|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new(-3);
Packit dcde0c
    $x *= $x;
Packit dcde0c
    is($x, 9, qq|\$x = $CLASS->new(-3); \$x *= \$x; \$x = 9|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new(3);
Packit dcde0c
    $x /= $x;
Packit dcde0c
    is($x, 1, qq|\$x = $CLASS->new(3); \$x /= \$x; \$x = 1|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new(-3);
Packit dcde0c
    $x /= $x;
Packit dcde0c
    is($x, 1, qq|\$x = $CLASS->new(-3); \$x /= \$x; \$x = 1|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new(3);
Packit dcde0c
    $x %= $x;
Packit dcde0c
    is($x, 0, qq|\$x = $CLASS->new(3); \$x %= \$x; \$x = 0|);
Packit dcde0c
Packit dcde0c
    $x = $CLASS->new(-3);
Packit dcde0c
    $x %= $x;
Packit dcde0c
    is($x, 0, qq|\$x = $CLASS->new(-3); \$x %= \$x; \$x = 0|);
Packit dcde0c
}
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
# all tests done
Packit dcde0c
Packit dcde0c
1;
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
# sub to check validity of a Math::BigInt internally, to ensure that no op
Packit dcde0c
# leaves a number object in an invalid state (f.i. "-0")
Packit dcde0c
Packit dcde0c
sub is_valid {
Packit dcde0c
    my ($x, $f) = @_;
Packit dcde0c
Packit dcde0c
    my $e = 0;			# error?
Packit dcde0c
Packit dcde0c
    # allow the check to pass for all Lite, and all MBI and subclasses
Packit dcde0c
    # ok as reference?
Packit dcde0c
    $e = 'Not a reference to Math::BigInt' if ref($x) !~ /^Math::BigInt/;
Packit dcde0c
Packit dcde0c
    if (ref($x) ne 'Math::BigInt::Lite') {
Packit dcde0c
        # has ok sign?
Packit dcde0c
        $e = qq|Illegal sign $x->{sign}|
Packit dcde0c
          . qq| (expected: "+", "-", "-inf", "+inf" or "NaN"|
Packit dcde0c
            if $e eq '0' && $x->{sign} !~ /^(\+|-|\+inf|-inf|NaN)$/;
Packit dcde0c
Packit dcde0c
        $e = "-0 is invalid!" if $e ne '0' && $x->{sign} eq '-' && $x == 0;
Packit dcde0c
        $e = $CALC->_check($x->{value}) if $e eq '0';
Packit dcde0c
    }
Packit dcde0c
Packit dcde0c
    # test done, see if error did crop up
Packit dcde0c
    if ($e eq '0') {
Packit dcde0c
        pass('is a valid object');
Packit dcde0c
        return;
Packit dcde0c
    }
Packit dcde0c
Packit dcde0c
    fail($e . " after op '$f'");
Packit dcde0c
}
Packit dcde0c
Packit dcde0c
__DATA__
Packit dcde0c
Packit dcde0c
&.=
Packit dcde0c
1234:-345:1234-345
Packit dcde0c
Packit dcde0c
&+=
Packit dcde0c
1:2:3
Packit dcde0c
-1:-2:-3
Packit dcde0c
Packit dcde0c
&-=
Packit dcde0c
1:2:-1
Packit dcde0c
-1:-2:1
Packit dcde0c
Packit dcde0c
&*=
Packit dcde0c
2:3:6
Packit dcde0c
-1:5:-5
Packit dcde0c
Packit dcde0c
&%=
Packit dcde0c
100:3:1
Packit dcde0c
8:9:8
Packit dcde0c
-629:5033:4404
Packit dcde0c
Packit dcde0c
&/=
Packit dcde0c
100:3:33
Packit dcde0c
-8:2:-4
Packit dcde0c
Packit dcde0c
&|=
Packit dcde0c
2:1:3
Packit dcde0c
Packit dcde0c
&&=
Packit dcde0c
5:7:5
Packit dcde0c
Packit dcde0c
&^=
Packit dcde0c
5:7:2
Packit dcde0c
Packit dcde0c
&blog
Packit dcde0c
#
Packit dcde0c
NaNlog:2:NaN
Packit dcde0c
122:NaNlog:NaN
Packit dcde0c
NaNlog1:NaNlog:NaN
Packit dcde0c
#
Packit dcde0c
122:inf:0
Packit dcde0c
inf:122:inf
Packit dcde0c
122:-inf:0
Packit dcde0c
-inf:122:inf
Packit dcde0c
-inf:-inf:NaN
Packit dcde0c
0:4:-inf
Packit dcde0c
-21:4:NaN
Packit dcde0c
21:-21:NaN
Packit dcde0c
#
Packit dcde0c
0:-inf:NaN
Packit dcde0c
0:-1:NaN
Packit dcde0c
0:0:NaN
Packit dcde0c
0:1:NaN
Packit dcde0c
0:inf:NaN
Packit dcde0c
#
Packit dcde0c
1:-inf:0
Packit dcde0c
1:-1:0
Packit dcde0c
1:0:0
Packit dcde0c
1:1:NaN
Packit dcde0c
1:4:0
Packit dcde0c
1:inf:0
Packit dcde0c
#
Packit dcde0c
inf:-inf:NaN
Packit dcde0c
inf:-1:NaN
Packit dcde0c
inf:0:NaN
Packit dcde0c
inf:1:NaN
Packit dcde0c
inf:4:inf
Packit dcde0c
inf:inf:NaN
Packit dcde0c
#
Packit dcde0c
# normal results
Packit dcde0c
1024:2:10
Packit dcde0c
81:3:4
Packit dcde0c
# 3.01.. truncate
Packit dcde0c
82:3:4
Packit dcde0c
# 3.9... truncate
Packit dcde0c
80:3:3
Packit dcde0c
4096:2:12
Packit dcde0c
15625:5:6
Packit dcde0c
15626:5:6
Packit dcde0c
15624:5:5
Packit dcde0c
1000:10:3
Packit dcde0c
10000:10:4
Packit dcde0c
100000:10:5
Packit dcde0c
1000000:10:6
Packit dcde0c
10000000:10:7
Packit dcde0c
100000000:10:8
Packit dcde0c
8916100448256:12:12
Packit dcde0c
8916100448257:12:12
Packit dcde0c
8916100448255:12:11
Packit dcde0c
2251799813685248:8:17
Packit dcde0c
72057594037927936:2:56
Packit dcde0c
144115188075855872:2:57
Packit dcde0c
288230376151711744:2:58
Packit dcde0c
576460752303423488:2:59
Packit dcde0c
1329227995784915872903807060280344576:2:120
Packit dcde0c
# $x == $base => result 1
Packit dcde0c
3:3:1
Packit dcde0c
# $x < $base => result 0 ($base ** 0 <= $x)
Packit dcde0c
3:4:0
Packit dcde0c
# $x == 1 => result 0
Packit dcde0c
1:5:0
Packit dcde0c
Packit dcde0c
&is_negative
Packit dcde0c
0:0
Packit dcde0c
-1:1
Packit dcde0c
1:0
Packit dcde0c
+inf:0
Packit dcde0c
-inf:1
Packit dcde0c
NaNneg:0
Packit dcde0c
Packit dcde0c
&is_positive
Packit dcde0c
0:0
Packit dcde0c
-1:0
Packit dcde0c
1:1
Packit dcde0c
+inf:1
Packit dcde0c
-inf:0
Packit dcde0c
NaNneg:0
Packit dcde0c
Packit dcde0c
&is_int
Packit dcde0c
-inf:0
Packit dcde0c
+inf:0
Packit dcde0c
NaNis_int:0
Packit dcde0c
1:1
Packit dcde0c
0:1
Packit dcde0c
123e12:1
Packit dcde0c
Packit dcde0c
&is_odd
Packit dcde0c
abc:0
Packit dcde0c
0:0
Packit dcde0c
1:1
Packit dcde0c
3:1
Packit dcde0c
-1:1
Packit dcde0c
-3:1
Packit dcde0c
10000001:1
Packit dcde0c
10000002:0
Packit dcde0c
2:0
Packit dcde0c
120:0
Packit dcde0c
121:1
Packit dcde0c
Packit dcde0c
&is_even
Packit dcde0c
abc:0
Packit dcde0c
0:1
Packit dcde0c
1:0
Packit dcde0c
3:0
Packit dcde0c
-1:0
Packit dcde0c
-3:0
Packit dcde0c
10000001:0
Packit dcde0c
10000002:1
Packit dcde0c
2:1
Packit dcde0c
120:1
Packit dcde0c
121:0
Packit dcde0c
Packit dcde0c
&bacmp
Packit dcde0c
+0:-0:0
Packit dcde0c
+0:+1:-1
Packit dcde0c
-1:+1:0
Packit dcde0c
+1:-1:0
Packit dcde0c
-1:+2:-1
Packit dcde0c
+2:-1:1
Packit dcde0c
-123456789:+987654321:-1
Packit dcde0c
+123456789:-987654321:-1
Packit dcde0c
+987654321:+123456789:1
Packit dcde0c
-987654321:+123456789:1
Packit dcde0c
-123:+4567889:-1
Packit dcde0c
# NaNs
Packit dcde0c
acmpNaN:123:
Packit dcde0c
123:acmpNaN:
Packit dcde0c
acmpNaN:acmpNaN:
Packit dcde0c
# infinity
Packit dcde0c
+inf:+inf:0
Packit dcde0c
-inf:-inf:0
Packit dcde0c
+inf:-inf:0
Packit dcde0c
-inf:+inf:0
Packit dcde0c
+inf:123:1
Packit dcde0c
-inf:123:1
Packit dcde0c
+inf:-123:1
Packit dcde0c
-inf:-123:1
Packit dcde0c
123:-inf:-1
Packit dcde0c
-123:inf:-1
Packit dcde0c
-123:-inf:-1
Packit dcde0c
123:inf:-1
Packit dcde0c
# return undef
Packit dcde0c
+inf:NaN:
Packit dcde0c
NaN:inf:
Packit dcde0c
-inf:NaN:
Packit dcde0c
NaN:-inf:
Packit dcde0c
Packit dcde0c
&bnorm
Packit dcde0c
0e999:0
Packit dcde0c
0e-999:0
Packit dcde0c
-0e999:0
Packit dcde0c
-0e-999:0
Packit dcde0c
123:123
Packit dcde0c
123.000:123
Packit dcde0c
123e0:123
Packit dcde0c
123e+0:123
Packit dcde0c
123e-0:123
Packit dcde0c
123.000e0:123
Packit dcde0c
123.000e+0:123
Packit dcde0c
123.000e-0:123
Packit dcde0c
# binary input
Packit dcde0c
0babc:NaN
Packit dcde0c
0b123:NaN
Packit dcde0c
0b0:0
Packit dcde0c
-0b0:0
Packit dcde0c
-0b1:-1
Packit dcde0c
0b0001:1
Packit dcde0c
0b001:1
Packit dcde0c
0b011:3
Packit dcde0c
0b101:5
Packit dcde0c
0b1001:9
Packit dcde0c
0b10001:17
Packit dcde0c
0b100001:33
Packit dcde0c
0b1000001:65
Packit dcde0c
0b10000001:129
Packit dcde0c
0b100000001:257
Packit dcde0c
0b1000000001:513
Packit dcde0c
0b10000000001:1025
Packit dcde0c
0b100000000001:2049
Packit dcde0c
0b1000000000001:4097
Packit dcde0c
0b10000000000001:8193
Packit dcde0c
0b100000000000001:16385
Packit dcde0c
0b1000000000000001:32769
Packit dcde0c
0b10000000000000001:65537
Packit dcde0c
0b100000000000000001:131073
Packit dcde0c
0b1000000000000000001:262145
Packit dcde0c
0b10000000000000000001:524289
Packit dcde0c
0b100000000000000000001:1048577
Packit dcde0c
0b1000000000000000000001:2097153
Packit dcde0c
0b10000000000000000000001:4194305
Packit dcde0c
0b100000000000000000000001:8388609
Packit dcde0c
0b1000000000000000000000001:16777217
Packit dcde0c
0b10000000000000000000000001:33554433
Packit dcde0c
0b100000000000000000000000001:67108865
Packit dcde0c
0b1000000000000000000000000001:134217729
Packit dcde0c
0b10000000000000000000000000001:268435457
Packit dcde0c
0b100000000000000000000000000001:536870913
Packit dcde0c
0b1000000000000000000000000000001:1073741825
Packit dcde0c
0b10000000000000000000000000000001:2147483649
Packit dcde0c
0b100000000000000000000000000000001:4294967297
Packit dcde0c
0b1000000000000000000000000000000001:8589934593
Packit dcde0c
0b10000000000000000000000000000000001:17179869185
Packit dcde0c
0b__101:NaN
Packit dcde0c
0b1_0_1:5
Packit dcde0c
0b0_0_0_1:1
Packit dcde0c
# hex input
Packit dcde0c
-0x0:0
Packit dcde0c
0xabcdefgh:NaN
Packit dcde0c
0x1234:4660
Packit dcde0c
0xabcdef:11259375
Packit dcde0c
-0xABCDEF:-11259375
Packit dcde0c
-0x1234:-4660
Packit dcde0c
0x12345678:305419896
Packit dcde0c
0x1_2_3_4_56_78:305419896
Packit dcde0c
0xa_b_c_d_e_f:11259375
Packit dcde0c
0x__123:NaN
Packit dcde0c
0x9:9
Packit dcde0c
0x11:17
Packit dcde0c
0x21:33
Packit dcde0c
0x41:65
Packit dcde0c
0x81:129
Packit dcde0c
0x101:257
Packit dcde0c
0x201:513
Packit dcde0c
0x401:1025
Packit dcde0c
0x801:2049
Packit dcde0c
0x1001:4097
Packit dcde0c
0x2001:8193
Packit dcde0c
0x4001:16385
Packit dcde0c
0x8001:32769
Packit dcde0c
0x10001:65537
Packit dcde0c
0x20001:131073
Packit dcde0c
0x40001:262145
Packit dcde0c
0x80001:524289
Packit dcde0c
0x100001:1048577
Packit dcde0c
0x200001:2097153
Packit dcde0c
0x400001:4194305
Packit dcde0c
0x800001:8388609
Packit dcde0c
0x1000001:16777217
Packit dcde0c
0x2000001:33554433
Packit dcde0c
0x4000001:67108865
Packit dcde0c
0x8000001:134217729
Packit dcde0c
0x10000001:268435457
Packit dcde0c
0x20000001:536870913
Packit dcde0c
0x40000001:1073741825
Packit dcde0c
0x80000001:2147483649
Packit dcde0c
0x100000001:4294967297
Packit dcde0c
0x200000001:8589934593
Packit dcde0c
0x400000001:17179869185
Packit dcde0c
0x800000001:34359738369
Packit dcde0c
# bug found by Mark Lakata in Calc.pm creating too big one-element numbers
Packit dcde0c
# in _from_hex()
Packit dcde0c
0x2dd59e18a125dbed30a6ab1d93e9c855569f44f75806f0645dc9a2e98b808c3:1295719234436071846486578237372801883390756472611551858964079371952886122691
Packit dcde0c
# inf input
Packit dcde0c
inf:inf
Packit dcde0c
+inf:inf
Packit dcde0c
-inf:-inf
Packit dcde0c
0inf:NaN
Packit dcde0c
# abnormal input
Packit dcde0c
:NaN
Packit dcde0c
abc:NaN
Packit dcde0c
   1 a:NaN
Packit dcde0c
1bcd2:NaN
Packit dcde0c
11111b:NaN
Packit dcde0c
+1z:NaN
Packit dcde0c
-1z:NaN
Packit dcde0c
# only one underscore between two digits
Packit dcde0c
_123:NaN
Packit dcde0c
_123_:NaN
Packit dcde0c
123_:NaN
Packit dcde0c
1__23:NaN
Packit dcde0c
1E1__2:NaN
Packit dcde0c
1_E12:NaN
Packit dcde0c
1E_12:NaN
Packit dcde0c
1_E_12:NaN
Packit dcde0c
+_1E12:NaN
Packit dcde0c
+0_1E2:100
Packit dcde0c
+0_0_1E2:100
Packit dcde0c
-0_0_1E2:-100
Packit dcde0c
-0_0_1E+0_0_2:-100
Packit dcde0c
E1:NaN
Packit dcde0c
E23:NaN
Packit dcde0c
1.23E1:NaN
Packit dcde0c
1.23E-1:NaN
Packit dcde0c
# bug with two E's in number being valid
Packit dcde0c
1e2e3:NaN
Packit dcde0c
1e2r:NaN
Packit dcde0c
1e2.0:NaN
Packit dcde0c
# bug with two '.' in number being valid
Packit dcde0c
1.2.2:NaN
Packit dcde0c
1.2.3e1:NaN
Packit dcde0c
-1.2.3:NaN
Packit dcde0c
-1.2.3e-4:NaN
Packit dcde0c
1.2e3.4:NaN
Packit dcde0c
1.2e-3.4:NaN
Packit dcde0c
1.2.3.4:NaN
Packit dcde0c
1.2.t:NaN
Packit dcde0c
1..2:NaN
Packit dcde0c
1..2e1:NaN
Packit dcde0c
1..2e1..1:NaN
Packit dcde0c
12e1..1:NaN
Packit dcde0c
..2:NaN
Packit dcde0c
.-2:NaN
Packit dcde0c
# leading zeros
Packit dcde0c
012:12
Packit dcde0c
0123:123
Packit dcde0c
01234:1234
Packit dcde0c
012345:12345
Packit dcde0c
0123456:123456
Packit dcde0c
01234567:1234567
Packit dcde0c
012345678:12345678
Packit dcde0c
0123456789:123456789
Packit dcde0c
01234567891:1234567891
Packit dcde0c
012345678912:12345678912
Packit dcde0c
0123456789123:123456789123
Packit dcde0c
01234567891234:1234567891234
Packit dcde0c
# some inputs that result in zero
Packit dcde0c
0e0:0
Packit dcde0c
+0e0:0
Packit dcde0c
+0e+0:0
Packit dcde0c
-0e+0:0
Packit dcde0c
0e-0:0
Packit dcde0c
-0e-0:0
Packit dcde0c
+0e-0:0
Packit dcde0c
000:0
Packit dcde0c
00e2:0
Packit dcde0c
00e02:0
Packit dcde0c
000e002:0
Packit dcde0c
000e1230:0
Packit dcde0c
00e-3:0
Packit dcde0c
00e+3:0
Packit dcde0c
00e-03:0
Packit dcde0c
00e+03:0
Packit dcde0c
-000:0
Packit dcde0c
-00e2:0
Packit dcde0c
-00e02:0
Packit dcde0c
-000e002:0
Packit dcde0c
-000e1230:0
Packit dcde0c
-00e-3:0
Packit dcde0c
-00e+3:0
Packit dcde0c
-00e-03:0
Packit dcde0c
-00e+03:0
Packit dcde0c
# normal input
Packit dcde0c
0:0
Packit dcde0c
+0:0
Packit dcde0c
+00:0
Packit dcde0c
+000:0
Packit dcde0c
000000000000000000:0
Packit dcde0c
-0:0
Packit dcde0c
-0000:0
Packit dcde0c
+1:1
Packit dcde0c
+01:1
Packit dcde0c
+001:1
Packit dcde0c
+00000100000:100000
Packit dcde0c
123456789:123456789
Packit dcde0c
-1:-1
Packit dcde0c
-01:-1
Packit dcde0c
-001:-1
Packit dcde0c
-123456789:-123456789
Packit dcde0c
-00000100000:-100000
Packit dcde0c
1_2_3:123
Packit dcde0c
10000000000E-1_0:1
Packit dcde0c
1E2:100
Packit dcde0c
1E1:10
Packit dcde0c
1E0:1
Packit dcde0c
1.23E2:123
Packit dcde0c
100E-1:10
Packit dcde0c
# floating point input
Packit dcde0c
# .2e2:20
Packit dcde0c
1.E3:1000
Packit dcde0c
1.01E2:101
Packit dcde0c
1010E-1:101
Packit dcde0c
-1010E0:-1010
Packit dcde0c
-1010E1:-10100
Packit dcde0c
1234.00:1234
Packit dcde0c
# non-integer numbers
Packit dcde0c
-1010E-2:NaN
Packit dcde0c
-1.01E+1:NaN
Packit dcde0c
-1.01E-1:NaN
Packit dcde0c
1E-999999:NaN
Packit dcde0c
0.5:NaN
Packit dcde0c
Packit dcde0c
&bnan
Packit dcde0c
1:NaN
Packit dcde0c
2:NaN
Packit dcde0c
abc:NaN
Packit dcde0c
Packit dcde0c
&bone
Packit dcde0c
2:+:1
Packit dcde0c
2:-:-1
Packit dcde0c
boneNaN:-:-1
Packit dcde0c
boneNaN:+:1
Packit dcde0c
2:abc:1
Packit dcde0c
3::1
Packit dcde0c
Packit dcde0c
&binf
Packit dcde0c
1:+:inf
Packit dcde0c
2:-:-inf
Packit dcde0c
3:abc:inf
Packit dcde0c
Packit dcde0c
&is_nan
Packit dcde0c
123:0
Packit dcde0c
abc:1
Packit dcde0c
NaN:1
Packit dcde0c
-123:0
Packit dcde0c
Packit dcde0c
&is_inf
Packit dcde0c
+inf::1
Packit dcde0c
-inf::1
Packit dcde0c
abc::0
Packit dcde0c
1::0
Packit dcde0c
NaN::0
Packit dcde0c
-1::0
Packit dcde0c
+inf:-:0
Packit dcde0c
+inf:+:1
Packit dcde0c
-inf:-:1
Packit dcde0c
-inf:+:0
Packit dcde0c
-inf:-inf:1
Packit dcde0c
-inf:+inf:0
Packit dcde0c
+inf:-inf:0
Packit dcde0c
+inf:+inf:1
Packit dcde0c
+iNfInItY::1
Packit dcde0c
-InFiNiTy::1
Packit dcde0c
Packit dcde0c
&blsft
Packit dcde0c
abc:abc:NaN
Packit dcde0c
+2:+2:8
Packit dcde0c
+1:+32:4294967296
Packit dcde0c
+1:+48:281474976710656
Packit dcde0c
+8:-2:NaN
Packit dcde0c
# exercise base 10
Packit dcde0c
+12345:4:10:123450000
Packit dcde0c
-1234:0:10:-1234
Packit dcde0c
+1234:0:10:1234
Packit dcde0c
+2:2:10:200
Packit dcde0c
+12:2:10:1200
Packit dcde0c
+1234:-3:10:NaN
Packit dcde0c
1234567890123:12:10:1234567890123000000000000
Packit dcde0c
-3:1:2:-6
Packit dcde0c
-5:1:2:-10
Packit dcde0c
-2:1:2:-4
Packit dcde0c
-102533203:1:2:-205066406
Packit dcde0c
Packit dcde0c
&brsft
Packit dcde0c
abc:abc:NaN
Packit dcde0c
+8:+2:2
Packit dcde0c
+4294967296:+32:1
Packit dcde0c
+281474976710656:+48:1
Packit dcde0c
+2:-2:NaN
Packit dcde0c
# exercise base 10
Packit dcde0c
-1234:0:10:-1234
Packit dcde0c
+1234:0:10:1234
Packit dcde0c
+200:2:10:2
Packit dcde0c
+1234:3:10:1
Packit dcde0c
+1234:2:10:12
Packit dcde0c
+1234:-3:10:NaN
Packit dcde0c
310000:4:10:31
Packit dcde0c
12300000:5:10:123
Packit dcde0c
1230000000000:10:10:123
Packit dcde0c
09876123456789067890:12:10:9876123
Packit dcde0c
1234561234567890123:13:10:123456
Packit dcde0c
820265627:1:2:410132813
Packit dcde0c
# test shifting negative numbers in base 2
Packit dcde0c
-15:1:2:-8
Packit dcde0c
-14:1:2:-7
Packit dcde0c
-13:1:2:-7
Packit dcde0c
-12:1:2:-6
Packit dcde0c
-11:1:2:-6
Packit dcde0c
-10:1:2:-5
Packit dcde0c
-9:1:2:-5
Packit dcde0c
-8:1:2:-4
Packit dcde0c
-7:1:2:-4
Packit dcde0c
-6:1:2:-3
Packit dcde0c
-5:1:2:-3
Packit dcde0c
-4:1:2:-2
Packit dcde0c
-3:1:2:-2
Packit dcde0c
-2:1:2:-1
Packit dcde0c
-1:1:2:-1
Packit dcde0c
-1640531254:2:2:-410132814
Packit dcde0c
-1640531254:1:2:-820265627
Packit dcde0c
-820265627:1:2:-410132814
Packit dcde0c
-205066405:1:2:-102533203
Packit dcde0c
Packit dcde0c
&bsstr
Packit dcde0c
+inf:inf
Packit dcde0c
-inf:-inf
Packit dcde0c
1e+34:1e+34
Packit dcde0c
123.456E3:123456e+0
Packit dcde0c
100:1e+2
Packit dcde0c
bsstrabc:NaN
Packit dcde0c
-5:-5e+0
Packit dcde0c
-100:-1e+2
Packit dcde0c
Packit dcde0c
&numify
Packit dcde0c
5:5
Packit dcde0c
-5:-5
Packit dcde0c
100:100
Packit dcde0c
-100:-100
Packit dcde0c
Packit dcde0c
&bneg
Packit dcde0c
bnegNaN:NaN
Packit dcde0c
+inf:-inf
Packit dcde0c
-inf:inf
Packit dcde0c
abd:NaN
Packit dcde0c
0:0
Packit dcde0c
1:-1
Packit dcde0c
-1:1
Packit dcde0c
+123456789:-123456789
Packit dcde0c
-123456789:123456789
Packit dcde0c
Packit dcde0c
&babs
Packit dcde0c
babsNaN:NaN
Packit dcde0c
+inf:inf
Packit dcde0c
-inf:inf
Packit dcde0c
0:0
Packit dcde0c
1:1
Packit dcde0c
-1:1
Packit dcde0c
+123456789:123456789
Packit dcde0c
-123456789:123456789
Packit dcde0c
Packit dcde0c
&bsgn
Packit dcde0c
NaN:NaN
Packit dcde0c
+inf:1
Packit dcde0c
-inf:-1
Packit dcde0c
0:0
Packit dcde0c
+123456789:1
Packit dcde0c
-123456789:-1
Packit dcde0c
Packit dcde0c
&bcmp
Packit dcde0c
bcmpNaN:bcmpNaN:
Packit dcde0c
bcmpNaN:0:
Packit dcde0c
0:bcmpNaN:
Packit dcde0c
0:0:0
Packit dcde0c
-1:0:-1
Packit dcde0c
0:-1:1
Packit dcde0c
1:0:1
Packit dcde0c
0:1:-1
Packit dcde0c
-1:1:-1
Packit dcde0c
1:-1:1
Packit dcde0c
-1:-1:0
Packit dcde0c
1:1:0
Packit dcde0c
123:123:0
Packit dcde0c
123:12:1
Packit dcde0c
12:123:-1
Packit dcde0c
-123:-123:0
Packit dcde0c
-123:-12:-1
Packit dcde0c
-12:-123:1
Packit dcde0c
123:124:-1
Packit dcde0c
124:123:1
Packit dcde0c
-123:-124:1
Packit dcde0c
-124:-123:-1
Packit dcde0c
100:5:1
Packit dcde0c
-123456789:987654321:-1
Packit dcde0c
+123456789:-987654321:1
Packit dcde0c
-987654321:123456789:-1
Packit dcde0c
-inf:5432112345:-1
Packit dcde0c
+inf:5432112345:1
Packit dcde0c
-inf:-5432112345:-1
Packit dcde0c
+inf:-5432112345:1
Packit dcde0c
+inf:+inf:0
Packit dcde0c
-inf:-inf:0
Packit dcde0c
+inf:-inf:1
Packit dcde0c
-inf:+inf:-1
Packit dcde0c
5:inf:-1
Packit dcde0c
5:inf:-1
Packit dcde0c
-5:-inf:1
Packit dcde0c
-5:-inf:1
Packit dcde0c
# return undef
Packit dcde0c
+inf:NaN:
Packit dcde0c
NaN:inf:
Packit dcde0c
-inf:NaN:
Packit dcde0c
NaN:-inf:
Packit dcde0c
Packit dcde0c
&binc
Packit dcde0c
abc:NaN
Packit dcde0c
+inf:inf
Packit dcde0c
-inf:-inf
Packit dcde0c
+0:1
Packit dcde0c
+1:2
Packit dcde0c
-1:0
Packit dcde0c
Packit dcde0c
&bdec
Packit dcde0c
abc:NaN
Packit dcde0c
+inf:inf
Packit dcde0c
-inf:-inf
Packit dcde0c
+0:-1
Packit dcde0c
+1:0
Packit dcde0c
-1:-2
Packit dcde0c
Packit dcde0c
&badd
Packit dcde0c
abc:abc:NaN
Packit dcde0c
abc:0:NaN
Packit dcde0c
+0:abc:NaN
Packit dcde0c
+inf:-inf:NaN
Packit dcde0c
-inf:+inf:NaN
Packit dcde0c
+inf:+inf:inf
Packit dcde0c
-inf:-inf:-inf
Packit dcde0c
baddNaN:+inf:NaN
Packit dcde0c
baddNaN:+inf:NaN
Packit dcde0c
+inf:baddNaN:NaN
Packit dcde0c
-inf:baddNaN:NaN
Packit dcde0c
0:0:0
Packit dcde0c
1:0:1
Packit dcde0c
0:1:1
Packit dcde0c
1:1:2
Packit dcde0c
-1:0:-1
Packit dcde0c
0:-1:-1
Packit dcde0c
-1:-1:-2
Packit dcde0c
-1:+1:0
Packit dcde0c
+1:-1:0
Packit dcde0c
+9:+1:10
Packit dcde0c
+99:+1:100
Packit dcde0c
+999:+1:1000
Packit dcde0c
+9999:+1:10000
Packit dcde0c
+99999:+1:100000
Packit dcde0c
+999999:+1:1000000
Packit dcde0c
+9999999:+1:10000000
Packit dcde0c
+99999999:+1:100000000
Packit dcde0c
+999999999:+1:1000000000
Packit dcde0c
+9999999999:+1:10000000000
Packit dcde0c
+99999999999:+1:100000000000
Packit dcde0c
+10:-1:9
Packit dcde0c
+100:-1:99
Packit dcde0c
+1000:-1:999
Packit dcde0c
+10000:-1:9999
Packit dcde0c
+100000:-1:99999
Packit dcde0c
+1000000:-1:999999
Packit dcde0c
+10000000:-1:9999999
Packit dcde0c
+100000000:-1:99999999
Packit dcde0c
+1000000000:-1:999999999
Packit dcde0c
+10000000000:-1:9999999999
Packit dcde0c
+123456789:987654321:1111111110
Packit dcde0c
-123456789:987654321:864197532
Packit dcde0c
-123456789:-987654321:-1111111110
Packit dcde0c
+123456789:-987654321:-864197532
Packit dcde0c
-1:10001:10000
Packit dcde0c
-1:100001:100000
Packit dcde0c
-1:1000001:1000000
Packit dcde0c
-1:10000001:10000000
Packit dcde0c
-1:100000001:100000000
Packit dcde0c
-1:1000000001:1000000000
Packit dcde0c
-1:10000000001:10000000000
Packit dcde0c
-1:100000000001:100000000000
Packit dcde0c
-1:1000000000001:1000000000000
Packit dcde0c
-1:10000000000001:10000000000000
Packit dcde0c
-1:-10001:-10002
Packit dcde0c
-1:-100001:-100002
Packit dcde0c
-1:-1000001:-1000002
Packit dcde0c
-1:-10000001:-10000002
Packit dcde0c
-1:-100000001:-100000002
Packit dcde0c
-1:-1000000001:-1000000002
Packit dcde0c
-1:-10000000001:-10000000002
Packit dcde0c
-1:-100000000001:-100000000002
Packit dcde0c
-1:-1000000000001:-1000000000002
Packit dcde0c
-1:-10000000000001:-10000000000002
Packit dcde0c
Packit dcde0c
&bsub
Packit dcde0c
abc:abc:NaN
Packit dcde0c
abc:+0:NaN
Packit dcde0c
+0:abc:NaN
Packit dcde0c
+inf:-inf:inf
Packit dcde0c
-inf:+inf:-inf
Packit dcde0c
+inf:+inf:NaN
Packit dcde0c
-inf:-inf:NaN
Packit dcde0c
+0:+0:0
Packit dcde0c
+1:+0:1
Packit dcde0c
+0:+1:-1
Packit dcde0c
+1:+1:0
Packit dcde0c
-1:+0:-1
Packit dcde0c
+0:-1:1
Packit dcde0c
-1:-1:0
Packit dcde0c
-1:+1:-2
Packit dcde0c
+1:-1:2
Packit dcde0c
+9:+1:8
Packit dcde0c
+99:+1:98
Packit dcde0c
+999:+1:998
Packit dcde0c
+9999:+1:9998
Packit dcde0c
+99999:+1:99998
Packit dcde0c
+999999:+1:999998
Packit dcde0c
+9999999:+1:9999998
Packit dcde0c
+99999999:+1:99999998
Packit dcde0c
+999999999:+1:999999998
Packit dcde0c
+9999999999:+1:9999999998
Packit dcde0c
+99999999999:+1:99999999998
Packit dcde0c
+10:-1:11
Packit dcde0c
+100:-1:101
Packit dcde0c
+1000:-1:1001
Packit dcde0c
+10000:-1:10001
Packit dcde0c
+100000:-1:100001
Packit dcde0c
+1000000:-1:1000001
Packit dcde0c
+10000000:-1:10000001
Packit dcde0c
+100000000:-1:100000001
Packit dcde0c
+1000000000:-1:1000000001
Packit dcde0c
+10000000000:-1:10000000001
Packit dcde0c
+123456789:+987654321:-864197532
Packit dcde0c
-123456789:+987654321:-1111111110
Packit dcde0c
-123456789:-987654321:864197532
Packit dcde0c
+123456789:-987654321:1111111110
Packit dcde0c
10001:1:10000
Packit dcde0c
100001:1:100000
Packit dcde0c
1000001:1:1000000
Packit dcde0c
10000001:1:10000000
Packit dcde0c
100000001:1:100000000
Packit dcde0c
1000000001:1:1000000000
Packit dcde0c
10000000001:1:10000000000
Packit dcde0c
100000000001:1:100000000000
Packit dcde0c
1000000000001:1:1000000000000
Packit dcde0c
10000000000001:1:10000000000000
Packit dcde0c
10001:-1:10002
Packit dcde0c
100001:-1:100002
Packit dcde0c
1000001:-1:1000002
Packit dcde0c
10000001:-1:10000002
Packit dcde0c
100000001:-1:100000002
Packit dcde0c
1000000001:-1:1000000002
Packit dcde0c
10000000001:-1:10000000002
Packit dcde0c
100000000001:-1:100000000002
Packit dcde0c
1000000000001:-1:1000000000002
Packit dcde0c
10000000000001:-1:10000000000002
Packit dcde0c
Packit dcde0c
&bmuladd
Packit dcde0c
abc:abc:0:NaN
Packit dcde0c
abc:+0:0:NaN
Packit dcde0c
+0:abc:0:NaN
Packit dcde0c
+0:0:abc:NaN
Packit dcde0c
NaNmul:+inf:0:NaN
Packit dcde0c
NaNmul:-inf:0:NaN
Packit dcde0c
-inf:NaNmul:0:NaN
Packit dcde0c
+inf:NaNmul:0:NaN
Packit dcde0c
+inf:+inf:0:inf
Packit dcde0c
+inf:-inf:0:-inf
Packit dcde0c
-inf:+inf:0:-inf
Packit dcde0c
-inf:-inf:0:inf
Packit dcde0c
+0:+0:0:0
Packit dcde0c
+0:+1:0:0
Packit dcde0c
+1:+0:0:0
Packit dcde0c
+0:-1:0:0
Packit dcde0c
-1:+0:0:0
Packit dcde0c
123456789123456789:0:0:0
Packit dcde0c
0:123456789123456789:0:0
Packit dcde0c
-1:-1:0:1
Packit dcde0c
-1:-1:0:1
Packit dcde0c
-1:+1:0:-1
Packit dcde0c
+1:-1:0:-1
Packit dcde0c
+1:+1:0:1
Packit dcde0c
+2:+3:0:6
Packit dcde0c
-2:+3:0:-6
Packit dcde0c
+2:-3:0:-6
Packit dcde0c
-2:-3:0:6
Packit dcde0c
111:111:0:12321
Packit dcde0c
10101:10101:0:102030201
Packit dcde0c
1001001:1001001:0:1002003002001
Packit dcde0c
100010001:100010001:0:10002000300020001
Packit dcde0c
10000100001:10000100001:0:100002000030000200001
Packit dcde0c
11111111111:9:0:99999999999
Packit dcde0c
22222222222:9:0:199999999998
Packit dcde0c
33333333333:9:0:299999999997
Packit dcde0c
44444444444:9:0:399999999996
Packit dcde0c
55555555555:9:0:499999999995
Packit dcde0c
66666666666:9:0:599999999994
Packit dcde0c
77777777777:9:0:699999999993
Packit dcde0c
88888888888:9:0:799999999992
Packit dcde0c
99999999999:9:0:899999999991
Packit dcde0c
11111111111:9:1:100000000000
Packit dcde0c
22222222222:9:1:199999999999
Packit dcde0c
33333333333:9:1:299999999998
Packit dcde0c
44444444444:9:1:399999999997
Packit dcde0c
55555555555:9:1:499999999996
Packit dcde0c
66666666666:9:1:599999999995
Packit dcde0c
77777777777:9:1:699999999994
Packit dcde0c
88888888888:9:1:799999999993
Packit dcde0c
99999999999:9:1:899999999992
Packit dcde0c
-3:-4:-5:7
Packit dcde0c
3:-4:-5:-17
Packit dcde0c
-3:4:-5:-17
Packit dcde0c
3:4:-5:7
Packit dcde0c
-3:4:5:-7
Packit dcde0c
3:-4:5:-7
Packit dcde0c
9999999999999999999:10000000000000000000:1234567890:99999999999999999990000000001234567890
Packit dcde0c
2:3:12345678901234567890:12345678901234567896
Packit dcde0c
Packit dcde0c
&bmul
Packit dcde0c
abc:abc:NaN
Packit dcde0c
abc:+0:NaN
Packit dcde0c
+0:abc:NaN
Packit dcde0c
NaNmul:+inf:NaN
Packit dcde0c
NaNmul:-inf:NaN
Packit dcde0c
-inf:NaNmul:NaN
Packit dcde0c
+inf:NaNmul:NaN
Packit dcde0c
+inf:+inf:inf
Packit dcde0c
+inf:-inf:-inf
Packit dcde0c
-inf:+inf:-inf
Packit dcde0c
-inf:-inf:inf
Packit dcde0c
+0:+0:0
Packit dcde0c
+0:+1:0
Packit dcde0c
+1:+0:0
Packit dcde0c
+0:-1:0
Packit dcde0c
-1:+0:0
Packit dcde0c
123456789123456789:0:0
Packit dcde0c
0:123456789123456789:0
Packit dcde0c
-1:-1:1
Packit dcde0c
-1:+1:-1
Packit dcde0c
+1:-1:-1
Packit dcde0c
+1:+1:1
Packit dcde0c
+2:+3:6
Packit dcde0c
-2:+3:-6
Packit dcde0c
+2:-3:-6
Packit dcde0c
-2:-3:6
Packit dcde0c
111:111:12321
Packit dcde0c
10101:10101:102030201
Packit dcde0c
1001001:1001001:1002003002001
Packit dcde0c
100010001:100010001:10002000300020001
Packit dcde0c
10000100001:10000100001:100002000030000200001
Packit dcde0c
11111111111:9:99999999999
Packit dcde0c
22222222222:9:199999999998
Packit dcde0c
33333333333:9:299999999997
Packit dcde0c
44444444444:9:399999999996
Packit dcde0c
55555555555:9:499999999995
Packit dcde0c
66666666666:9:599999999994
Packit dcde0c
77777777777:9:699999999993
Packit dcde0c
88888888888:9:799999999992
Packit dcde0c
99999999999:9:899999999991
Packit dcde0c
+25:+25:625
Packit dcde0c
+12345:+12345:152399025
Packit dcde0c
+99999:+11111:1111088889
Packit dcde0c
9999:10000:99990000
Packit dcde0c
99999:100000:9999900000
Packit dcde0c
999999:1000000:999999000000
Packit dcde0c
9999999:10000000:99999990000000
Packit dcde0c
99999999:100000000:9999999900000000
Packit dcde0c
999999999:1000000000:999999999000000000
Packit dcde0c
9999999999:10000000000:99999999990000000000
Packit dcde0c
99999999999:100000000000:9999999999900000000000
Packit dcde0c
999999999999:1000000000000:999999999999000000000000
Packit dcde0c
9999999999999:10000000000000:99999999999990000000000000
Packit dcde0c
99999999999999:100000000000000:9999999999999900000000000000
Packit dcde0c
999999999999999:1000000000000000:999999999999999000000000000000
Packit dcde0c
9999999999999999:10000000000000000:99999999999999990000000000000000
Packit dcde0c
99999999999999999:100000000000000000:9999999999999999900000000000000000
Packit dcde0c
999999999999999999:1000000000000000000:999999999999999999000000000000000000
Packit dcde0c
9999999999999999999:10000000000000000000:99999999999999999990000000000000000000
Packit dcde0c
Packit dcde0c
&bdiv-list
Packit dcde0c
Packit dcde0c
# Divide by zero and modulo zero.
Packit dcde0c
Packit dcde0c
inf:0:inf,inf
Packit dcde0c
5:0:inf,5
Packit dcde0c
0:0:NaN,0
Packit dcde0c
-5:0:-inf,-5
Packit dcde0c
-inf:0:-inf,-inf
Packit dcde0c
Packit dcde0c
# Numerator (dividend) is +/-inf, and denominator is finite and non-zero.
Packit dcde0c
Packit dcde0c
inf:-inf:NaN,NaN
Packit dcde0c
inf:-5:-inf,NaN
Packit dcde0c
inf:5:inf,NaN
Packit dcde0c
inf:inf:NaN,NaN
Packit dcde0c
Packit dcde0c
-inf:-inf:NaN,NaN
Packit dcde0c
-inf:-5:inf,NaN
Packit dcde0c
-inf:5:-inf,NaN
Packit dcde0c
-inf:inf:NaN,NaN
Packit dcde0c
Packit dcde0c
# Denominator (divisor) is +/-inf. The cases when the numerator is +/-inf
Packit dcde0c
# are covered above.
Packit dcde0c
Packit dcde0c
-5:inf:-1,inf
Packit dcde0c
0:inf:0,0
Packit dcde0c
5:inf:0,5
Packit dcde0c
Packit dcde0c
-5:-inf:0,-5
Packit dcde0c
0:-inf:0,0
Packit dcde0c
5:-inf:-1,-inf
Packit dcde0c
Packit dcde0c
# Numerator is finite, and denominator is finite and non-zero.
Packit dcde0c
Packit dcde0c
-5:-5:1,0
Packit dcde0c
-5:-2:2,-1
Packit dcde0c
-5:-1:5,0
Packit dcde0c
-5:1:-5,0
Packit dcde0c
-5:2:-3,1
Packit dcde0c
-5:5:-1,0
Packit dcde0c
-2:-5:0,-2
Packit dcde0c
-2:-2:1,0
Packit dcde0c
-2:-1:2,0
Packit dcde0c
-2:1:-2,0
Packit dcde0c
-2:2:-1,0
Packit dcde0c
-2:5:-1,3
Packit dcde0c
-1:-5:0,-1
Packit dcde0c
-1:-2:0,-1
Packit dcde0c
-1:-1:1,0
Packit dcde0c
-1:1:-1,0
Packit dcde0c
-1:2:-1,1
Packit dcde0c
-1:5:-1,4
Packit dcde0c
0:-5:0,0
Packit dcde0c
0:-2:0,0
Packit dcde0c
0:-1:0,0
Packit dcde0c
0:1:0,0
Packit dcde0c
0:2:0,0
Packit dcde0c
0:5:0,0
Packit dcde0c
1:-5:-1,-4
Packit dcde0c
1:-2:-1,-1
Packit dcde0c
1:-1:-1,0
Packit dcde0c
1:1:1,0
Packit dcde0c
1:2:0,1
Packit dcde0c
1:5:0,1
Packit dcde0c
2:-5:-1,-3
Packit dcde0c
2:-2:-1,0
Packit dcde0c
2:-1:-2,0
Packit dcde0c
2:1:2,0
Packit dcde0c
2:2:1,0
Packit dcde0c
2:5:0,2
Packit dcde0c
5:-5:-1,0
Packit dcde0c
5:-2:-3,-1
Packit dcde0c
5:-1:-5,0
Packit dcde0c
5:1:5,0
Packit dcde0c
5:2:2,1
Packit dcde0c
5:5:1,0
Packit dcde0c
Packit dcde0c
# test the shortcut in Calc if @$x == @$yorg
Packit dcde0c
1234567812345678:123456712345678:10,688888898
Packit dcde0c
12345671234567:1234561234567:10,58888897
Packit dcde0c
123456123456:12345123456:10,4888896
Packit dcde0c
1234512345:123412345:10,388895
Packit dcde0c
1234567890999999999:1234567890:1000000000,999999999
Packit dcde0c
1234567890000000000:1234567890:1000000000,0
Packit dcde0c
1234567890999999999:9876543210:124999998,9503086419
Packit dcde0c
1234567890000000000:9876543210:124999998,8503086420
Packit dcde0c
96969696969696969696969696969678787878626262626262626262626262:484848484848484848484848486666666666666689898989898989898989:199,484848484848484848484848123012121211954972727272727272727451
Packit dcde0c
# bug in v1.76
Packit dcde0c
1267650600228229401496703205375:1267650600228229401496703205376:0,1267650600228229401496703205375
Packit dcde0c
# exercise shortcut for numbers of the same length in div
Packit dcde0c
999999999999999999999999999999999:999999999999999999999999999999999:1,0
Packit dcde0c
999999999999999999999999999999999:888888888888888888888888888888888:1,111111111111111111111111111111111
Packit dcde0c
999999999999999999999999999999999:777777777777777777777777777777777:1,222222222222222222222222222222222
Packit dcde0c
999999999999999999999999999999999:666666666666666666666666666666666:1,333333333333333333333333333333333
Packit dcde0c
999999999999999999999999999999999:555555555555555555555555555555555:1,444444444444444444444444444444444
Packit dcde0c
999999999999999999999999999999999:444444444444444444444444444444444:2,111111111111111111111111111111111
Packit dcde0c
999999999999999999999999999999999:333333333333333333333333333333333:3,0
Packit dcde0c
999999999999999999999999999999999:222222222222222222222222222222222:4,111111111111111111111111111111111
Packit dcde0c
999999999999999999999999999999999:111111111111111111111111111111111:9,0
Packit dcde0c
9999999_9999999_9999999_9999999:3333333_3333333_3333333_3333333:3,0
Packit dcde0c
9999999_9999999_9999999_9999999:3333333_0000000_0000000_0000000:3,999999999999999999999
Packit dcde0c
9999999_9999999_9999999_9999999:3000000_0000000_0000000_0000000:3,999999999999999999999999999
Packit dcde0c
9999999_9999999_9999999_9999999:2000000_0000000_0000000_0000000:4,1999999999999999999999999999
Packit dcde0c
9999999_9999999_9999999_9999999:1000000_0000000_0000000_0000000:9,999999999999999999999999999
Packit dcde0c
9999999_9999999_9999999_9999999:100000_0000000_0000000_0000000:99,99999999999999999999999999
Packit dcde0c
9999999_9999999_9999999_9999999:10000_0000000_0000000_0000000:999,9999999999999999999999999
Packit dcde0c
9999999_9999999_9999999_9999999:1000_0000000_0000000_0000000:9999,999999999999999999999999
Packit dcde0c
9999999_9999999_9999999_9999999:100_0000000_0000000_0000000:99999,99999999999999999999999
Packit dcde0c
9999999_9999999_9999999_9999999:10_0000000_0000000_0000000:999999,9999999999999999999999
Packit dcde0c
9999999_9999999_9999999_9999999:1_0000000_0000000_0000000:9999999,999999999999999999999
Packit dcde0c
Packit dcde0c
&bdiv
Packit dcde0c
Packit dcde0c
# Divide by zero and modulo zero.
Packit dcde0c
Packit dcde0c
inf:0:inf
Packit dcde0c
5:0:inf
Packit dcde0c
0:0:NaN
Packit dcde0c
-5:0:-inf
Packit dcde0c
-inf:0:-inf
Packit dcde0c
Packit dcde0c
# Numerator (dividend) is +/-inf, and denominator is finite and non-zero.
Packit dcde0c
Packit dcde0c
inf:-inf:NaN
Packit dcde0c
inf:-5:-inf
Packit dcde0c
inf:5:inf
Packit dcde0c
inf:inf:NaN
Packit dcde0c
Packit dcde0c
-inf:-inf:NaN
Packit dcde0c
-inf:-5:inf
Packit dcde0c
-inf:5:-inf
Packit dcde0c
-inf:inf:NaN
Packit dcde0c
Packit dcde0c
# Denominator (divisor) is +/-inf. The cases when the numerator is +/-inf
Packit dcde0c
# are covered above.
Packit dcde0c
Packit dcde0c
-5:inf:-1
Packit dcde0c
0:inf:0
Packit dcde0c
5:inf:0
Packit dcde0c
Packit dcde0c
-5:-inf:0
Packit dcde0c
0:-inf:0
Packit dcde0c
5:-inf:-1
Packit dcde0c
Packit dcde0c
# Numerator is finite, and denominator is finite and non-zero.
Packit dcde0c
Packit dcde0c
5:5:1
Packit dcde0c
-5:-5:1
Packit dcde0c
11:2:5
Packit dcde0c
-11:-2:5
Packit dcde0c
-11:2:-6
Packit dcde0c
11:-2:-6
Packit dcde0c
0:1:0
Packit dcde0c
0:-1:0
Packit dcde0c
1:1:1
Packit dcde0c
-1:-1:1
Packit dcde0c
1:-1:-1
Packit dcde0c
-1:1:-1
Packit dcde0c
1:2:0
Packit dcde0c
2:1:2
Packit dcde0c
1:26:0
Packit dcde0c
1000000000:9:111111111
Packit dcde0c
2000000000:9:222222222
Packit dcde0c
3000000000:9:333333333
Packit dcde0c
4000000000:9:444444444
Packit dcde0c
5000000000:9:555555555
Packit dcde0c
6000000000:9:666666666
Packit dcde0c
7000000000:9:777777777
Packit dcde0c
8000000000:9:888888888
Packit dcde0c
9000000000:9:1000000000
Packit dcde0c
35500000:113:314159
Packit dcde0c
71000000:226:314159
Packit dcde0c
106500000:339:314159
Packit dcde0c
1000000000:3:333333333
Packit dcde0c
+10:+5:2
Packit dcde0c
+100:+4:25
Packit dcde0c
+1000:+8:125
Packit dcde0c
+10000:+16:625
Packit dcde0c
999999999999:9:111111111111
Packit dcde0c
999999999999:99:10101010101
Packit dcde0c
999999999999:999:1001001001
Packit dcde0c
999999999999:9999:100010001
Packit dcde0c
999999999999999:99999:10000100001
Packit dcde0c
+1111088889:99999:11111
Packit dcde0c
-5:-3:1
Packit dcde0c
-5:3:-2
Packit dcde0c
4:3:1
Packit dcde0c
4:-3:-2
Packit dcde0c
1:3:0
Packit dcde0c
1:-3:-1
Packit dcde0c
-2:-3:0
Packit dcde0c
-2:3:-1
Packit dcde0c
8:3:2
Packit dcde0c
-8:3:-3
Packit dcde0c
14:-3:-5
Packit dcde0c
-14:3:-5
Packit dcde0c
-14:-3:4
Packit dcde0c
14:3:4
Packit dcde0c
# bug in Calc with '99999' vs $BASE-1
Packit dcde0c
10000000000000000000000000000000000000000000000000000000000000000000000000000000000:10000000375084540248994272022843165711074:999999962491547381984643365663244474111576
Packit dcde0c
# test the shortcut in Calc if @$x == @$yorg
Packit dcde0c
1234567812345678:123456712345678:10
Packit dcde0c
12345671234567:1234561234567:10
Packit dcde0c
123456123456:12345123456:10
Packit dcde0c
1234512345:123412345:10
Packit dcde0c
1234567890999999999:1234567890:1000000000
Packit dcde0c
1234567890000000000:1234567890:1000000000
Packit dcde0c
1234567890999999999:9876543210:124999998
Packit dcde0c
1234567890000000000:9876543210:124999998
Packit dcde0c
96969696969696969696969696969678787878626262626262626262626262:484848484848484848484848486666666666666689898989898989898989:199
Packit dcde0c
# bug up to v0.35 in Calc (--$q one too many)
Packit dcde0c
84696969696969696956565656566184292929292929292847474747436308080808080808086765396464646464646465:13131313131313131313131313131394949494949494949494949494943535353535353535353535:6449999999999999999
Packit dcde0c
84696969696969696943434343434871161616161616161452525252486813131313131313143230042929292929292930:13131313131313131313131313131394949494949494949494949494943535353535353535353535:6449999999999999998
Packit dcde0c
84696969696969696969696969697497424242424242424242424242385803030303030303030300750000000000000000:13131313131313131313131313131394949494949494949494949494943535353535353535353535:6450000000000000000
Packit dcde0c
84696969696969696930303030303558030303030303030057575757537318181818181818199694689393939393939395:13131313131313131313131313131394949494949494949494949494943535353535353535353535:6449999999999999997
Packit dcde0c
# exercise shortcut for numbers of the same length in div
Packit dcde0c
999999999999999999999999999999999:999999999999999999999999999999999:1
Packit dcde0c
999999999999999999999999999999999:888888888888888888888888888888888:1
Packit dcde0c
999999999999999999999999999999999:777777777777777777777777777777777:1
Packit dcde0c
999999999999999999999999999999999:666666666666666666666666666666666:1
Packit dcde0c
999999999999999999999999999999999:555555555555555555555555555555555:1
Packit dcde0c
999999999999999999999999999999999:444444444444444444444444444444444:2
Packit dcde0c
999999999999999999999999999999999:333333333333333333333333333333333:3
Packit dcde0c
999999999999999999999999999999999:222222222222222222222222222222222:4
Packit dcde0c
999999999999999999999999999999999:111111111111111111111111111111111:9
Packit dcde0c
9999999_9999999_9999999_9999999:3333333_3333333_3333333_3333333:3
Packit dcde0c
9999999_9999999_9999999_9999999:3333333_0000000_0000000_0000000:3
Packit dcde0c
9999999_9999999_9999999_9999999:3000000_0000000_0000000_0000000:3
Packit dcde0c
9999999_9999999_9999999_9999999:2000000_0000000_0000000_0000000:4
Packit dcde0c
9999999_9999999_9999999_9999999:1000000_0000000_0000000_0000000:9
Packit dcde0c
9999999_9999999_9999999_9999999:100000_0000000_0000000_0000000:99
Packit dcde0c
9999999_9999999_9999999_9999999:10000_0000000_0000000_0000000:999
Packit dcde0c
9999999_9999999_9999999_9999999:1000_0000000_0000000_0000000:9999
Packit dcde0c
9999999_9999999_9999999_9999999:100_0000000_0000000_0000000:99999
Packit dcde0c
9999999_9999999_9999999_9999999:10_0000000_0000000_0000000:999999
Packit dcde0c
9999999_9999999_9999999_9999999:1_0000000_0000000_0000000:9999999
Packit dcde0c
# bug with shortcut in Calc 0.44
Packit dcde0c
949418181818187070707070707070707070:181818181853535353535353535353535353:5
Packit dcde0c
Packit dcde0c
&btdiv-list
Packit dcde0c
Packit dcde0c
# Divide by zero and modulo zero.
Packit dcde0c
Packit dcde0c
inf:0:inf,inf
Packit dcde0c
5:0:inf,5
Packit dcde0c
0:0:NaN,0
Packit dcde0c
-5:0:-inf,-5
Packit dcde0c
-inf:0:-inf,-inf
Packit dcde0c
Packit dcde0c
# Numerator (dividend) is +/-inf, and denominator is finite and non-zero.
Packit dcde0c
Packit dcde0c
inf:-inf:NaN,NaN
Packit dcde0c
inf:-5:-inf,NaN
Packit dcde0c
inf:5:inf,NaN
Packit dcde0c
inf:inf:NaN,NaN
Packit dcde0c
Packit dcde0c
-inf:-inf:NaN,NaN
Packit dcde0c
-inf:-5:inf,NaN
Packit dcde0c
-inf:5:-inf,NaN
Packit dcde0c
-inf:inf:NaN,NaN
Packit dcde0c
Packit dcde0c
# Denominator (divisor) is +/-inf. The cases when the numerator is +/-inf
Packit dcde0c
# are covered above.
Packit dcde0c
Packit dcde0c
-5:inf:0,-5
Packit dcde0c
0:inf:0,0
Packit dcde0c
5:inf:0,5
Packit dcde0c
Packit dcde0c
-5:-inf:0,-5
Packit dcde0c
0:-inf:0,0
Packit dcde0c
5:-inf:0,5
Packit dcde0c
Packit dcde0c
# Numerator is finite, and denominator is finite and non-zero.
Packit dcde0c
Packit dcde0c
-5:-5:1,0
Packit dcde0c
-5:-2:2,-1
Packit dcde0c
-5:-1:5,0
Packit dcde0c
-5:1:-5,0
Packit dcde0c
-5:2:-2,-1
Packit dcde0c
-5:5:-1,0
Packit dcde0c
-2:-5:0,-2
Packit dcde0c
-2:-2:1,0
Packit dcde0c
-2:-1:2,0
Packit dcde0c
-2:1:-2,0
Packit dcde0c
-2:2:-1,0
Packit dcde0c
-2:5:0,-2
Packit dcde0c
-1:-5:0,-1
Packit dcde0c
-1:-2:0,-1
Packit dcde0c
-1:-1:1,0
Packit dcde0c
-1:1:-1,0
Packit dcde0c
-1:2:0,-1
Packit dcde0c
-1:5:0,-1
Packit dcde0c
0:-5:0,0
Packit dcde0c
0:-2:0,0
Packit dcde0c
0:-1:0,0
Packit dcde0c
0:1:0,0
Packit dcde0c
0:2:0,0
Packit dcde0c
0:5:0,0
Packit dcde0c
1:-5:0,1
Packit dcde0c
1:-2:0,1
Packit dcde0c
1:-1:-1,0
Packit dcde0c
1:1:1,0
Packit dcde0c
1:2:0,1
Packit dcde0c
1:5:0,1
Packit dcde0c
2:-5:0,2
Packit dcde0c
2:-2:-1,0
Packit dcde0c
2:-1:-2,0
Packit dcde0c
2:1:2,0
Packit dcde0c
2:2:1,0
Packit dcde0c
2:5:0,2
Packit dcde0c
5:-5:-1,0
Packit dcde0c
5:-2:-2,1
Packit dcde0c
5:-1:-5,0
Packit dcde0c
5:1:5,0
Packit dcde0c
5:2:2,1
Packit dcde0c
5:5:1,0
Packit dcde0c
Packit dcde0c
&btdiv
Packit dcde0c
Packit dcde0c
# Divide by zero and modulo zero.
Packit dcde0c
Packit dcde0c
inf:0:inf
Packit dcde0c
5:0:inf
Packit dcde0c
0:0:NaN
Packit dcde0c
-5:0:-inf
Packit dcde0c
-inf:0:-inf
Packit dcde0c
Packit dcde0c
# Numerator (dividend) is +/-inf, and denominator is finite and non-zero.
Packit dcde0c
Packit dcde0c
inf:-inf:NaN
Packit dcde0c
inf:-5:-inf
Packit dcde0c
inf:5:inf
Packit dcde0c
inf:inf:NaN
Packit dcde0c
Packit dcde0c
-inf:-inf:NaN
Packit dcde0c
-inf:-5:inf
Packit dcde0c
-inf:5:-inf
Packit dcde0c
-inf:inf:NaN
Packit dcde0c
Packit dcde0c
# Denominator (divisor) is +/-inf. The cases when the numerator is +/-inf
Packit dcde0c
# are covered above.
Packit dcde0c
Packit dcde0c
-5:inf:0
Packit dcde0c
0:inf:0
Packit dcde0c
5:inf:0
Packit dcde0c
Packit dcde0c
-5:-inf:0
Packit dcde0c
0:-inf:0
Packit dcde0c
5:-inf:0
Packit dcde0c
Packit dcde0c
# Numerator is finite, and denominator is finite and non-zero.
Packit dcde0c
Packit dcde0c
-5:-5:1
Packit dcde0c
-5:-2:2
Packit dcde0c
-5:-1:5
Packit dcde0c
-5:1:-5
Packit dcde0c
-5:2:-2
Packit dcde0c
-5:5:-1
Packit dcde0c
-2:-5:0
Packit dcde0c
-2:-2:1
Packit dcde0c
-2:-1:2
Packit dcde0c
-2:1:-2
Packit dcde0c
-2:2:-1
Packit dcde0c
-2:5:0
Packit dcde0c
-1:-5:0
Packit dcde0c
-1:-2:0
Packit dcde0c
-1:-1:1
Packit dcde0c
-1:1:-1
Packit dcde0c
-1:2:0
Packit dcde0c
-1:5:0
Packit dcde0c
0:-5:0
Packit dcde0c
0:-2:0
Packit dcde0c
0:-1:0
Packit dcde0c
0:1:0
Packit dcde0c
0:2:0
Packit dcde0c
0:5:0
Packit dcde0c
1:-5:0
Packit dcde0c
1:-2:0
Packit dcde0c
1:-1:-1
Packit dcde0c
1:1:1
Packit dcde0c
1:2:0
Packit dcde0c
1:5:0
Packit dcde0c
2:-5:0
Packit dcde0c
2:-2:-1
Packit dcde0c
2:-1:-2
Packit dcde0c
2:1:2
Packit dcde0c
2:2:1
Packit dcde0c
2:5:0
Packit dcde0c
5:-5:-1
Packit dcde0c
5:-2:-2
Packit dcde0c
5:-1:-5
Packit dcde0c
5:1:5
Packit dcde0c
5:2:2
Packit dcde0c
5:5:1
Packit dcde0c
Packit dcde0c
###############################################################################
Packit dcde0c
Packit dcde0c
&bmodinv
Packit dcde0c
# format: number:modulus:result
Packit dcde0c
# bmodinv Data errors
Packit dcde0c
abc:abc:NaN
Packit dcde0c
abc:5:NaN
Packit dcde0c
5:abc:NaN
Packit dcde0c
# bmodinv Expected Results from normal use
Packit dcde0c
1:5:1
Packit dcde0c
3:5:2
Packit dcde0c
3:-5:-3
Packit dcde0c
-2:5:2
Packit dcde0c
8:5033:4404
Packit dcde0c
1234567891:13:6
Packit dcde0c
-1234567891:13:7
Packit dcde0c
324958749843759385732954874325984357439658735983745:2348249874968739:1741662881064902
Packit dcde0c
-2:1:0
Packit dcde0c
-1:1:0
Packit dcde0c
0:1:0
Packit dcde0c
1:1:0
Packit dcde0c
2:1:0
Packit dcde0c
3:1:0
Packit dcde0c
4:1:0
Packit dcde0c
-2:3:1
Packit dcde0c
-1:3:2
Packit dcde0c
0:3:NaN
Packit dcde0c
1:3:1
Packit dcde0c
2:3:2
Packit dcde0c
3:3:NaN
Packit dcde0c
4:3:1
Packit dcde0c
-2:4:NaN
Packit dcde0c
-1:4:3
Packit dcde0c
0:4:NaN
Packit dcde0c
1:4:1
Packit dcde0c
2:4:NaN
Packit dcde0c
3:4:3
Packit dcde0c
4:4:NaN
Packit dcde0c
## bmodinv Error cases / useless use of function
Packit dcde0c
inf:5:NaN
Packit dcde0c
5:inf:NaN
Packit dcde0c
-inf:5:NaN
Packit dcde0c
5:-inf:NaN
Packit dcde0c
Packit dcde0c
&bmodpow
Packit dcde0c
# format: number:exponent:modulus:result
Packit dcde0c
# bmodpow Data errors
Packit dcde0c
abc:abc:abc:NaN
Packit dcde0c
5:abc:abc:NaN
Packit dcde0c
abc:5:abc:NaN
Packit dcde0c
abc:abc:5:NaN
Packit dcde0c
5:5:abc:NaN
Packit dcde0c
5:abc:5:NaN
Packit dcde0c
abc:5:5:NaN
Packit dcde0c
3:5:0:3
Packit dcde0c
# bmodpow Expected results
Packit dcde0c
0:0:2:1
Packit dcde0c
1:0:2:1
Packit dcde0c
0:3:5:0
Packit dcde0c
-2:-2:1:0
Packit dcde0c
-1:-2:1:0
Packit dcde0c
0:-2:1:0
Packit dcde0c
1:-2:1:0
Packit dcde0c
2:-2:1:0
Packit dcde0c
3:-2:1:0
Packit dcde0c
4:-2:1:0
Packit dcde0c
-2:-1:1:0
Packit dcde0c
-1:-1:1:0
Packit dcde0c
0:-1:1:0
Packit dcde0c
1:-1:1:0
Packit dcde0c
2:-1:1:0
Packit dcde0c
3:-1:1:0
Packit dcde0c
4:-1:1:0
Packit dcde0c
-2:0:1:0
Packit dcde0c
-1:0:1:0
Packit dcde0c
0:0:1:0
Packit dcde0c
1:0:1:0
Packit dcde0c
2:0:1:0
Packit dcde0c
3:0:1:0
Packit dcde0c
4:0:1:0
Packit dcde0c
-2:1:1:0
Packit dcde0c
-1:1:1:0
Packit dcde0c
0:1:1:0
Packit dcde0c
1:1:1:0
Packit dcde0c
2:1:1:0
Packit dcde0c
3:1:1:0
Packit dcde0c
4:1:1:0
Packit dcde0c
-2:2:1:0
Packit dcde0c
-1:2:1:0
Packit dcde0c
0:2:1:0
Packit dcde0c
1:2:1:0
Packit dcde0c
2:2:1:0
Packit dcde0c
3:2:1:0
Packit dcde0c
4:2:1:0
Packit dcde0c
-2:3:1:0
Packit dcde0c
-1:3:1:0
Packit dcde0c
0:3:1:0
Packit dcde0c
1:3:1:0
Packit dcde0c
2:3:1:0
Packit dcde0c
3:3:1:0
Packit dcde0c
4:3:1:0
Packit dcde0c
-2:4:1:0
Packit dcde0c
-1:4:1:0
Packit dcde0c
0:4:1:0
Packit dcde0c
1:4:1:0
Packit dcde0c
2:4:1:0
Packit dcde0c
3:4:1:0
Packit dcde0c
4:4:1:0
Packit dcde0c
-2:-2:3:1
Packit dcde0c
-1:-2:3:1
Packit dcde0c
0:-2:3:NaN
Packit dcde0c
1:-2:3:1
Packit dcde0c
2:-2:3:1
Packit dcde0c
3:-2:3:NaN
Packit dcde0c
4:-2:3:1
Packit dcde0c
-2:-1:3:1
Packit dcde0c
-1:-1:3:2
Packit dcde0c
0:-1:3:NaN
Packit dcde0c
1:-1:3:1
Packit dcde0c
2:-1:3:2
Packit dcde0c
3:-1:3:NaN
Packit dcde0c
4:-1:3:1
Packit dcde0c
-2:0:3:1
Packit dcde0c
-1:0:3:1
Packit dcde0c
0:0:3:1
Packit dcde0c
1:0:3:1
Packit dcde0c
2:0:3:1
Packit dcde0c
3:0:3:1
Packit dcde0c
4:0:3:1
Packit dcde0c
-2:1:3:1
Packit dcde0c
-1:1:3:2
Packit dcde0c
0:1:3:0
Packit dcde0c
1:1:3:1
Packit dcde0c
2:1:3:2
Packit dcde0c
3:1:3:0
Packit dcde0c
4:1:3:1
Packit dcde0c
-2:2:3:1
Packit dcde0c
-1:2:3:1
Packit dcde0c
0:2:3:0
Packit dcde0c
1:2:3:1
Packit dcde0c
2:2:3:1
Packit dcde0c
3:2:3:0
Packit dcde0c
4:2:3:1
Packit dcde0c
-2:3:3:1
Packit dcde0c
-1:3:3:2
Packit dcde0c
0:3:3:0
Packit dcde0c
1:3:3:1
Packit dcde0c
2:3:3:2
Packit dcde0c
3:3:3:0
Packit dcde0c
4:3:3:1
Packit dcde0c
-2:4:3:1
Packit dcde0c
-1:4:3:1
Packit dcde0c
0:4:3:0
Packit dcde0c
1:4:3:1
Packit dcde0c
2:4:3:1
Packit dcde0c
3:4:3:0
Packit dcde0c
4:4:3:1
Packit dcde0c
-2:-2:4:NaN
Packit dcde0c
-1:-2:4:1
Packit dcde0c
0:-2:4:NaN
Packit dcde0c
1:-2:4:1
Packit dcde0c
2:-2:4:NaN
Packit dcde0c
3:-2:4:1
Packit dcde0c
4:-2:4:NaN
Packit dcde0c
-2:-1:4:NaN
Packit dcde0c
-1:-1:4:3
Packit dcde0c
0:-1:4:NaN
Packit dcde0c
1:-1:4:1
Packit dcde0c
2:-1:4:NaN
Packit dcde0c
3:-1:4:3
Packit dcde0c
4:-1:4:NaN
Packit dcde0c
-2:0:4:1
Packit dcde0c
-1:0:4:1
Packit dcde0c
0:0:4:1
Packit dcde0c
1:0:4:1
Packit dcde0c
2:0:4:1
Packit dcde0c
3:0:4:1
Packit dcde0c
4:0:4:1
Packit dcde0c
-2:1:4:2
Packit dcde0c
-1:1:4:3
Packit dcde0c
0:1:4:0
Packit dcde0c
1:1:4:1
Packit dcde0c
2:1:4:2
Packit dcde0c
3:1:4:3
Packit dcde0c
4:1:4:0
Packit dcde0c
-2:2:4:0
Packit dcde0c
-1:2:4:1
Packit dcde0c
0:2:4:0
Packit dcde0c
1:2:4:1
Packit dcde0c
2:2:4:0
Packit dcde0c
3:2:4:1
Packit dcde0c
4:2:4:0
Packit dcde0c
-2:3:4:0
Packit dcde0c
-1:3:4:3
Packit dcde0c
0:3:4:0
Packit dcde0c
1:3:4:1
Packit dcde0c
2:3:4:0
Packit dcde0c
3:3:4:3
Packit dcde0c
4:3:4:0
Packit dcde0c
-2:4:4:0
Packit dcde0c
-1:4:4:1
Packit dcde0c
0:4:4:0
Packit dcde0c
1:4:4:1
Packit dcde0c
2:4:4:0
Packit dcde0c
3:4:4:1
Packit dcde0c
4:4:4:0
Packit dcde0c
8:-1:16:NaN
Packit dcde0c
8:-1:5033:4404
Packit dcde0c
8:7:5032:3840
Packit dcde0c
8:8:-5:-4
Packit dcde0c
1e50:1:1:0
Packit dcde0c
98436739867439843769485798542749827593285729587325:43698764986460981048259837659386739857456983759328457:6943857329857295827698367:3104744730915914415259518
Packit dcde0c
# bmodpow Error cases
Packit dcde0c
inf:5:13:NaN
Packit dcde0c
5:inf:13:NaN
Packit dcde0c
Packit dcde0c
&bmod
Packit dcde0c
Packit dcde0c
# Divide by zero and modulo zero.
Packit dcde0c
Packit dcde0c
inf:0:inf
Packit dcde0c
5:0:5
Packit dcde0c
0:0:0
Packit dcde0c
-5:0:-5
Packit dcde0c
-inf:0:-inf
Packit dcde0c
Packit dcde0c
# Numerator (dividend) is +/-inf, and denominator is finite and non-zero.
Packit dcde0c
Packit dcde0c
inf:-inf:NaN
Packit dcde0c
inf:-5:NaN
Packit dcde0c
inf:5:NaN
Packit dcde0c
inf:inf:NaN
Packit dcde0c
Packit dcde0c
-inf:-inf:NaN
Packit dcde0c
-inf:-5:NaN
Packit dcde0c
-inf:5:NaN
Packit dcde0c
-inf:inf:NaN
Packit dcde0c
Packit dcde0c
# Denominator (divisor) is +/-inf. The cases when the numerator is +/-inf
Packit dcde0c
# are covered above.
Packit dcde0c
Packit dcde0c
-5:inf:inf
Packit dcde0c
0:inf:0
Packit dcde0c
5:inf:5
Packit dcde0c
Packit dcde0c
-5:-inf:-5
Packit dcde0c
0:-inf:0
Packit dcde0c
5:-inf:-inf
Packit dcde0c
Packit dcde0c
# Numerator is finite, and denominator is finite and non-zero.
Packit dcde0c
Packit dcde0c
5:5:0
Packit dcde0c
-5:-5:0
Packit dcde0c
0:1:0
Packit dcde0c
0:-1:0
Packit dcde0c
1:1:0
Packit dcde0c
-1:-1:0
Packit dcde0c
1:-1:0
Packit dcde0c
-1:1:0
Packit dcde0c
1:2:1
Packit dcde0c
2:1:0
Packit dcde0c
1000000000:9:1
Packit dcde0c
2000000000:9:2
Packit dcde0c
3000000000:9:3
Packit dcde0c
4000000000:9:4
Packit dcde0c
5000000000:9:5
Packit dcde0c
6000000000:9:6
Packit dcde0c
7000000000:9:7
Packit dcde0c
8000000000:9:8
Packit dcde0c
9000000000:9:0
Packit dcde0c
35500000:113:33
Packit dcde0c
71000000:226:66
Packit dcde0c
106500000:339:99
Packit dcde0c
1000000000:3:1
Packit dcde0c
10:5:0
Packit dcde0c
100:4:0
Packit dcde0c
1000:8:0
Packit dcde0c
10000:16:0
Packit dcde0c
999999999999:9:0
Packit dcde0c
999999999999:99:0
Packit dcde0c
999999999999:999:0
Packit dcde0c
999999999999:9999:0
Packit dcde0c
999999999999999:99999:0
Packit dcde0c
-9:+5:1
Packit dcde0c
+9:-5:-1
Packit dcde0c
-9:-5:-4
Packit dcde0c
-5:3:1
Packit dcde0c
-2:3:1
Packit dcde0c
4:3:1
Packit dcde0c
1:3:1
Packit dcde0c
-5:-3:-2
Packit dcde0c
-2:-3:-2
Packit dcde0c
4:-3:-2
Packit dcde0c
1:-3:-2
Packit dcde0c
4095:4095:0
Packit dcde0c
100041000510123:3:0
Packit dcde0c
152403346:12345:4321
Packit dcde0c
9:5:4
Packit dcde0c
# test shortcuts in Calc
Packit dcde0c
# 1ex % 9 is always == 1, 1ex % 113 is != 1 for x = (4..9), 1ex % 10 = 0
Packit dcde0c
1234:9:1
Packit dcde0c
123456:9:3
Packit dcde0c
12345678:9:0
Packit dcde0c
1234567891:9:1
Packit dcde0c
123456789123:9:6
Packit dcde0c
12345678912345:9:6
Packit dcde0c
1234567891234567:9:1
Packit dcde0c
123456789123456789:9:0
Packit dcde0c
1234:10:4
Packit dcde0c
123456:10:6
Packit dcde0c
12345678:10:8
Packit dcde0c
1234567891:10:1
Packit dcde0c
123456789123:10:3
Packit dcde0c
12345678912345:10:5
Packit dcde0c
1234567891234567:10:7
Packit dcde0c
123456789123456789:10:9
Packit dcde0c
1234:113:104
Packit dcde0c
123456:113:60
Packit dcde0c
12345678:113:89
Packit dcde0c
1234567891:113:64
Packit dcde0c
123456789123:113:95
Packit dcde0c
12345678912345:113:53
Packit dcde0c
1234567891234567:113:56
Packit dcde0c
123456789123456789:113:39
Packit dcde0c
# bug in bmod() not modifying the variable in place
Packit dcde0c
-629:5033:4404
Packit dcde0c
# bug in bmod() in Calc in the _div_use_div() shortcut code path,
Packit dcde0c
# when X == X and X was big
Packit dcde0c
111111111111111111111111111111:111111111111111111111111111111:0
Packit dcde0c
12345678901234567890:12345678901234567890:0
Packit dcde0c
Packit dcde0c
&bgcd
Packit dcde0c
inf:12:NaN
Packit dcde0c
-inf:12:NaN
Packit dcde0c
12:inf:NaN
Packit dcde0c
12:-inf:NaN
Packit dcde0c
inf:inf:NaN
Packit dcde0c
inf:-inf:NaN
Packit dcde0c
-inf:-inf:NaN
Packit dcde0c
abc:abc:NaN
Packit dcde0c
abc:+0:NaN
Packit dcde0c
+0:abc:NaN
Packit dcde0c
+0:+0:0
Packit dcde0c
+0:+1:1
Packit dcde0c
+1:+0:1
Packit dcde0c
+1:+1:1
Packit dcde0c
+2:+3:1
Packit dcde0c
+3:+2:1
Packit dcde0c
-3:+2:1
Packit dcde0c
-3:-2:1
Packit dcde0c
-144:-60:12
Packit dcde0c
144:-60:12
Packit dcde0c
144:60:12
Packit dcde0c
100:625:25
Packit dcde0c
4096:81:1
Packit dcde0c
1034:804:2
Packit dcde0c
27:90:56:1
Packit dcde0c
27:90:54:9
Packit dcde0c
Packit dcde0c
&blcm
Packit dcde0c
abc:abc:NaN
Packit dcde0c
abc:+0:NaN
Packit dcde0c
+0:abc:NaN
Packit dcde0c
+0:+0:0
Packit dcde0c
+1:+0:0
Packit dcde0c
+0:+1:0
Packit dcde0c
+27:+90:270
Packit dcde0c
+1034:+804:415668
Packit dcde0c
Packit dcde0c
&band
Packit dcde0c
abc:abc:NaN
Packit dcde0c
abc:0:NaN
Packit dcde0c
0:abc:NaN
Packit dcde0c
1:2:0
Packit dcde0c
3:2:2
Packit dcde0c
+8:+2:0
Packit dcde0c
+281474976710656:0:0
Packit dcde0c
+281474976710656:1:0
Packit dcde0c
+281474976710656:+281474976710656:281474976710656
Packit dcde0c
281474976710656:-1:281474976710656
Packit dcde0c
-2:-3:-4
Packit dcde0c
-1:-1:-1
Packit dcde0c
-6:-6:-6
Packit dcde0c
-7:-4:-8
Packit dcde0c
-7:4:0
Packit dcde0c
-4:7:4
Packit dcde0c
# negative argument is bitwise shorter than positive [perl #26559]
Packit dcde0c
30:-3:28
Packit dcde0c
123:-1:123
Packit dcde0c
# equal arguments are treated special, so also do some test with unequal ones
Packit dcde0c
0xFFFF:0xFFFF:0x0xFFFF
Packit dcde0c
0xFFFFFF:0xFFFFFF:0x0xFFFFFF
Packit dcde0c
0xFFFFFFFF:0xFFFFFFFF:0x0xFFFFFFFF
Packit dcde0c
0xFFFFFFFFFF:0xFFFFFFFFFF:0x0xFFFFFFFFFF
Packit dcde0c
0xFFFFFFFFFFFF:0xFFFFFFFFFFFF:0x0xFFFFFFFFFFFF
Packit dcde0c
0xF0F0:0xF0F0:0x0xF0F0
Packit dcde0c
0x0F0F:0x0F0F:0x0x0F0F
Packit dcde0c
0xF0F0F0:0xF0F0F0:0x0xF0F0F0
Packit dcde0c
0x0F0F0F:0x0F0F0F:0x0x0F0F0F
Packit dcde0c
0xF0F0F0F0:0xF0F0F0F0:0x0xF0F0F0F0
Packit dcde0c
0x0F0F0F0F:0x0F0F0F0F:0x0x0F0F0F0F
Packit dcde0c
0xF0F0F0F0F0:0xF0F0F0F0F0:0x0xF0F0F0F0F0
Packit dcde0c
0x0F0F0F0F0F:0x0F0F0F0F0F:0x0x0F0F0F0F0F
Packit dcde0c
0xF0F0F0F0F0F0:0xF0F0F0F0F0F0:0x0xF0F0F0F0F0F0
Packit dcde0c
0x0F0F0F0F0F0F:0x0F0F0F0F0F0F:0x0x0F0F0F0F0F0F
Packit dcde0c
0x1F0F0F0F0F0F:0x3F0F0F0F0F0F:0x0x1F0F0F0F0F0F
Packit dcde0c
Packit dcde0c
&bior
Packit dcde0c
abc:abc:NaN
Packit dcde0c
abc:0:NaN
Packit dcde0c
0:abc:NaN
Packit dcde0c
1:2:3
Packit dcde0c
+8:+2:10
Packit dcde0c
+281474976710656:0:281474976710656
Packit dcde0c
+281474976710656:1:281474976710657
Packit dcde0c
+281474976710656:281474976710656:281474976710656
Packit dcde0c
-2:-3:-1
Packit dcde0c
-1:-1:-1
Packit dcde0c
-6:-6:-6
Packit dcde0c
-7:4:-3
Packit dcde0c
-4:7:-1
Packit dcde0c
+281474976710656:-1:-1
Packit dcde0c
30:-3:-1
Packit dcde0c
30:-4:-2
Packit dcde0c
300:-76:-68
Packit dcde0c
-76:300:-68
Packit dcde0c
# equal arguments are treated special, so also do some test with unequal ones
Packit dcde0c
0xFFFF:0xFFFF:0x0xFFFF
Packit dcde0c
0xFFFFFF:0xFFFFFF:0x0xFFFFFF
Packit dcde0c
0xFFFFFFFF:0xFFFFFFFF:0x0xFFFFFFFF
Packit dcde0c
0xFFFFFFFFFF:0xFFFFFFFFFF:0x0xFFFFFFFFFF
Packit dcde0c
0xFFFFFFFFFFFF:0xFFFFFFFFFFFF:0x0xFFFFFFFFFFFF
Packit dcde0c
0:0xFFFF:0x0xFFFF
Packit dcde0c
0:0xFFFFFF:0x0xFFFFFF
Packit dcde0c
0:0xFFFFFFFF:0x0xFFFFFFFF
Packit dcde0c
0:0xFFFFFFFFFF:0x0xFFFFFFFFFF
Packit dcde0c
0:0xFFFFFFFFFFFF:0x0xFFFFFFFFFFFF
Packit dcde0c
0xFFFF:0:0x0xFFFF
Packit dcde0c
0xFFFFFF:0:0x0xFFFFFF
Packit dcde0c
0xFFFFFFFF:0:0x0xFFFFFFFF
Packit dcde0c
0xFFFFFFFFFF:0:0x0xFFFFFFFFFF
Packit dcde0c
0xFFFFFFFFFFFF:0:0x0xFFFFFFFFFFFF
Packit dcde0c
0xF0F0:0xF0F0:0x0xF0F0
Packit dcde0c
0x0F0F:0x0F0F:0x0x0F0F
Packit dcde0c
0xF0F0:0x0F0F:0x0xFFFF
Packit dcde0c
0xF0F0F0:0xF0F0F0:0x0xF0F0F0
Packit dcde0c
0x0F0F0F:0x0F0F0F:0x0x0F0F0F
Packit dcde0c
0x0F0F0F:0xF0F0F0:0x0xFFFFFF
Packit dcde0c
0xF0F0F0F0:0xF0F0F0F0:0x0xF0F0F0F0
Packit dcde0c
0x0F0F0F0F:0x0F0F0F0F:0x0x0F0F0F0F
Packit dcde0c
0x0F0F0F0F:0xF0F0F0F0:0x0xFFFFFFFF
Packit dcde0c
0xF0F0F0F0F0:0xF0F0F0F0F0:0x0xF0F0F0F0F0
Packit dcde0c
0x0F0F0F0F0F:0x0F0F0F0F0F:0x0x0F0F0F0F0F
Packit dcde0c
0x0F0F0F0F0F:0xF0F0F0F0F0:0x0xFFFFFFFFFF
Packit dcde0c
0xF0F0F0F0F0F0:0xF0F0F0F0F0F0:0x0xF0F0F0F0F0F0
Packit dcde0c
0x0F0F0F0F0F0F:0x0F0F0F0F0F0F:0x0x0F0F0F0F0F0F
Packit dcde0c
0x0F0F0F0F0F0F:0xF0F0F0F0F0F0:0x0xFFFFFFFFFFFF
Packit dcde0c
0x1F0F0F0F0F0F:0xF0F0F0F0F0F0:0x0xFFFFFFFFFFFF
Packit dcde0c
Packit dcde0c
&bxor
Packit dcde0c
abc:abc:NaN
Packit dcde0c
abc:0:NaN
Packit dcde0c
0:abc:NaN
Packit dcde0c
1:2:3
Packit dcde0c
+8:+2:10
Packit dcde0c
+281474976710656:0:281474976710656
Packit dcde0c
+281474976710656:1:281474976710657
Packit dcde0c
+281474976710656:281474976710656:0
Packit dcde0c
-2:-3:3
Packit dcde0c
-1:-1:0
Packit dcde0c
-6:-6:0
Packit dcde0c
-7:4:-3
Packit dcde0c
-4:7:-5
Packit dcde0c
4:-7:-3
Packit dcde0c
-4:-7:5
Packit dcde0c
30:-3:-29
Packit dcde0c
30:-4:-30
Packit dcde0c
300:-76:-360
Packit dcde0c
-76:300:-360
Packit dcde0c
# equal arguments are treated special, so also do some test with unequal ones
Packit dcde0c
0xFFFF:0xFFFF:0
Packit dcde0c
0xFFFFFF:0xFFFFFF:0
Packit dcde0c
0xFFFFFFFF:0xFFFFFFFF:0
Packit dcde0c
0xFFFFFFFFFF:0xFFFFFFFFFF:0
Packit dcde0c
0xFFFFFFFFFFFF:0xFFFFFFFFFFFF:0
Packit dcde0c
0:0xFFFF:0x0xFFFF
Packit dcde0c
0:0xFFFFFF:0x0xFFFFFF
Packit dcde0c
0:0xFFFFFFFF:0x0xFFFFFFFF
Packit dcde0c
0:0xFFFFFFFFFF:0x0xFFFFFFFFFF
Packit dcde0c
0:0xFFFFFFFFFFFF:0x0xFFFFFFFFFFFF
Packit dcde0c
0xFFFF:0:0x0xFFFF
Packit dcde0c
0xFFFFFF:0:0x0xFFFFFF
Packit dcde0c
0xFFFFFFFF:0:0x0xFFFFFFFF
Packit dcde0c
0xFFFFFFFFFF:0:0x0xFFFFFFFFFF
Packit dcde0c
0xFFFFFFFFFFFF:0:0x0xFFFFFFFFFFFF
Packit dcde0c
0xF0F0:0xF0F0:0
Packit dcde0c
0x0F0F:0x0F0F:0
Packit dcde0c
0xF0F0:0x0F0F:0x0xFFFF
Packit dcde0c
0xF0F0F0:0xF0F0F0:0
Packit dcde0c
0x0F0F0F:0x0F0F0F:0
Packit dcde0c
0x0F0F0F:0xF0F0F0:0x0xFFFFFF
Packit dcde0c
0xF0F0F0F0:0xF0F0F0F0:0
Packit dcde0c
0x0F0F0F0F:0x0F0F0F0F:0
Packit dcde0c
0x0F0F0F0F:0xF0F0F0F0:0x0xFFFFFFFF
Packit dcde0c
0xF0F0F0F0F0:0xF0F0F0F0F0:0
Packit dcde0c
0x0F0F0F0F0F:0x0F0F0F0F0F:0
Packit dcde0c
0x0F0F0F0F0F:0xF0F0F0F0F0:0x0xFFFFFFFFFF
Packit dcde0c
0xF0F0F0F0F0F0:0xF0F0F0F0F0F0:0
Packit dcde0c
0x0F0F0F0F0F0F:0x0F0F0F0F0F0F:0
Packit dcde0c
0x0F0F0F0F0F0F:0xF0F0F0F0F0F0:0x0xFFFFFFFFFFFF
Packit dcde0c
Packit dcde0c
&bnot
Packit dcde0c
abc:NaN
Packit dcde0c
+0:-1
Packit dcde0c
+8:-9
Packit dcde0c
+281474976710656:-281474976710657
Packit dcde0c
-1:0
Packit dcde0c
-2:1
Packit dcde0c
-12:11
Packit dcde0c
Packit dcde0c
&digit
Packit dcde0c
0:0:0
Packit dcde0c
12:0:2
Packit dcde0c
12:1:1
Packit dcde0c
123:0:3
Packit dcde0c
123:1:2
Packit dcde0c
123:2:1
Packit dcde0c
123:-1:1
Packit dcde0c
123:-2:2
Packit dcde0c
123:-3:3
Packit dcde0c
123456:0:6
Packit dcde0c
123456:1:5
Packit dcde0c
123456:2:4
Packit dcde0c
123456:3:3
Packit dcde0c
123456:4:2
Packit dcde0c
123456:5:1
Packit dcde0c
123456:-1:1
Packit dcde0c
123456:-2:2
Packit dcde0c
123456:-3:3
Packit dcde0c
100000:-3:0
Packit dcde0c
100000:0:0
Packit dcde0c
100000:1:0
Packit dcde0c
Packit dcde0c
&mantissa
Packit dcde0c
abc:NaN
Packit dcde0c
1e4:1
Packit dcde0c
2e0:2
Packit dcde0c
123:123
Packit dcde0c
-1:-1
Packit dcde0c
-2:-2
Packit dcde0c
+inf:inf
Packit dcde0c
-inf:-inf
Packit dcde0c
Packit dcde0c
&exponent
Packit dcde0c
abc:NaN
Packit dcde0c
1e4:4
Packit dcde0c
2e0:0
Packit dcde0c
123:0
Packit dcde0c
-1:0
Packit dcde0c
-2:0
Packit dcde0c
0:0
Packit dcde0c
+inf:inf
Packit dcde0c
-inf:inf
Packit dcde0c
Packit dcde0c
&parts
Packit dcde0c
abc:NaN,NaN
Packit dcde0c
1e4:1,4
Packit dcde0c
2e0:2,0
Packit dcde0c
123:123,0
Packit dcde0c
-1:-1,0
Packit dcde0c
-2:-2,0
Packit dcde0c
0:0,0
Packit dcde0c
+inf:inf,inf
Packit dcde0c
-inf:-inf,inf
Packit dcde0c
Packit dcde0c
&bfac
Packit dcde0c
-1:NaN
Packit dcde0c
NaNfac:NaN
Packit dcde0c
+inf:inf
Packit dcde0c
-inf:NaN
Packit dcde0c
0:1
Packit dcde0c
1:1
Packit dcde0c
2:2
Packit dcde0c
3:6
Packit dcde0c
4:24
Packit dcde0c
5:120
Packit dcde0c
6:720
Packit dcde0c
7:5040
Packit dcde0c
8:40320
Packit dcde0c
9:362880
Packit dcde0c
10:3628800
Packit dcde0c
11:39916800
Packit dcde0c
12:479001600
Packit dcde0c
20:2432902008176640000
Packit dcde0c
22:1124000727777607680000
Packit dcde0c
69:171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000
Packit dcde0c
Packit dcde0c
&bpow
Packit dcde0c
abc:12:NaN
Packit dcde0c
12:abc:NaN
Packit dcde0c
0:0:1
Packit dcde0c
0:1:0
Packit dcde0c
0:2:0
Packit dcde0c
0:-1:inf
Packit dcde0c
0:-2:inf
Packit dcde0c
1:0:1
Packit dcde0c
1:1:1
Packit dcde0c
1:2:1
Packit dcde0c
1:3:1
Packit dcde0c
1:-1:1
Packit dcde0c
1:-2:1
Packit dcde0c
1:-3:1
Packit dcde0c
2:0:1
Packit dcde0c
2:1:2
Packit dcde0c
2:2:4
Packit dcde0c
2:3:8
Packit dcde0c
3:3:27
Packit dcde0c
-2:2:4
Packit dcde0c
-2:3:-8
Packit dcde0c
-2:4:16
Packit dcde0c
-2:5:-32
Packit dcde0c
2:-1:NaN
Packit dcde0c
-2:-1:NaN
Packit dcde0c
2:-2:NaN
Packit dcde0c
-2:-2:NaN
Packit dcde0c
# inf tests
Packit dcde0c
+inf:1234500012:inf
Packit dcde0c
-inf:1234500012:inf
Packit dcde0c
-inf:1234500013:-inf
Packit dcde0c
+inf:-12345000123:inf
Packit dcde0c
-inf:-12345000123:-inf
Packit dcde0c
#  -inf * -inf = inf
Packit dcde0c
-inf:2:inf
Packit dcde0c
-inf:0:NaN
Packit dcde0c
-inf:-1:0
Packit dcde0c
-inf:inf:NaN
Packit dcde0c
2:inf:inf
Packit dcde0c
2:-inf:0
Packit dcde0c
0:inf:0
Packit dcde0c
0:-inf:inf
Packit dcde0c
-1:-inf:NaN
Packit dcde0c
-1:inf:NaN
Packit dcde0c
-2:inf:NaN
Packit dcde0c
-2:-inf:0
Packit dcde0c
NaN:inf:NaN
Packit dcde0c
NaN:-inf:NaN
Packit dcde0c
-inf:NaN:NaN
Packit dcde0c
inf:NaN:NaN
Packit dcde0c
inf:-inf:NaN
Packit dcde0c
1:inf:1
Packit dcde0c
1:-inf:1
Packit dcde0c
# 1 ** -x => 1 / (1 ** x)
Packit dcde0c
-1:0:1
Packit dcde0c
-2:0:1
Packit dcde0c
-1:1:-1
Packit dcde0c
-1:2:1
Packit dcde0c
-1:3:-1
Packit dcde0c
-1:4:1
Packit dcde0c
-1:5:-1
Packit dcde0c
-1:-1:-1
Packit dcde0c
-1:-2:1
Packit dcde0c
-1:-3:-1
Packit dcde0c
-1:-4:1
Packit dcde0c
10:2:100
Packit dcde0c
10:3:1000
Packit dcde0c
10:4:10000
Packit dcde0c
10:5:100000
Packit dcde0c
10:6:1000000
Packit dcde0c
10:7:10000000
Packit dcde0c
10:8:100000000
Packit dcde0c
10:9:1000000000
Packit dcde0c
10:20:100000000000000000000
Packit dcde0c
123456:2:15241383936
Packit dcde0c
-2:2:4
Packit dcde0c
-2:3:-8
Packit dcde0c
-2:4:16
Packit dcde0c
-2:5:-32
Packit dcde0c
-3:2:9
Packit dcde0c
-3:3:-27
Packit dcde0c
-3:4:81
Packit dcde0c
-3:5:-243
Packit dcde0c
Packit dcde0c
&length
Packit dcde0c
100:3
Packit dcde0c
10:2
Packit dcde0c
1:1
Packit dcde0c
0:1
Packit dcde0c
12345:5
Packit dcde0c
10000000000000000:17
Packit dcde0c
-123:3
Packit dcde0c
215960156869840440586892398248:30
Packit dcde0c
Packit dcde0c
&broot
Packit dcde0c
# sqrt()
Packit dcde0c
+0:2:0
Packit dcde0c
+1:2:1
Packit dcde0c
-1:2:NaN
Packit dcde0c
# -$x ** (1/2) => -$y, but not in broot()
Packit dcde0c
-123:2:NaN
Packit dcde0c
+inf:2:inf
Packit dcde0c
-inf:2:NaN
Packit dcde0c
2:2:1
Packit dcde0c
-2:2:NaN
Packit dcde0c
4:2:2
Packit dcde0c
9:2:3
Packit dcde0c
16:2:4
Packit dcde0c
100:2:10
Packit dcde0c
123:2:11
Packit dcde0c
15241:2:123
Packit dcde0c
144:2:12
Packit dcde0c
12:2:3
Packit dcde0c
# invalid ones
Packit dcde0c
1:NaN:NaN
Packit dcde0c
-1:NaN:NaN
Packit dcde0c
0:NaN:NaN
Packit dcde0c
-inf:NaN:NaN
Packit dcde0c
+inf:NaN:NaN
Packit dcde0c
NaN:0:NaN
Packit dcde0c
NaN:2:NaN
Packit dcde0c
NaN:inf:NaN
Packit dcde0c
NaN:inf:NaN
Packit dcde0c
12:-inf:NaN
Packit dcde0c
12:inf:NaN
Packit dcde0c
+0:0:NaN
Packit dcde0c
+1:0:NaN
Packit dcde0c
-1:0:NaN
Packit dcde0c
-2:0:NaN
Packit dcde0c
-123.45:0:NaN
Packit dcde0c
+inf:0:NaN
Packit dcde0c
12:1:12
Packit dcde0c
-12:1:NaN
Packit dcde0c
8:-1:NaN
Packit dcde0c
-8:-1:NaN
Packit dcde0c
# cubic root
Packit dcde0c
8:3:2
Packit dcde0c
-8:3:NaN
Packit dcde0c
# fourths root
Packit dcde0c
16:4:2
Packit dcde0c
81:4:3
Packit dcde0c
# 2 ** 64
Packit dcde0c
18446744073709551616:4:65536
Packit dcde0c
18446744073709551616:8:256
Packit dcde0c
18446744073709551616:16:16
Packit dcde0c
18446744073709551616:32:4
Packit dcde0c
18446744073709551616:64:2
Packit dcde0c
18446744073709551616:128:1
Packit dcde0c
# 213 ** 15
Packit dcde0c
84274086103068221283760416414557757:15:213
Packit dcde0c
Packit dcde0c
# see t/bigroot.t for more tests
Packit dcde0c
&bsqrt
Packit dcde0c
145:12
Packit dcde0c
144:12
Packit dcde0c
143:11
Packit dcde0c
16:4
Packit dcde0c
170:13
Packit dcde0c
169:13
Packit dcde0c
168:12
Packit dcde0c
4:2
Packit dcde0c
3:1
Packit dcde0c
2:1
Packit dcde0c
9:3
Packit dcde0c
12:3
Packit dcde0c
256:16
Packit dcde0c
100000000:10000
Packit dcde0c
4000000000000:2000000
Packit dcde0c
152399026:12345
Packit dcde0c
152399025:12345
Packit dcde0c
152399024:12344
Packit dcde0c
# 2 ** 64 => 2 ** 32
Packit dcde0c
18446744073709551616:4294967296
Packit dcde0c
84274086103068221283760416414557757:290299993288095377
Packit dcde0c
1:1
Packit dcde0c
0:0
Packit dcde0c
-2:NaN
Packit dcde0c
-123:NaN
Packit dcde0c
Nan:NaN
Packit dcde0c
+inf:inf
Packit dcde0c
-inf:NaN
Packit dcde0c
Packit dcde0c
# see t/biglog.t for more tests
Packit dcde0c
&bexp
Packit dcde0c
NaN:NaN
Packit dcde0c
inf:inf
Packit dcde0c
1:2
Packit dcde0c
2:7
Packit dcde0c
Packit dcde0c
&batan2
Packit dcde0c
NaN:1:10:NaN
Packit dcde0c
NaN:NaN:10:NaN
Packit dcde0c
1:NaN:10:NaN
Packit dcde0c
inf:1:14:1
Packit dcde0c
-inf:1:14:-1
Packit dcde0c
0:-inf:14:3
Packit dcde0c
-1:-inf:14:-3
Packit dcde0c
1:-inf:14:3
Packit dcde0c
0:inf:14:0
Packit dcde0c
inf:-inf:14:2
Packit dcde0c
-inf:-inf:14:-2
Packit dcde0c
# +- 0.78....
Packit dcde0c
inf:+inf:14:0
Packit dcde0c
-inf:+inf:14:0
Packit dcde0c
1:5:13:0
Packit dcde0c
1:5:14:0
Packit dcde0c
0:0:10:0
Packit dcde0c
0:1:14:0
Packit dcde0c
0:2:14:0
Packit dcde0c
1:0:14:1
Packit dcde0c
5:0:14:1
Packit dcde0c
-1:0:11:-1
Packit dcde0c
-2:0:77:-1
Packit dcde0c
2:0:77:1
Packit dcde0c
-1:5:14:0
Packit dcde0c
1:5:14:0
Packit dcde0c
-1:8:14:0
Packit dcde0c
1:8:14:0
Packit dcde0c
-1:1:14:0
Packit dcde0c
Packit dcde0c
&bpi
Packit dcde0c
77:3
Packit dcde0c
+0:3
Packit dcde0c
11:3
Packit dcde0c
Packit dcde0c
# see t/bignok.t for more tests
Packit dcde0c
&bnok
Packit dcde0c
+inf:10:inf
Packit dcde0c
NaN:NaN:NaN
Packit dcde0c
NaN:1:NaN
Packit dcde0c
1:NaN:NaN
Packit dcde0c
1:1:1
Packit dcde0c
# k > n
Packit dcde0c
1:2:0
Packit dcde0c
2:3:0
Packit dcde0c
# k < 0
Packit dcde0c
1:-2:0
Packit dcde0c
# 7 over 3 = 35
Packit dcde0c
7:3:35
Packit dcde0c
7:6:7
Packit dcde0c
100:90:17310309456440
Packit dcde0c
100:95:75287520
Packit dcde0c
2:0:1
Packit dcde0c
7:0:1
Packit dcde0c
2:1:2
Packit dcde0c
Packit dcde0c
&bround
Packit dcde0c
$round_mode("trunc")
Packit dcde0c
0:12:0
Packit dcde0c
NaNbround:12:NaN
Packit dcde0c
+inf:12:inf
Packit dcde0c
-inf:12:-inf
Packit dcde0c
1234:0:1234
Packit dcde0c
1234:2:1200
Packit dcde0c
123456:4:123400
Packit dcde0c
123456:5:123450
Packit dcde0c
123456:6:123456
Packit dcde0c
+10123456789:5:10123000000
Packit dcde0c
-10123456789:5:-10123000000
Packit dcde0c
+10123456789:9:10123456700
Packit dcde0c
-10123456789:9:-10123456700
Packit dcde0c
+101234500:6:101234000
Packit dcde0c
-101234500:6:-101234000
Packit dcde0c
#+101234500:-4:101234000
Packit dcde0c
#-101234500:-4:-101234000
Packit dcde0c
$round_mode("zero")
Packit dcde0c
+20123456789:5:20123000000
Packit dcde0c
-20123456789:5:-20123000000
Packit dcde0c
+20123456789:9:20123456800
Packit dcde0c
-20123456789:9:-20123456800
Packit dcde0c
+201234500:6:201234000
Packit dcde0c
-201234500:6:-201234000
Packit dcde0c
#+201234500:-4:201234000
Packit dcde0c
#-201234500:-4:-201234000
Packit dcde0c
+12345000:4:12340000
Packit dcde0c
-12345000:4:-12340000
Packit dcde0c
$round_mode("+inf")
Packit dcde0c
+30123456789:5:30123000000
Packit dcde0c
-30123456789:5:-30123000000
Packit dcde0c
+30123456789:9:30123456800
Packit dcde0c
-30123456789:9:-30123456800
Packit dcde0c
+301234500:6:301235000
Packit dcde0c
-301234500:6:-301234000
Packit dcde0c
#+301234500:-4:301235000
Packit dcde0c
#-301234500:-4:-301234000
Packit dcde0c
+12345000:4:12350000
Packit dcde0c
-12345000:4:-12340000
Packit dcde0c
$round_mode("-inf")
Packit dcde0c
+40123456789:5:40123000000
Packit dcde0c
-40123456789:5:-40123000000
Packit dcde0c
+40123456789:9:40123456800
Packit dcde0c
-40123456789:9:-40123456800
Packit dcde0c
+401234500:6:401234000
Packit dcde0c
+401234500:6:401234000
Packit dcde0c
#-401234500:-4:-401235000
Packit dcde0c
#-401234500:-4:-401235000
Packit dcde0c
+12345000:4:12340000
Packit dcde0c
-12345000:4:-12350000
Packit dcde0c
$round_mode("odd")
Packit dcde0c
+50123456789:5:50123000000
Packit dcde0c
-50123456789:5:-50123000000
Packit dcde0c
+50123456789:9:50123456800
Packit dcde0c
-50123456789:9:-50123456800
Packit dcde0c
+501234500:6:501235000
Packit dcde0c
-501234500:6:-501235000
Packit dcde0c
#+501234500:-4:501235000
Packit dcde0c
#-501234500:-4:-501235000
Packit dcde0c
+12345000:4:12350000
Packit dcde0c
-12345000:4:-12350000
Packit dcde0c
$round_mode("even")
Packit dcde0c
+60123456789:5:60123000000
Packit dcde0c
-60123456789:5:-60123000000
Packit dcde0c
+60123456789:9:60123456800
Packit dcde0c
-60123456789:9:-60123456800
Packit dcde0c
+601234500:6:601234000
Packit dcde0c
-601234500:6:-601234000
Packit dcde0c
#+601234500:-4:601234000
Packit dcde0c
#-601234500:-4:-601234000
Packit dcde0c
#-601234500:-9:0
Packit dcde0c
#-501234500:-9:0
Packit dcde0c
#-601234500:-8:0
Packit dcde0c
#-501234500:-8:0
Packit dcde0c
+1234567:7:1234567
Packit dcde0c
+1234567:6:1234570
Packit dcde0c
+12345000:4:12340000
Packit dcde0c
-12345000:4:-12340000
Packit dcde0c
$round_mode("common")
Packit dcde0c
+60123456789:5:60123000000
Packit dcde0c
+60123199999:5:60123000000
Packit dcde0c
+60123299999:5:60123000000
Packit dcde0c
+60123399999:5:60123000000
Packit dcde0c
+60123499999:5:60123000000
Packit dcde0c
+60123500000:5:60124000000
Packit dcde0c
+60123600000:5:60124000000
Packit dcde0c
+60123700000:5:60124000000
Packit dcde0c
+60123800000:5:60124000000
Packit dcde0c
+60123900000:5:60124000000
Packit dcde0c
-60123456789:5:-60123000000
Packit dcde0c
-60123199999:5:-60123000000
Packit dcde0c
-60123299999:5:-60123000000
Packit dcde0c
-60123399999:5:-60123000000
Packit dcde0c
-60123499999:5:-60123000000
Packit dcde0c
-60123500000:5:-60124000000
Packit dcde0c
-60123600000:5:-60124000000
Packit dcde0c
-60123700000:5:-60124000000
Packit dcde0c
-60123800000:5:-60124000000
Packit dcde0c
-60123900000:5:-60124000000
Packit dcde0c
Packit dcde0c
&is_zero
Packit dcde0c
0:1
Packit dcde0c
NaNzero:0
Packit dcde0c
+inf:0
Packit dcde0c
-inf:0
Packit dcde0c
123:0
Packit dcde0c
-1:0
Packit dcde0c
1:0
Packit dcde0c
Packit dcde0c
&is_one
Packit dcde0c
0:0
Packit dcde0c
NaNone:0
Packit dcde0c
+inf:0
Packit dcde0c
-inf:0
Packit dcde0c
1:1
Packit dcde0c
2:0
Packit dcde0c
-1:0
Packit dcde0c
-2:0
Packit dcde0c
Packit dcde0c
# floor, ceil, and int are pretty pointless in integer space, but play safe
Packit dcde0c
&bfloor
Packit dcde0c
0:0
Packit dcde0c
NaNfloor:NaN
Packit dcde0c
+inf:inf
Packit dcde0c
-inf:-inf
Packit dcde0c
-1:-1
Packit dcde0c
-2:-2
Packit dcde0c
2:2
Packit dcde0c
3:3
Packit dcde0c
abc:NaN
Packit dcde0c
Packit dcde0c
&bceil
Packit dcde0c
NaNceil:NaN
Packit dcde0c
+inf:inf
Packit dcde0c
-inf:-inf
Packit dcde0c
0:0
Packit dcde0c
-1:-1
Packit dcde0c
-2:-2
Packit dcde0c
2:2
Packit dcde0c
3:3
Packit dcde0c
abc:NaN
Packit dcde0c
Packit dcde0c
&bint
Packit dcde0c
NaN:NaN
Packit dcde0c
+inf:inf
Packit dcde0c
-inf:-inf
Packit dcde0c
0:0
Packit dcde0c
-1:-1
Packit dcde0c
-2:-2
Packit dcde0c
2:2
Packit dcde0c
3:3
Packit dcde0c
Packit dcde0c
&as_hex
Packit dcde0c
128:0x80
Packit dcde0c
-128:-0x80
Packit dcde0c
0:0x0
Packit dcde0c
-0:0x0
Packit dcde0c
1:0x1
Packit dcde0c
0x123456789123456789:0x123456789123456789
Packit dcde0c
+inf:inf
Packit dcde0c
-inf:-inf
Packit dcde0c
NaNas_hex:NaN
Packit dcde0c
Packit dcde0c
&as_bin
Packit dcde0c
128:0b10000000
Packit dcde0c
-128:-0b10000000
Packit dcde0c
0:0b0
Packit dcde0c
-0:0b0
Packit dcde0c
1:0b1
Packit dcde0c
0b1010111101010101010110110110110110101:0b1010111101010101010110110110110110101
Packit dcde0c
0x123456789123456789:0b100100011010001010110011110001001000100100011010001010110011110001001
Packit dcde0c
+inf:inf
Packit dcde0c
-inf:-inf
Packit dcde0c
NaNas_bin:NaN
Packit dcde0c
Packit dcde0c
&as_oct
Packit dcde0c
128:0200
Packit dcde0c
-128:-0200
Packit dcde0c
0:00
Packit dcde0c
-0:00
Packit dcde0c
1:01
Packit dcde0c
0b1010111101010101010110110110110110101:01275252666665
Packit dcde0c
0x123456789123456789:044321263611044321263611
Packit dcde0c
+inf:inf
Packit dcde0c
-inf:-inf
Packit dcde0c
NaNas_oct:NaN
Packit dcde0c
Packit dcde0c
# overloaded functions
Packit dcde0c
&log
Packit dcde0c
-1:NaN
Packit dcde0c
0:-inf
Packit dcde0c
1:0
Packit dcde0c
2:0
Packit dcde0c
3:1
Packit dcde0c
123456789:18
Packit dcde0c
1234567890987654321:41
Packit dcde0c
-inf:inf
Packit dcde0c
inf:inf
Packit dcde0c
NaN:NaN
Packit dcde0c
Packit dcde0c
&exp
Packit dcde0c
Packit dcde0c
&sin
Packit dcde0c
Packit dcde0c
&cos
Packit dcde0c
Packit dcde0c
&atan2
Packit dcde0c
Packit dcde0c
&int
Packit dcde0c
Packit dcde0c
&neg
Packit dcde0c
Packit dcde0c
&abs
Packit dcde0c
Packit dcde0c
&sqrt