use strict;
use warnings;
-use Test::More 'no_plan';
+use lib 't/lib';
+use Test::Leaner 'no_plan';
-use Scalar::Vec::Util qw/vshift SVU_SIZE/;
+use Scalar::Vec::Util qw<vshift SVU_SIZE>;
+
+for ([ 1, 'offset', -1 ], [ 2, 'length', '-1' ]) {
+ my @args = ('1') x 4;
+ $args[$_->[0]] = $_->[2];
+ eval { &vshift(@args) }; my $line = __LINE__;
+ like $@, qr/^Invalid\s+negative\s+$_->[1]\s+at\s+\Q$0\E\s+line\s+$line/;
+}
my $p = SVU_SIZE;
$p = 8 if $p < 8;
}
}
+sub expect {
+ (undef, my $s, my $l, my $b, my $left, my $insert) = @_;
+ myfill($_[0], 0, $s, 0);
+ if ($b < $l) {
+ if ($left) {
+ myfill($_[0], $s, $b, defined $insert ? $insert : 1);
+ myfill($_[0], $s + $b, $l - $b, 1);
+ } else {
+ myfill($_[0], $s, $l - $b, 1);
+ myfill($_[0], $s + $l - $b, $b, defined $insert ? $insert : 1);
+ }
+ } else {
+ myfill($_[0], $s, $l, defined $insert ? $insert : 1);
+ }
+}
+
my ($v, $v0, $c) = ('', '') x 2;
sub try {
for my $s (@s) {
for my $l (0 .. $n - 1) {
last if $s + $l > $n;
+ rst $v0;
pat $v0, $s, $l, 0;
my @b = (0);
my $l2 = int($l/2);
push @b, $l2 if $l2 != $l;
- push @b, $l if $l;
+ push @b, $l + 1;
for my $b (@b) {
$v = $v0;
- $c = '';
- myfill($c, 0, $s, 0);
- if ($left) {
- myfill($c, $s, $b, defined $insert ? $insert : 1);
- myfill($c, $s + $b, $l - $b, 1);
- } else {
- myfill($c, $s, $l - $b, 1);
- myfill($c, $s + $l - $b, $b, defined $insert ? $insert : 1);
- }
+ rst $c;
+ expect $c, $s, $l, $b, $left, $insert;
$b = -$b unless $left;
vshift $v, $s, $l => $b, $insert;
my $i = defined $insert ? $insert : 'undef';