xref: /openbsd-src/gnu/usr.bin/perl/t/bigmem/str.t (revision 5486feefcc8cb79b19e014ab332cc5dfd05b3b33)
1*5486feefSafresh1#!perl
2*5486feefSafresh1BEGIN {
3*5486feefSafresh1    chdir 't' if -d 't';
4*5486feefSafresh1    @INC = "../lib";
5*5486feefSafresh1    require './test.pl';
6*5486feefSafresh1}
7*5486feefSafresh1
8*5486feefSafresh1use Config qw(%Config);
9*5486feefSafresh1
10*5486feefSafresh1# 2G each for the $p2g, $n2g and $t
11*5486feefSafresh1
12*5486feefSafresh1$ENV{PERL_TEST_MEMORY} >= 11
13*5486feefSafresh1    or skip_all("Need ~11Gb for this test");
14*5486feefSafresh1$Config{ptrsize} >= 8
15*5486feefSafresh1    or skip_all("Need 64-bit pointers for this test");
16*5486feefSafresh1
17*5486feefSafresh1my $p = "A";
18*5486feefSafresh1my $n = ~$p;
19*5486feefSafresh1
20*5486feefSafresh1my $sz = 0x8000_0001;
21*5486feefSafresh1
22*5486feefSafresh1my $p2g = ($p x $sz);
23*5486feefSafresh1
24*5486feefSafresh1is(length $p2g, $sz, "check p2g size");
25*5486feefSafresh1
26*5486feefSafresh1my $t = ($p x $sz);
27*5486feefSafresh1ok($t eq $p2g, "check scalar repeat with large count");
28*5486feefSafresh1undef $t;
29*5486feefSafresh1my $two = 2; # no constant folding
30*5486feefSafresh1
31*5486feefSafresh1$t = ($p2g x $two);
32*5486feefSafresh1ok($t eq "$p2g$p2g", "check scalar repeat with large source");
33*5486feefSafresh1undef $t;
34*5486feefSafresh1
35*5486feefSafresh1$t = ~$p2g;
36*5486feefSafresh1my $n2g = ($n x $sz);
37*5486feefSafresh1
38*5486feefSafresh1is(length $n2g, $sz, "check p2g size");
39*5486feefSafresh1
40*5486feefSafresh1# don't risk a 4GB diagnostic if they don't match
41*5486feefSafresh1ok($t eq $n2g, "string complement very large string");
42*5486feefSafresh1
43*5486feefSafresh1done_testing();
44*5486feefSafresh1
45