1#!./perl 2 3BEGIN { 4 chdir 't' if -d 't'; 5 @INC = '../lib'; 6} 7 8use Config; 9 10print "1..45\n"; 11 12print join(':',1..5) eq '1:2:3:4:5' ? "ok 1\n" : "not ok 1\n"; 13 14@foo = (1,2,3,4,5,6,7,8,9); 15@foo[2..4] = ('c','d','e'); 16 17print join(':',@foo[$foo[0]..5]) eq '2:c:d:e:6' ? "ok 2\n" : "not ok 2\n"; 18 19@bar[2..4] = ('c','d','e'); 20print join(':',@bar[1..5]) eq ':c:d:e:' ? "ok 3\n" : "not ok 3\n"; 21 22($a,@bcd[0..2],$e) = ('a','b','c','d','e'); 23print join(':',$a,@bcd[0..2],$e) eq 'a:b:c:d:e' ? "ok 4\n" : "not ok 4\n"; 24 25$x = 0; 26for (1..100) { 27 $x += $_; 28} 29print $x == 5050 ? "ok 5\n" : "not ok 5 $x\n"; 30 31$x = 0; 32for ((100,2..99,1)) { 33 $x += $_; 34} 35print $x == 5050 ? "ok 6\n" : "not ok 6 $x\n"; 36 37$x = join('','a'..'z'); 38print $x eq 'abcdefghijklmnopqrstuvwxyz' ? "ok 7\n" : "not ok 7 $x\n"; 39 40@x = 'A'..'ZZ'; 41print @x == 27 * 26 ? "ok 8\n" : "not ok 8\n"; 42 43@x = '09' .. '08'; # should produce '09', '10',... '99' (strange but true) 44print "not " unless join(",", @x) eq 45 join(",", map {sprintf "%02d",$_} 9..99); 46print "ok 9\n"; 47 48# same test with foreach (which is a separate implementation) 49@y = (); 50foreach ('09'..'08') { 51 push(@y, $_); 52} 53print "not " unless join(",", @y) eq join(",", @x); 54print "ok 10\n"; 55 56# check bounds 57if ($Config{ivsize} == 8) { 58 @a = eval "0x7ffffffffffffffe..0x7fffffffffffffff"; 59 $a = "9223372036854775806 9223372036854775807"; 60 @b = eval "-0x7fffffffffffffff..-0x7ffffffffffffffe"; 61 $b = "-9223372036854775807 -9223372036854775806"; 62} 63else { 64 @a = eval "0x7ffffffe..0x7fffffff"; 65 $a = "2147483646 2147483647"; 66 @b = eval "-0x7fffffff..-0x7ffffffe"; 67 $b = "-2147483647 -2147483646"; 68} 69 70print "not " unless "@a" eq $a; 71print "ok 11\n"; 72 73print "not " unless "@b" eq $b; 74print "ok 12\n"; 75 76# check magic 77{ 78 my $bad = 0; 79 local $SIG{'__WARN__'} = sub { $bad = 1 }; 80 my $x = 'a-e'; 81 $x =~ s/(\w)-(\w)/join ':', $1 .. $2/e; 82 $bad = 1 unless $x eq 'a:b:c:d:e'; 83 print $bad ? "not ok 13\n" : "ok 13\n"; 84} 85 86# Should use magical autoinc only when both are strings 87print "not " unless 0 == (() = "0"..-1); 88print "ok 14\n"; 89 90for my $x ("0"..-1) { 91 print "not "; 92} 93print "ok 15\n"; 94 95# [#18165] Should allow "-4".."0", broken by #4730. (AMS 20021031) 96print join(":","-4".."0") eq "-4:-3:-2:-1:0" ? "ok 16\n" : "not ok 16\n"; 97print join(":","-4".."-0") eq "-4:-3:-2:-1:0" ? "ok 17\n" : "not ok 17\n"; 98print join(":","-4\n".."0\n") eq "-4:-3:-2:-1:0" ? "ok 18\n" : "not ok 18\n"; 99print join(":","-4\n".."-0\n") eq "-4:-3:-2:-1:0" ? "ok 19\n" : "not ok 19\n"; 100 101# undef should be treated as 0 for numerical range 102print join(":",undef..2) eq '0:1:2' ? "ok 20\n" : "not ok 20\n"; 103print join(":",-2..undef) eq '-2:-1:0' ? "ok 21\n" : "not ok 21\n"; 104print join(":",undef..'2') eq '0:1:2' ? "ok 22\n" : "not ok 22\n"; 105print join(":",'-2'..undef) eq '-2:-1:0' ? "ok 23\n" : "not ok 23\n"; 106 107# undef should be treated as "" for magical range 108print join(":", map "[$_]", "".."B") eq '[]' ? "ok 24\n" : "not ok 24\n"; 109print join(":", map "[$_]", undef.."B") eq '[]' ? "ok 25\n" : "not ok 25\n"; 110print join(":", map "[$_]", "B".."") eq '' ? "ok 26\n" : "not ok 26\n"; 111print join(":", map "[$_]", "B"..undef) eq '' ? "ok 27\n" : "not ok 27\n"; 112 113# undef..undef used to segfault 114print join(":", map "[$_]", undef..undef) eq '[]' ? "ok 28\n" : "not ok 28\n"; 115 116# also test undef in foreach loops 117@foo=(); push @foo, $_ for undef..2; 118print join(":", @foo) eq '0:1:2' ? "ok 29\n" : "not ok 29\n"; 119 120@foo=(); push @foo, $_ for -2..undef; 121print join(":", @foo) eq '-2:-1:0' ? "ok 30\n" : "not ok 30\n"; 122 123@foo=(); push @foo, $_ for undef..'2'; 124print join(":", @foo) eq '0:1:2' ? "ok 31\n" : "not ok 31\n"; 125 126@foo=(); push @foo, $_ for '-2'..undef; 127print join(":", @foo) eq '-2:-1:0' ? "ok 32\n" : "not ok 32\n"; 128 129@foo=(); push @foo, $_ for undef.."B"; 130print join(":", map "[$_]", @foo) eq '[]' ? "ok 33\n" : "not ok 33\n"; 131 132@foo=(); push @foo, $_ for "".."B"; 133print join(":", map "[$_]", @foo) eq '[]' ? "ok 34\n" : "not ok 34\n"; 134 135@foo=(); push @foo, $_ for "B"..undef; 136print join(":", map "[$_]", @foo) eq '' ? "ok 35\n" : "not ok 35\n"; 137 138@foo=(); push @foo, $_ for "B"..""; 139print join(":", map "[$_]", @foo) eq '' ? "ok 36\n" : "not ok 36\n"; 140 141@foo=(); push @foo, $_ for undef..undef; 142print join(":", map "[$_]", @foo) eq '[]' ? "ok 37\n" : "not ok 37\n"; 143 144# again with magic 145{ 146 my @a = (1..3); 147 @foo=(); push @foo, $_ for undef..$#a; 148 print join(":", @foo) eq '0:1:2' ? "ok 38\n" : "not ok 38\n"; 149} 150{ 151 my @a = (); 152 @foo=(); push @foo, $_ for $#a..undef; 153 print join(":", @foo) eq '-1:0' ? "ok 39\n" : "not ok 39\n"; 154} 155{ 156 local $1; 157 "2" =~ /(.+)/; 158 @foo=(); push @foo, $_ for undef..$1; 159 print join(":", @foo) eq '0:1:2' ? "ok 40\n" : "not ok 40\n"; 160} 161{ 162 local $1; 163 "-2" =~ /(.+)/; 164 @foo=(); push @foo, $_ for $1..undef; 165 print join(":", @foo) eq '-2:-1:0' ? "ok 41\n" : "not ok 41\n"; 166} 167{ 168 local $1; 169 "B" =~ /(.+)/; 170 @foo=(); push @foo, $_ for undef..$1; 171 print join(":", map "[$_]", @foo) eq '[]' ? "ok 42\n" : "not ok 42\n"; 172} 173{ 174 local $1; 175 "B" =~ /(.+)/; 176 @foo=(); push @foo, $_ for ""..$1; 177 print join(":", map "[$_]", @foo) eq '[]' ? "ok 43\n" : "not ok 43\n"; 178} 179{ 180 local $1; 181 "B" =~ /(.+)/; 182 @foo=(); push @foo, $_ for $1..undef; 183 print join(":", map "[$_]", @foo) eq '' ? "ok 44\n" : "not ok 44\n"; 184} 185{ 186 local $1; 187 "B" =~ /(.+)/; 188 @foo=(); push @foo, $_ for $1..""; 189 print join(":", map "[$_]", @foo) eq '' ? "ok 45\n" : "not ok 45\n"; 190} 191