1*b8851fccSafresh1#!perl 2*b8851fccSafresh1BEGIN { 3*b8851fccSafresh1 chdir 't' if -d 't'; 4*b8851fccSafresh1 @INC = "../lib"; 5*b8851fccSafresh1} 6*b8851fccSafresh1 7*b8851fccSafresh1use strict; 8*b8851fccSafresh1require './test.pl'; 9*b8851fccSafresh1use Config qw(%Config); 10*b8851fccSafresh1 11*b8851fccSafresh1# memory usage checked with top 12*b8851fccSafresh1$ENV{PERL_TEST_MEMORY} >= 2 13*b8851fccSafresh1 or skip_all("Need ~2GB for this test"); 14*b8851fccSafresh1$Config{ptrsize} >= 8 15*b8851fccSafresh1 or skip_all("Need 64-bit pointers for this test"); 16*b8851fccSafresh1 17*b8851fccSafresh1plan(tests => 4); 18*b8851fccSafresh1 19*b8851fccSafresh1my $space = " "; # avoid constant folding from doubling memory usage 20*b8851fccSafresh1# concatenation here increases memory usage significantly 21*b8851fccSafresh1my $work = $space x 0x80000002; 22*b8851fccSafresh1substr($work, 0x80000000) = "\n\n"; 23*b8851fccSafresh1 24*b8851fccSafresh1# this would SEGV 25*b8851fccSafresh1is(index($work, "\n"), 0x80000000, "test index() over 2G mark"); 26*b8851fccSafresh1 27*b8851fccSafresh1# this would simply fail 28*b8851fccSafresh1is(rindex($work, "\n"), 0x80000001, "test rindex() over 2G mark"); 29*b8851fccSafresh1 30*b8851fccSafresh1utf8::upgrade($work); 31*b8851fccSafresh1 32*b8851fccSafresh1# this would SEGV 33*b8851fccSafresh1is(index($work, "\n"), 0x80000000, "test index() over 2G mark (utf8-ish)"); 34*b8851fccSafresh1 35*b8851fccSafresh1# this would simply fail 36*b8851fccSafresh1is(rindex($work, "\n"), 0x80000001, "test rindex() over 2G mark (utf8-ish)"); 37*b8851fccSafresh1 38