diff --git a/lib/Math/FatRat.pm b/lib/Math/FatRat.pm index 8bd65fc..228db81 100644 --- a/lib/Math/FatRat.pm +++ b/lib/Math/FatRat.pm @@ -64,6 +64,15 @@ class Math::FatRat does Real { Math::FatRat.new($a) FR+ Math::FatRat.new($b); } + multi sub infix:(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:($a, $b) is export(:DEFAULT) { + Math::FatRat.new($a) FR- Math::FatRat.new($b); + } + multi sub infix:(Math::FatRat $a, Math::FatRat $b) { Math::FatRat.new($a.numerator * $b.numerator, $a.denominator * $b.denominator); } @@ -79,30 +88,14 @@ class Math::FatRat does Real { multi sub infix:($a, $b) is export(:DEFAULT) { Math::FatRat.new($a) FR/ Math::FatRat.new($b); } + + multi sub infix:(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 diff --git a/t/02-arith.t b/t/02-arith.t index a773be8..9199d71 100644 --- a/t/02-arith.t +++ b/t/02-arith.t @@ -23,6 +23,12 @@ plan *; is ~$a.denominator, 1, "and it's 5"; } +{ + my $a = 4 FR- 2L; + isa_ok $a, Math::FatRat, "infix: creates a FatRat"; + is ~$a.numerator, ~($a.denominator * 2), "and it's 2"; +} + { my $a = 4 FR* 2L; isa_ok $a, Math::FatRat, "infix: creates a FatRat"; @@ -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: creates a FatRat"; + is $a.perl, Math::FatRat.new(4/9).perl, "and it's 4/9"; +} + + + done; \ No newline at end of file