Algorithm-GDiffDelta

 view release on metacpan or  search on metacpan

t/30delta.t  view on Meta::CPAN

gdiff_apply($ios_orig_file, $ios_delta_file, $ios_new_file);
is("$ios_new_file", $new_bak, 'delta applies correctly');

# Maximum and minimum lengths we expect the deltas to be for the tests below.
my %DELTA_MAX_LEN = (
    predefined_1 => [ 17, 17 ],
    predefined_2 => [ 433, 435 ],
);

# Now test with real files, using sample data in 't/data'.
for (1 .. 2) {
    my $orig_filename = catfile($data_dir, "$_.orig");
    my $delta_filename = catfile($data_dir, "$_.gdiff");
    my $new_filename = catfile($data_dir, "$_.new");

    open my $orig_file, '<', $orig_filename
      or die "error opening $orig_filename: $!";
    open my $new_file, '<', $new_filename
      or die "error opening $new_filename: $!";
    my $tmp_filename = tmpnam();
    open my $output_file, '>', $tmp_filename
      or die "error opening $tmp_filename: $!";

    gdiff_delta($orig_file, $new_file, $output_file);
    close $output_file;     # to flush it
    open $output_file, '<', $tmp_filename
      or die "error opening $tmp_filename: $!";

    seek $orig_file, 0, 0 or die "error seeking in $orig_filename: $!";
    my $tmp_filename2 = tmpnam();
    open my $output_file2, '>', $tmp_filename2
      or die "error opening $tmp_filename2: $!";
    gdiff_apply($orig_file, $output_file, $output_file2);
    close $output_file2;    # to flush it
    is(read_file($tmp_filename2), read_file($new_filename),
       "delta for sample files numbered $_ produces right output");

    # Make sure the delta is a reasonable size.
    my @stat = stat $output_file or die "error stating $tmp_filename: $!";
    my $size = $stat[7];
    my $expected_size = $DELTA_MAX_LEN{"predefined_$_"};
    ok($size >= $expected_size->[0],
       "delta for $_ should be at least $expected_size->[0] bytes");
    ok($size <= $expected_size->[1],
       "delta for $_ should be at no more than $expected_size->[1] bytes");
}


sub read_file
{
    my ($filename) = @_;

    open my $file, '<', $filename
      or die "error opening $filename: $!";
    my $data = do { local $/; <$file> };
    die "error reading from $filename: $!" unless defined $data;

    return $data;
}

# vim:ft=perl ts=4 sw=4 expandtab:



( run in 0.584 second using v1.01-cache-2.11-cpan-5b529ec07f3 )