BEGIN { $| = 1; print "1..30\n"; }
END {print "not ok 1\n" unless $loaded;}
use Algorithm::FEC;
$loaded = 1;
use File::Temp;
my $fec = new Algorithm::FEC 3, 5, 70;
my $test = 0;
sub ok($) {
$test++;
print $_[0] ? "ok $test\n" : "not ok $test\n";
}
my @files = map {
$fd = tmpfile ();
syswrite $fd, $_ x 70;
$_ < 2 ? $fd : [$fd, 0];
} 1..3;
ok 1;
$fec->set_encode_blocks (\@files);
ok 1;
my @blk;
for (0..4) {
ok 1;
$blk[$_] = $fec->encode ($_);
}
ok ($blk[0] eq "1" x 70);
ok ($blk[1] eq "2" x 70);
ok ($blk[2] eq "3" x 70);
ok ($blk[3] eq "%" x 70);
ok ($blk[4] eq "Y" x 70);
for ([[0,1,2],[0,1,2]],
[[0,2,1],[0,1,2]],
[[0,2,3],[0,3,2]],
[[4,3,1],[4,1,3]]) {
my ($idx1, $idx2) = @$_;
my @blks;
ok 1;
my $i;
for (@$idx1) {
$blks[$i++] = $_ < 3 ? $files[$_] : do {
# Create a shared hash key scalar as an extra robustness test.
$blk[$_] = (keys %{{$blk[$_]=>0}})[0];
$blk[$_];
};
}
$fec->set_decode_blocks (\@blks, $idx1);
$fec->decode;
ok 1;
ok ("@$idx1" eq "@$idx2");
for (0 .. $#$idx1) {
next if ref $blks[$_];
ok (($_+1) x 70 eq $blks[$_]);
}
}
ok 1;
my $a = "a" x 70;
my $b = "b" x 70;
$fec->copy ($b, $a);
ok ($a eq $b);
ok ($a eq "b" x 70);