Skip to content

Commit

Permalink
Move the defaulting to Inf for min, max, and minmax to the end of the…
Browse files Browse the repository at this point in the history
… algorithm

Still not sure that the magicalness of Inf make sense,  but this is good enough to workaround the
example code in RT#103178
  • Loading branch information
KrisShannon committed Dec 27, 2011
1 parent b4d862a commit 57be41f
Showing 1 changed file with 14 additions and 14 deletions.
28 changes: 14 additions & 14 deletions src/core/Any.pm
Original file line number Diff line number Diff line change
Expand Up @@ -54,56 +54,56 @@ my class Any {

method min($by = &infix:<cmp>) {
my $cmp = $by.arity == 2 ?? $by !! { $by($^a) cmp $by($^b) }
my $min = +$Inf;
my $min;
for self {
$min = $_ if .defined && $cmp($_, $min) < 0;
$min = $_ if .defined and !$min.defined || $cmp($_, $min) < 0;
}
$min;
$min // +$Inf;
}

method max($by = &infix:<cmp>) {
my $cmp = $by.arity == 2 ?? $by !! { $by($^a) cmp $by($^b) }
my $max = -$Inf;
my $max;
for self {
$max = $_ if .defined && $cmp($_, $max) > 0;
$max = $_ if .defined and !$max.defined || $cmp($_, $max) > 0;
}
$max;
$max // -$Inf;
}


method minmax($by = &infix:<cmp>) {
my $cmp = $by.arity == 2 ?? $by !! { $by($^a) cmp $by($^b) };

my $min = +$Inf;
my $max = -$Inf;
my $min;
my $max;
my $excludes_min = Bool::False;
my $excludes_max = Bool::False;

for @.list {
.defined or next;

if .isa(Range) {
if $cmp($_.min, $min) < 0 {
if !$min.defined || $cmp($_.min, $min) < 0 {
$min = $_;
$excludes_min = $_.excludes_min;
}
if $cmp($_.max, $max) > 0 {
if !$max.defined || $cmp($_.max, $max) > 0 {
$max = $_;
$excludes_max = $_.excludes_max;
}
} else {
if $cmp($_, $min) < 0 {
if !$min.defined || $cmp($_, $min) < 0 {
$min = $_;
$excludes_min = Bool::False;
}
if $cmp($_, $max) > 0 {
if !$max.defined || $cmp($_, $max) > 0 {
$max = $_;
$excludes_max = Bool::False;
}
}
}
Range.new($min,
$max,
Range.new($min // +$Inf,
$max // -$Inf,
:excludes_min($excludes_min),
:excludes_max($excludes_max));
}
Expand Down

0 comments on commit 57be41f

Please sign in to comment.