Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

78 lines (56 sloc) 1.803 kb
use v6;
use Test;
#Ternary operator ?? !!
plan 17;
#L<S03/Changes to Perl 5 operators/"The ? : conditional operator becomes ?? !!">
my $str1 = "aaa";
my $str2 = "aaa";
my $str3 = "bbb";
{
my $foo = "";
$str1 eq $str2 ?? ($foo = 1) !! ($foo = 2);
is($foo, 1, "?? !!");
$str1 eq $str3 ?? ($foo = 3) !! ($foo = 4);
is($foo, 4, "?? !!");
}
is(($str2 eq $str1 ?? 8 * 8 !! 9 * 9), 64, "?? !! in parenthesis");
#?pugs skip 'div'
is(($str2 eq $str3 ?? 8 + 8 !! 9 div 9), 1, "?? !! in parenthesis");
is(1 ?? 2 ?? 3 !! 4 !! 5 ?? 6 !! 7, 3, "nested ?? !!");
is(1 ?? 0 ?? 3 !! 4 !! 5 ?? 6 !! 7, 4, "nested ?? !!");
is(0 ?? 2 ?? 3 !! 4 !! 5 ?? 6 !! 7, 6, "nested ?? !!");
is(0 ?? 2 ?? 3 !! 4 !! 0 ?? 6 !! 7, 7, "nested ?? !!");
{
my @a = (1 ?? 2 !! 3, 4 ?? 5 !! 6);
is(@a, [2, 5], "?? !! in array");
}
is((0 and 1 ?? 2 !! 3), 0, "operator priority");
is((4 or 5 ?? 6 !! 7), 4, "operator priority");
{
my $foo = 8;
$foo = 9 ?? 10 !! 11;
is($foo, 10, "operator priority");
$foo = 0 ?? 12 !! 13;
is($foo, 13, "operator priority");
}
#?pugs skip "parse failure"
{
# This parses incorrectly in pugs because it's
# parsed as Bool::True(!! Bool::False).
my $foo = 1 ?? Bool::True !! Bool::False;
is($foo, Bool::True, "a statement with both ??!! and :: in it did compile") ;
}
{
# Defining an N! postfix (for factorial) causes a misparse on ternary op
proto postfix:<!>($n) {
return 1 if $n < 2;
return $n * ($n-1)!
}
my $foo = eval q[ 1 ?? 'yay' !! 'nay' ];
#?pugs todo 'bug'
is($foo, "yay", "defining a postfix<!> doesn't screw up ternary op");
}
eval_dies_ok q[ 1 ?? 2,3 !! 4,5 ], 'Ternary error (RT 66840)';
eval_dies_ok q[ 71704 !! 'bust' ], 'Ternary error (RT 71704)';
done;
# vim: ft=perl6
Jump to Line
Something went wrong with that request. Please try again.