This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[rt #111730] TODO tests for vec() with large offsets
authorTony Cook <tony@develop-help.com>
Fri, 23 Mar 2012 22:36:27 +0000 (23:36 +0100)
committerFather Chrysostomos <sprout@cpan.org>
Tue, 22 May 2012 00:51:53 +0000 (17:51 -0700)
MANIFEST
t/bigmem/vec.t [new file with mode: 0644]

index 8a17dc3..0d9e1ac 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -4960,6 +4960,7 @@ t/base/term.t                     See if various terms work
 t/base/while.t                 See if while work
 t/benchmark/rt26188-speed-up-keys-on-empty-hash.t      Benchmark if keys on empty hashes is fast enough
 t/bigmem/read.t                        Check read() handles large offsets
+t/bigmem/vec.t                 Check vec() handles large offsets
 t/cmd/elsif.t                  See if else-if works
 t/cmd/for.t                    See if for loops work
 t/cmd/mod.t                    See if statement modifiers work
diff --git a/t/bigmem/vec.t b/t/bigmem/vec.t
new file mode 100644 (file)
index 0000000..ccdbb9b
--- /dev/null
@@ -0,0 +1,36 @@
+#!perl
+BEGIN {
+    chdir 't';
+    unshift @INC, "../lib";
+}
+
+use strict;
+require './test.pl';
+use Config qw(%Config);
+
+$ENV{PERL_TEST_MEMORY} >= 1
+    or skip_all("Need ~1Gb for this test");
+$Config{ptrsize} >= 8
+    or skip_all("Need 64-bit pointers for this test");
+
+plan(7);
+
+# RT #111730: Negative offset to vec in lvalue context
+local $::TODO = "RT #111730 - vec uses I32 for offsets";
+
+my $v = "";
+ok(scalar eval { vec($v, 0x80000000, 1) = 1 }, "set a bit at a large offset");
+ok(vec($v, 0x80000000, 1), "check a bit at a large offset");
+{ local $::TODO; # succeeds but shouldn't at this point
+ok(scalar eval { vec($v, 0x100000000, 1) = 1 },
+   "set a bit at a larger offset");
+ok(vec($v, 0x100000000, 1), "check a bit at a larger offset");
+
+# real out of range values
+ok(!eval { vec($v, -0x80000000, 1) = 1 },
+   "shouldn't be able to set at a large negative offset");
+}
+ok(!eval { vec($v, -0x100000000, 1) = 1 },
+   "shouldn't be able to set at a larger negative offset");
+
+ok(!vec($v, 0, 1), "make sure we didn't wrap");