Skip to content

Commit

Permalink
Port divmod from p5 Math::Polynomial.
Browse files Browse the repository at this point in the history
  • Loading branch information
colomon committed Aug 30, 2012
1 parent fc9ac9c commit 4aeb742
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 50 deletions.
2 changes: 2 additions & 0 deletions CREDITS
Expand Up @@ -6,3 +6,5 @@ colomon@gmail.com


Bruce Gray (Refactoring and editing) Bruce Gray (Refactoring and editing)
bruce.gray@acm.org bruce.gray@acm.org

Martin Becker (Code from Perl 5 Math::Polynomial)
47 changes: 23 additions & 24 deletions lib/Math/Polynomial.pm
Expand Up @@ -117,28 +117,27 @@ class Math::Polynomial {
!! ($a xx $b).reduce(* * *); !! ($a xx $b).reduce(* * *);
} }


# sub _divmod($this, $that) { method divmod($that) {
# my @den = $that.coefficients; my @den = $that.coefficients;
# @den or croak 'division by zero polynomial'; @den or fail 'division by zero polynomial';
# my $hd = pop @den; my $hd = @den.pop;
# if ($that->is_monic) { if $that.is-monic {
# undef $hd; $hd = Any;
# } }
# my @rem = $this->coeff; my @rem = self.coefficients;
# my @quot = (); my @quot;
# my $i = $#rem - @den; my $i = (@rem - 1) - @den;
# while (0 <= $i) { while (0 <= $i) {
# my $q = pop(@rem); my $q = @rem.pop;
# if (defined $hd) { if $hd.defined {
# $q /= $hd; $q /= $hd;
# } }
# $quot[$i] = $q; @quot[$i] = $q;
# my $j = $i--; my $j = $i--;
# foreach my $d (@den) { for @den -> $d {
# $rem[$j++] -= $q * $d; @rem[$j++] -= $q * $d;
# } }
# } }
# return (\@quot, \@rem); return Math::Polynomial.new(@quot), Math::Polynomial.new(@rem);
# } }

} }
52 changes: 26 additions & 26 deletions t/03_expressions.t
Expand Up @@ -192,36 +192,36 @@ ok(has_coeff($qq)); # 0 * p
# $qq = eval { $zp->mmod($zp) }; # $qq = eval { $zp->mmod($zp) };
# ok(!defined $qq); # not defined 0 mmod 0 # ok(!defined $qq); # not defined 0 mmod 0
# ok($@ =~ /division by zero polynomial/); # ok($@ =~ /division by zero polynomial/);
#
# my $rr; my $rr;
# ($qq, $rr) = $p->divmod($q); ($qq, $rr) = $p.divmod($q);
# ok(has_coeff($qq, 5)); # p / q ok(has_coeff($qq, 5)); # p / q
# ok(has_coeff($rr, 1)); # p % q ok(has_coeff($rr, 1)); # p % q
# ($qq, $rr) = $p->divmod($r); ($qq, $rr) = $p.divmod($r);
# ok(has_coeff($qq, 5/16, 5/8)); # p / r ok(has_coeff($qq, 5/16, 5/8)); # p / r
# ok(has_coeff($rr, 1/16)); # p % r ok(has_coeff($rr, 1/16)); # p % r
# ($qq, $rr) = $p->divmod($mr); ($qq, $rr) = $p.divmod($mr);
# ok(has_coeff($qq, 5/8, 5/4)); # p / mr ok(has_coeff($qq, 5/8, 5/4)); # p / mr
# ok(has_coeff($rr, 1/16)); # p % mr ok(has_coeff($rr, 1/16)); # p % mr
# ($qq, $rr) = $p->divmod($c); ($qq, $rr) = $p.divmod($c);
# ok(has_coeff($qq, 0.5, 0, -2.5)); # p / c ok(has_coeff($qq, 0.5, 0, -2.5)); # p / c
# ok(has_coeff($rr)); # p % c ok(has_coeff($rr)); # p % c
# ($qq, $rr) = eval { $p->divmod($zp) }; # ($qq, $rr) = eval { $p->divmod($zp) };
# ok(!defined $qq); # not defined p / 0 # ok(!defined $qq); # not defined p / 0
# ok(!defined $rr); # not defined p % 0 # ok(!defined $rr); # not defined p % 0
# ok($@ =~ /division by zero polynomial/); # ok($@ =~ /division by zero polynomial/);
# ($qq, $rr) = $r->divmod($p); ($qq, $rr) = $r.divmod($p);
# ok(has_coeff($qq)); # r / p ok(has_coeff($qq)); # r / p
# ok(has_coeff($rr, -1, 2)); # r % p ok(has_coeff($rr, -1, 2)); # r % p
# ($qq, $rr) = $r->divmod($s); ($qq, $rr) = $r.divmod($s);
# ok(has_coeff($qq, 4)); # r / s ok(has_coeff($qq, 4)); # r / s
# ok(has_coeff($rr, -3)); # r % s ok(has_coeff($rr, -3)); # r % s
# ($qq, $rr) = $c->divmod($p); ($qq, $rr) = $c.divmod($p);
# ok(has_coeff($qq)); # c / p ok(has_coeff($qq)); # c / p
# ok(has_coeff($rr, -0.5)); # c % p ok(has_coeff($rr, -0.5)); # c % p
# ($qq, $rr) = $zp->divmod($p); ($qq, $rr) = $zp.divmod($p);
# ok(has_coeff($qq)); # zp / p ok(has_coeff($qq)); # zp / p
# ok(has_coeff($rr)); # zp % p ok(has_coeff($rr)); # zp % p
# ($qq, $rr) = eval { $zp->divmod($zp) }; # ($qq, $rr) = eval { $zp->divmod($zp) };
# ok(!defined $qq); # not defined 0 / 0 # ok(!defined $qq); # not defined 0 / 0
# ok(!defined $rr); # not defined 0 % 0 # ok(!defined $rr); # not defined 0 % 0
Expand Down

0 comments on commit 4aeb742

Please sign in to comment.