xref: /openbsd-src/gnu/usr.bin/perl/t/bigmem/vec.t (revision b8851fcc53cbe24fd20b090f26dd149e353f6174)
191f110e0Safresh1#!perl
291f110e0Safresh1BEGIN {
3*b8851fccSafresh1    chdir 't' if -d 't';
4*b8851fccSafresh1    @INC = "../lib";
591f110e0Safresh1}
691f110e0Safresh1
791f110e0Safresh1use strict;
891f110e0Safresh1require './test.pl';
991f110e0Safresh1use Config qw(%Config);
1091f110e0Safresh1
1191f110e0Safresh1$ENV{PERL_TEST_MEMORY} >= 1
1291f110e0Safresh1    or skip_all("Need ~1Gb for this test");
1391f110e0Safresh1$Config{ptrsize} >= 8
1491f110e0Safresh1    or skip_all("Need 64-bit pointers for this test");
1591f110e0Safresh1
1691f110e0Safresh1plan(7);
1791f110e0Safresh1
1891f110e0Safresh1# RT #111730: Negative offset to vec in lvalue context
1991f110e0Safresh1
2091f110e0Safresh1my $v = "";
2191f110e0Safresh1ok(scalar eval { vec($v, 0x80000000, 1) = 1 }, "set a bit at a large offset");
2291f110e0Safresh1ok(vec($v, 0x80000000, 1), "check a bit at a large offset");
2391f110e0Safresh1
2491f110e0Safresh1ok(scalar eval { vec($v, 0x100000000, 1) = 1 },
2591f110e0Safresh1   "set a bit at a larger offset");
2691f110e0Safresh1ok(vec($v, 0x100000000, 1), "check a bit at a larger offset");
2791f110e0Safresh1
2891f110e0Safresh1# real out of range values
2991f110e0Safresh1ok(!eval { vec($v, -0x80000000, 1) = 1 },
3091f110e0Safresh1   "shouldn't be able to set at a large negative offset");
3191f110e0Safresh1ok(!eval { vec($v, -0x100000000, 1) = 1 },
3291f110e0Safresh1   "shouldn't be able to set at a larger negative offset");
3391f110e0Safresh1
3491f110e0Safresh1ok(!vec($v, 0, 1), "make sure we didn't wrap");
35