1 |
root |
1.2 |
BEGIN { $| = 1; print "1..30\n"; } |
2 |
root |
1.1 |
END {print "not ok 1\n" unless $loaded;} |
3 |
root |
1.3 |
use Algorithm::FEC; |
4 |
root |
1.1 |
$loaded = 1; |
5 |
|
|
|
6 |
|
|
use File::Temp; |
7 |
|
|
|
8 |
root |
1.3 |
my $fec = new Algorithm::FEC 3, 5, 70; |
9 |
root |
1.1 |
|
10 |
|
|
my $test = 0; |
11 |
|
|
|
12 |
|
|
sub ok($) { |
13 |
|
|
$test++; |
14 |
|
|
print $_[0] ? "ok $test\n" : "not ok $test\n"; |
15 |
|
|
} |
16 |
|
|
|
17 |
|
|
my @files = map { |
18 |
|
|
$fd = tmpfile (); |
19 |
|
|
syswrite $fd, $_ x 70; |
20 |
|
|
$_ < 2 ? $fd : [$fd, 0]; |
21 |
|
|
} 1..3; |
22 |
|
|
|
23 |
|
|
ok 1; |
24 |
|
|
|
25 |
root |
1.4 |
$fec->set_encode_blocks (\@files); |
26 |
root |
1.1 |
|
27 |
|
|
ok 1; |
28 |
|
|
|
29 |
|
|
my @blk; |
30 |
|
|
|
31 |
|
|
for (0..4) { |
32 |
|
|
ok 1; |
33 |
|
|
|
34 |
|
|
$blk[$_] = $fec->encode ($_); |
35 |
|
|
} |
36 |
|
|
|
37 |
|
|
ok ($blk[0] eq "1" x 70); |
38 |
|
|
ok ($blk[1] eq "2" x 70); |
39 |
|
|
ok ($blk[2] eq "3" x 70); |
40 |
|
|
ok ($blk[3] eq "%" x 70); |
41 |
|
|
ok ($blk[4] eq "Y" x 70); |
42 |
|
|
|
43 |
|
|
for ([[0,1,2],[0,1,2]], |
44 |
root |
1.4 |
[[0,2,1],[0,1,2]], |
45 |
|
|
[[0,2,3],[0,3,2]], |
46 |
|
|
[[4,3,1],[4,1,3]]) { |
47 |
root |
1.1 |
my ($idx1, $idx2) = @$_; |
48 |
|
|
|
49 |
|
|
my @blks; |
50 |
|
|
|
51 |
|
|
ok 1; |
52 |
|
|
my $i; |
53 |
|
|
for (@$idx1) { |
54 |
root |
1.5 |
$blks[$i++] = $_ < 3 ? $files[$_] : do { |
55 |
|
|
# Create a shared hash key scalar as an extra robustness test. |
56 |
|
|
$blk[$_] = (keys %{{$blk[$_]=>0}})[0]; |
57 |
|
|
$blk[$_]; |
58 |
|
|
}; |
59 |
root |
1.1 |
} |
60 |
|
|
|
61 |
root |
1.4 |
$fec->set_decode_blocks (\@blks, $idx1); |
62 |
|
|
$fec->decode; |
63 |
root |
1.1 |
|
64 |
|
|
ok 1; |
65 |
|
|
|
66 |
|
|
ok ("@$idx1" eq "@$idx2"); |
67 |
|
|
|
68 |
root |
1.4 |
for (0 .. $#$idx1) { |
69 |
root |
1.1 |
next if ref $blks[$_]; |
70 |
root |
1.4 |
ok (($_+1) x 70 eq $blks[$_]); |
71 |
root |
1.1 |
} |
72 |
|
|
} |
73 |
root |
1.2 |
|
74 |
|
|
ok 1; |
75 |
|
|
|
76 |
|
|
my $a = "a" x 70; |
77 |
|
|
my $b = "b" x 70; |
78 |
|
|
|
79 |
|
|
$fec->copy ($b, $a); |
80 |
|
|
|
81 |
root |
1.3 |
ok ($a eq $b); |
82 |
|
|
ok ($a eq "b" x 70); |
83 |
root |
1.1 |
|