xref: /openbsd-src/gnu/usr.bin/perl/t/bigmem/index.t (revision b8851fcc53cbe24fd20b090f26dd149e353f6174)
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