#!/usr/bin/pugs
use v6;
use Test;
plan 16;
{
my @a = (4, 5, 3, 2, 5, 1);
my @e = (1 .. 5, 5);
my @s = sort(@a);
is(@s, @e, 'array of numbers was sorted');
}
{
my @a = (4, 5, 3, 2, 5, 1);
my @e = (1 .. 5, 5);
my @s = sort @a;
is(@s, @e, 'array of numbers was sorted (w/out parans)');
}
{
my @a = (4, 5, 3, 2, 5, 1);
my @e = (1 .. 5, 5);
my @s = @a.sort;
is(@s, @e, 'array of numbers was sorted (using invocant form)');
}
{
my @a = (2, 45, 6, 1, 3);
my @e = (1, 2, 3, 6, 45);
my @s = sort { $^a <=> $^b } @a;
is(@s, @e, '... with explicit spaceship');
}
{
my @a = (2, 45, 6, 1, 3);
my @e = (1, 2, 3, 6, 45);
my @s = @a.sort:{ $^a <=> $^b };
is(@s, @e, '... with explicit spaceship (using invocant form)');
}
{
my @a = (2, 45, 6, 1, 3);
my @e = (45, 6, 3, 2, 1);
my @s = sort { $^b <=> $^a } @a;
is(@s, @e, '... reverse sort with explicit spaceship');
}
{
my @a = (2, 45, 6, 1, 3);
my @e = (45, 6, 3, 2, 1);
my @s = @a.sort:{ $^b <=> $^a };
is(@s, @e, '... reverse sort with explicit spaceship (using invocant form)');
}
{
my @a = <foo bar gorch baz>;
my @e = <bar baz foo gorch>;
my @s = sort(@a);
is(@s, @e, 'array of strings was sorted');
}
{
my @a = <foo bar gorch baz>;
my @e = <bar baz foo gorch>;
my @s = sort @a;
is(@s, @e, 'array of strings was sorted (w/out parans)');
}
{
my @a = <foo bar gorch baz>;
my @e = <bar baz foo gorch>;
my @s = @a.sort;
is(@s, @e, 'array of strings was sorted (using invocant form)');
}
{
my @a = <daa boo gaa aaa>;
my @e = <aaa boo daa gaa>;
my @s = sort { $^a cmp $^b } @a;
is(@s, @e, '... with explicit cmp');
}
{
my @a = <daa boo gaa aaa>;
my @e = <aaa boo daa gaa>;
my @s = @a.sort:{ $^a cmp $^b };
is(@s, @e, '... with explicit cmp (using invocant form)');
}
{
my %a = (4 => 'a', 1 => 'b', 2 => 'c', 5 => 'd', 3 => 'e');
my @e = (4, 1, 2, 5, 3);
my @s = sort { %a{$^a} cmp %a{$^b} } %a.keys;
is(@s, @e, '... sort keys by string value');
}
{
my %a = (4 => 'a', 1 => 'b', 2 => 'c', 5 => 'd', 3 => 'e');
my @e = (4, 1, 2, 5, 3);
my @s = %a.keys.sort:{ %a{$^a} cmp %a{$^b} };
is(@s, @e, '... sort keys by string value (using invocant form)');
}
{
my %a = ('a' => 4, 'b' => 1, 'c' => 2, 'd' => 5, 'e' => 3);
my @e = <b c e a d>;
my @s = sort { %a{$^a} <=> %a{$^b} } %a.keys;
is(@s, @e, '... sort keys by numeric value');
}
{
my %a = ('a' => 4, 'b' => 1, 'c' => 2, 'd' => 5, 'e' => 3);
my @e = <b c e a d>;
my @s = %a.keys.sort:{ %a{$^a} <=> %a{$^b} };
is(@s, @e, '... sort keys by numeric value (using invocant form)');
}