use v6-alpha; use Test; plan 24; =head1 DESCRIPTION This test tests the C and C builtins. Reference: L<"http://groups.google.com/groups?selm=420DB295.3000902%40conway.org"> =cut my @array = <5 -3 7 0 1 -9>; # Tests for C: is @array.min, -9, "basic method form of min works"; is min(@array), -9, "basic subroutine form of min works"; is @array.min:{ $^a <=> $^b }, -9, "method form of min with identity comparison block works"; isnt @array.min:{ $^a <=> $^b }, 7, "bug -- method form of min with identity comparison block returning max"; is min({ $^a <=> $^b }, @array), -9, "subroutine form of min with identity comparison block works"; isnt min({ $^a <=> $^b }, @array), 7, "bug -- subroutine form of min with identity comparison block returning max"; is @array.min:{ abs $^a <=> abs $^b }, 0, "method form of min taking a comparision block works"; is min({ abs $^a <=> abs $^b }, @array), 0, "subroutine form of min taking a comparision block works"; # Tests for C: is @array.max, 7, "basic method form of max works"; is max(@array), 7, "basic subroutine form of max works"; is @array.max:{ $^a <=> $^b }, 7, "method form of max with identity comparison block works"; isnt @array.max:{ $^a <=> $^b }, -9, "bug -- method form of max with identity comparison block returning min"; is max({ $^a <=> $^b }, @array), 7, "subroutine form of max with identity comparison block works"; isnt max({ $^a <=> $^b }, @array), -9, "bug -- subroutine form of max with identity comparison block returning min"; is @array.max:{ abs $^a <=> abs $^b }, -9, "method form of max taking a comparision block works"; is max({ abs $^a <=> abs $^b }, @array), -9, "subroutine form of max taking a comparision block works"; # Error cases: dies_ok { 42.max }, ".max should not work on scalars", :todo; dies_ok { 42.min }, ".min should not work on scalars", :todo; is (42,).max, 42, ".max should work on one-elem arrays"; is (42,).max, 42, ".max should work on one-elem arrays"; # Tests with literals: is (1,2,3).max, 3, "method form of max with literals works"; is (1,2,3).min, 1, "method form of min with literals works"; is max(1,2,3), 3, "subroutine form of max with literals works"; is min(1,2,3), 1, "subroutine form of min with literals works";