Skip to content

Commit

Permalink
As long as I'm at it, add FR- and FR** operators.
Browse files Browse the repository at this point in the history
  • Loading branch information
colomon committed May 3, 2011
1 parent 1b96309 commit 2cb06d8
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 20 deletions.
33 changes: 13 additions & 20 deletions lib/Math/FatRat.pm
Expand Up @@ -64,6 +64,15 @@ class Math::FatRat does Real {
Math::FatRat.new($a) FR+ Math::FatRat.new($b);
}

multi sub infix:<FR->(Math::FatRat $a, Math::FatRat $b) is export(:DEFAULT) {
Math::FatRat.new($a.numerator * $b.denominator - $b.numerator * $a.denominator,
$a.denominator * $b.denominator);
}

multi sub infix:<FR->($a, $b) is export(:DEFAULT) {
Math::FatRat.new($a) FR- Math::FatRat.new($b);
}

multi sub infix:<FR*>(Math::FatRat $a, Math::FatRat $b) {
Math::FatRat.new($a.numerator * $b.numerator, $a.denominator * $b.denominator);
}
Expand All @@ -79,30 +88,14 @@ class Math::FatRat does Real {
multi sub infix:<FR/>($a, $b) is export(:DEFAULT) {
Math::FatRat.new($a) FR/ Math::FatRat.new($b);
}

multi sub infix:<FR**>(Math::FatRat $a, $b) is export(:DEFAULT) {
Math::FatRat.new($a.numerator ** $b, $a.denominator ** $b);
}
}

# multi sub prefix:<->(Math::FatRat $a) {
# Math::FatRat.new(-$a.numerator, $a.denominator);
# }
#
# multi sub infix:<->(Math::FatRat $a, Math::FatRat $b) {
# my $gcd = pir::gcd__iii($a.denominator, $b.denominator);
# ($a.numerator * ($b.denominator div $gcd) - $b.numerator * ($a.denominator div $gcd))
# / (($a.denominator div $gcd) * $b.denominator);
# }
#
# multi sub infix:<->(Math::FatRat $a, Int $b) {
# ($a.numerator - $b * $a.denominator) / $a.denominator;
# }
#
# multi sub infix:<->(Int $a, Math::FatRat $b) {
# ($a * $b.denominator - $b.numerator) / $b.denominator;
# }
#
# multi sub infix:<**>(Math::FatRat $a, Int $b) {
# my $num = $a.numerator ** $b;
# my $den = $a.denominator ** $b;
# $num ~~ Int && $den ~~ Int ?? $num / $den !! $a.Bridge ** $b;
# }

# vim: ft=perl6 sw=4 ts=4 expandtab
14 changes: 14 additions & 0 deletions t/02-arith.t
Expand Up @@ -23,6 +23,12 @@ plan *;
is ~$a.denominator, 1, "and it's 5";
}

{
my $a = 4 FR- 2L;
isa_ok $a, Math::FatRat, "infix:<FR-> creates a FatRat";
is ~$a.numerator, ~($a.denominator * 2), "and it's 2";
}

{
my $a = 4 FR* 2L;
isa_ok $a, Math::FatRat, "infix:<FR*> creates a FatRat";
Expand All @@ -35,6 +41,14 @@ plan *;
is ~$a.numerator, ~($a.denominator * 2), "and it's 2";
}

{
my $a = Math::FatRat.new(2/3) FR** 2;
isa_ok $a, Math::FatRat, "infix:<FR**> creates a FatRat";
is $a.perl, Math::FatRat.new(4/9).perl, "and it's 4/9";
}





done;

0 comments on commit 2cb06d8

Please sign in to comment.