1 |
BEGIN { $| = 1; print "1..30\n"; } |
2 |
END {print "not ok 1\n" unless $loaded;} |
3 |
use Convert::FEC; |
4 |
$loaded = 1; |
5 |
|
6 |
use File::Temp; |
7 |
|
8 |
my $fec = new Convert::FEC 3, 5, 70; |
9 |
|
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 |
$fec->set_blocks (\@files); |
26 |
|
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 |
[[0,2,1],[0,2,1]], |
45 |
[[0,2,3],[0,2,1]], |
46 |
[[4,3,1],[0,2,1]]) { |
47 |
my ($idx1, $idx2) = @$_; |
48 |
|
49 |
my @blks; |
50 |
|
51 |
ok 1; |
52 |
my $i; |
53 |
for (@$idx1) { |
54 |
$blks[$i++] = $_ < 3 ? $files[$_] : $blk[$_]; |
55 |
} |
56 |
|
57 |
$fec->decode (\@blks, $idx1); |
58 |
|
59 |
ok 1; |
60 |
|
61 |
ok ("@$idx1" eq "@$idx2"); |
62 |
|
63 |
$i = 0; |
64 |
for (@$idx1) { |
65 |
$i++; |
66 |
next if ref $blks[$_]; |
67 |
ok ($i x 70 eq $blks[$_]); |
68 |
} |
69 |
} |
70 |
|
71 |
ok 1; |
72 |
|
73 |
my $a = "a" x 70; |
74 |
my $b = "b" x 70; |
75 |
|
76 |
$fec->copy ($b, $a); |
77 |
|
78 |
ok $a eq $b; |
79 |
ok $a eq "b" x 70; |
80 |
|