OSDN Git Service

2013.10.24
[uclinux-h8/uClinux-dist.git] / lib / bitvector / examples / benchmk3.pl
1 #!perl -w
2
3 package Bit::Vector;
4
5 use strict;
6
7 sub Pattern_Fill
8 {
9     my($vector,$pattern,$length) = @_;
10     my($size,$factor);
11
12     $size = $vector->Size();
13     $factor = int($size / $length);
14     if ($size % $length) { $factor++; }
15     $vector->Chunk_List_Store($length, ($pattern) x $factor);
16     return $vector;
17 }
18
19 package main;
20
21 use strict;
22
23 use Bit::Vector;
24 use Benchmark;
25
26 my($i,$n);
27
28 my $b = 1024;
29
30 my(@v) = Bit::Vector->new($b,8);
31
32 $v[1]->Pattern_Fill(0x01,5);
33 $v[2]->Pattern_Fill(0x01,3);
34 $v[3]->Pattern_Fill(0x01,2);
35 $v[4]->Pattern_Fill(0x03,3);
36 $v[5]->Pattern_Fill(0x07,4);
37 $v[6]->Pattern_Fill(0x0F,5);
38 $v[7]->Fill();
39
40 for ( $i = 0; $i < 8; $i++ )
41 {
42     $n = $v[$i]->to_Bin();
43     print "\nTiming vector #$i:\n$n\n\n";
44     timethese
45     (
46         500000,
47         {
48             'Norm1' => sub { $n = $v[$i]->Norm(); },
49             'Norm2' => sub { $n = $v[$i]->Norm2(); },
50             'Norm3' => sub { $n = $v[$i]->Norm3(); }
51         }
52     );
53     print "<<< n = $n, b = $b, ", ( int( ($n / $b) * 1000 + 0.5 ) / 10 ), "% >>>\n";
54 }
55
56 __END__
57