+++ /dev/null
-#!perl -T
-
-use strict;
-use warnings;
-
-use Test::More tests => 11 + 6 * 3;
-
-our $counter;
-
-sub Int::TYPEDSCALAR { ++$counter }
-
-{
- my $desc = 'peephole optimization of conditionals';
-
- local $counter;
- local $@;
- my $code = eval <<' TESTCASE';
- use Lexical::Types;
- sub {
- if ($_[0]) {
- my Int $z;
- return 1;
- } elsif ($_[1] || $_[2]) {
- my Int $z;
- return 2;
- } elsif ($_[3] && $_[4]) {
- my Int $z;
- return 3;
- } elsif ($_[5] ? $_[6] : 0) {
- my Int $z;
- return 4;
- } else {
- my Int $z;
- return 5;
- }
- return 0;
- }
- TESTCASE
- is $@, '', "$desc compiled fine";
-
- my $ret = $code->(1);
- is $counter, 1, "$desc : first branch was properly compiled";
- is $ret, 1, "$desc : first branch returned 1";
-
- $ret = $code->(0, 1);
- is $counter, 2, "$desc : second branch was properly compiled";
- is $ret, 2, "$desc : second branch returned 2";
-
- $ret = $code->(0, 0, 0, 1, 1);
- is $counter, 3, "$desc : third branch was properly compiled";
- is $ret, 3, "$desc : third branch returned 3";
-
- $ret = $code->(0, 0, 0, 0, 0, 1, 1);
- is $counter, 4, "$desc : fourth branch was properly compiled";
- is $ret, 4, "$desc : fourth branch returned 4";
-
- $ret = $code->();
- is $counter, 5, "$desc : fifth branch was properly compiled";
- is $ret, 5, "$desc : fifth branch returned 5";
-}
-
-{
- my $desc = 'peephole optimization of C-style loops';
-
- local $counter;
-
- local $@;
- my $code = eval <<' TESTCASE';
- use Lexical::Types;
- sub {
- my $ret = 0;
- for (
- my Int $i = 0
- ;
- do { my Int $x; $i < 4 }
- ;
- do { my Int $y; ++$i }
- ) {
- my Int $z;
- $ret += $i;
- }
- return $ret;
- }
- TESTCASE
- is $@, '', "$desc compiled fine";
-
- my $ret = $code->();
- is $counter, 1 + 5 + 4 + 4, "$desc was properly compiled";
- is $ret, 6, "$desc returned 0+1+2+3";
-}
-
-{
- my $desc = 'peephole optimization of range loops';
-
- local $counter;
- local $@;
- my $code = eval <<' TESTCASE';
- use Lexical::Types;
- sub {
- my $ret = 0;
- for ((do { my Int $z; 0 }) .. (do { my Int $z; 3 })) {
- my Int $z;
- $ret += $_;
- }
- return $ret;
- }
- TESTCASE
- is $@, '', "$desc compiled fine";
-
- my $ret = $code->();
- is $counter, 2 + 4, "$desc was properly compiled";
- is $ret, 6, "$desc returned 0+1+2+3";
-}
-
-{
- my $desc = 'peephole optimization of empty loops (RT #66164)';
-
- local $counter;
- local $@;
- my $code = eval <<' TESTCASE';
- use Lexical::Types;
- sub {
- my $ret = 0;
- for (;;) {
- my Int $z;
- ++$ret;
- return $ret;
- }
- return $ret;
- }
- TESTCASE
- is $@, '', "$desc compiled fine";
-
- my $ret = $code->();
- is $counter, 1, "$desc was properly compiled";
- is $ret, 1, "$desc returned 1";
-}
-
-{
- my $desc = 'peephole optimization of map';
-
- local $counter;
- local $@;
- my $code = eval <<' TESTCASE';
- use Lexical::Types;
- sub {
- join ':', map {
- my Int $z;
- "x${_}y"
- } @_
- }
- TESTCASE
- is $@, '', "$desc compiled fine";
-
- my $ret = $code->(1, 2);
- is $counter, 2, "$desc was properly compiled";
- is $ret, 'x1y:x2y', "$desc returned the right value";
-}
-
-{
- my $desc = 'peephole optimization of grep';
-
- local $counter;
- local $@;
- my $code = eval <<' TESTCASE';
- use Lexical::Types;
- sub {
- join ':', grep {
- my Int $z;
- $_ <= 3
- } @_
- }
- TESTCASE
- is $@, '', "$desc compiled fine";
-
- my $ret = $code->(1 .. 5);
- is $counter, 5, "$desc was properly compiled";
- is $ret, '1:2:3', "$desc returned the right value";
-}
-
-{
- my $desc = 'peephole optimization of substitutions';
-
- local $counter;
- local $@;
- my $code = eval <<' TESTCASE';
- use Lexical::Types;
- sub {
- my $str = $_[0];
- $str =~ s{
- ([0-9])
- }{
- my Int $z;
- 9 - $1;
- }xge;
- $str;
- }
- TESTCASE
- is $@, '', "$desc compiled fine";
-
- my $ret = $code->('0123456789');
- is $counter, 10, "$desc was properly compiled";
- is $ret, '9876543210', "$desc returned the right value";
-}