X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=t%2F40-vshift.t;h=635bba2842deed62203c1264256a9597a29f78ac;hb=3fdc4bd1cd11d103feda665580f1753297e0a470;hp=39e14d54e280c2f6ad046b41bd21ab14efb2a596;hpb=0062dbd2da53db62346382e729b84097131c61ee;p=perl%2Fmodules%2FScalar-Vec-Util.git diff --git a/t/40-vshift.t b/t/40-vshift.t index 39e14d5..635bba2 100644 --- a/t/40-vshift.t +++ b/t/40-vshift.t @@ -3,10 +3,18 @@ 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/; +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; my $n = 3 * $p; @@ -27,6 +35,22 @@ sub pat { } } +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 { @@ -35,22 +59,16 @@ 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';