#!/usr/bin/pugs
use v6;
use Test;
# Basic &leave tests
# L<S06/"The leave function">
plan 5;
flunk "leave() not implemented in Pugs's interpreter core yet", :todo<feature>;
skip_rest; exit;
{
my $bare = { leave 42; 23 };
is $bare(), 42, "basic leave() works";
}
{
my $sub = sub () {
my $bare = { leave 42; 23 };
my $ret = $bare();
return 1000 + $ret;
};
is $sub(), 1042, "leave() works and leaves only the innermost block";
}
{
my $sub = sub () {
leave &?ROUTINE, 42;
return 23;
};
is $sub(), 42, "leave() works with &?ROUTINE as parameter";
}
{
my $outer = sub () {
my $inner = sub () {
my $most_inner = sub () {
leave $outer, 42;
return 23;
};
$most_inner();
return 22;
};
$inner();
return 21;
}
is $outer(), 42, "nested leave() works with a subref as parameter";
}
{
my $sub = sub () {
my $bare = sub () {
leave Block, 42;
return 23;
};
my $ret = $bare();
return 1000 + $ret;
};
is $sub(), 1042, "leave() works with a Class (Block) as parameter";
}
{
my $sub = sub () {
my $bare = sub () {
leave Sub, 42;
return 23;
};
my $ret = $bare();
return 1000 + $ret;
};
is $sub(), 42, "leave() works with a Class (Sub) as parameter";
}