]> git.vpit.fr Git - perl/modules/Scalar-Vec-Util.git/blob - t/40-vshift.t
Bump copyright year
[perl/modules/Scalar-Vec-Util.git] / t / 40-vshift.t
1 #!perl -T
2
3 use strict;
4 use warnings;
5
6 use lib 't/lib';
7 use Test::Leaner 'no_plan';
8
9 use Scalar::Vec::Util qw<vshift SVU_SIZE>;
10
11 BEGIN {
12  *myfill = *Scalar::Vec::Util::vfill_pp;
13  *myeq   = *Scalar::Vec::Util::veq_pp;
14 }
15
16 for ([ 1, 'offset', -1 ], [ 2, 'length', '-1' ]) {
17  my @args  = ('1') x 4;
18  $args[$_->[0]] = $_->[2];
19  local $@;
20  eval { &vshift(@args) };
21  my $err  = $@;
22  my $line = __LINE__-2;
23  like $err, qr/^Invalid\s+negative\s+$_->[1]\s+at\s+\Q$0\E\s+line\s+$line/,
24       "vshift(@args) failed";
25 }
26
27 my $p = SVU_SIZE;
28 $p    = 8 if $p < 8;
29 my $n = 3 * $p;
30 my $q = 2;
31
32 sub rst {
33  myfill $_[0], 0, $n, 0;
34  $_[0] = '';
35 }
36
37 sub pat {
38  my (undef, $a, $b, $x) = @_;
39  $_[0] = '';
40  $x = $x ? 1 : 0;
41  if (defined $b) {
42   myfill $_[0], 0,  $a, $x;
43   myfill $_[0], $a, $b, 1 - $x;
44  }
45 }
46
47 sub expect {
48  my (undef, $s, $l, $b, $left, $insert) = @_;
49  myfill $_[0], 0, $s, 0;
50  if ($b < $l) {
51   if ($left) {
52    myfill $_[0], $s,      $b,      defined $insert ? $insert : 1;
53    myfill $_[0], $s + $b, $l - $b, 1;
54   } else {
55    myfill $_[0], $s,           $l - $b, 1;
56    myfill $_[0], $s + $l - $b, $b,      defined $insert ? $insert : 1;
57   }
58  } else {
59   myfill $_[0], $s, $l, defined $insert ? $insert : 1;
60  }
61 }
62
63 my ($v, $v0, $c) = ('', '') x 2;
64
65 sub try {
66  my ($left, $insert) = @_;
67  my @s = ($p - $q) .. ($p + $q);
68  for my $s (@s) {
69   for my $l (0 .. $n - 1) {
70    next if $s + $l > $n;
71    rst $v0;
72    pat $v0, $s, $l, 0;
73    my @b = (0);
74    my $l2 = int($l/2);
75    push @b, $l2 if $l2 != $l;
76    push @b, $l + 1;
77    for my $b (@b) {
78     my $desc = "vshift $s, $l, $b, " . (defined $insert ? $insert : 'undef');
79     $v = $v0;
80     rst $c;
81     expect $c, $s, $l, $b, $left, $insert;
82     $b = -$b unless $left;
83     vshift $v, $s, $l => $b, $insert;
84     is length $v, length $c,   "$desc: length";
85     ok myeq($v, 0, $c, 0, $n), "$desc: bits";
86    }
87   }
88  }
89 }
90
91 try 1;
92 try 1, 0;
93 try 1, 1;
94 try 0;
95 try 0, 0;
96 try 0, 1;