]> git.vpit.fr Git - perl/modules/Scalar-Vec-Util.git/blob - samples/bench.pl
Importing Scalar-Vec-Util-0.01.tar.gz
[perl/modules/Scalar-Vec-Util.git] / samples / bench.pl
1 #!/usr/bin/env perl
2
3 use strict;
4 use warnings;
5
6 use Benchmark qw/cmpthese/;
7
8 use lib qw{blib/arch blib/lib};
9 use Scalar::Vec::Util qw/vfill vcopy veq/;
10
11 my $n = 100_000;
12 my $i = 0;
13 my $x = '';
14
15 sub inc {
16  ++$_[0];
17  $_[0] = 0 if $_[0] >= $n;
18  return $_[0];
19 }
20
21 print "fill:\n";
22 cmpthese -3, {
23  vfill    => sub { vfill $x, inc($i), $n - $i, 1; },
24  vfill_pp => sub { Scalar::Vec::Util::vfill_pp($x, inc($i), $n - $i, 1); }
25 };
26
27 $i = 0;
28 my $j = int $n / 2;
29 my $y = '';
30 print "\ncopy:\n";
31 cmpthese -3, {
32  vcopy    => sub { vcopy $x, inc($i), $y, inc($j), $n - ($i > $j ? $i : $j); },
33  vcopy_pp => sub { Scalar::Vec::Util::vcopy_pp($x, inc($i), $y, inc($j), $n - ($i > $j ? $i : $j)); }
34 };
35
36 $i = 0;
37 $j = int $n / 2;
38 print "\nmove:\n";
39 cmpthese -3, {
40  vcopy    => sub { vcopy $x, inc($i), $x, inc($j), $n - ($i > $j ? $i : $j); },
41  vcopy_pp => sub { Scalar::Vec::Util::vcopy_pp($x, inc($i), $x, inc($j), $n - ($i > $j ? $i : $j)); }
42 };
43
44 $i = 0;
45 $j = int $n / 2;
46 vfill $x, 0, $n, 1;
47 vfill $y, 0, $n, 1;
48 print "\neq:\n";
49 cmpthese -3, {
50  veq    => sub { veq $x, inc($i), $y, inc($j), $n - ($i > $j ? $i : $j); },
51  veq_pp => sub { Scalar::Vec::Util::veq_pp($x, inc($i), $y, inc($j), $n - ($i > $j ? $i : $j)); }
52 };