Algorithm-Diff
view release on metacpan or search on metacpan
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl base.t'
use strict;
$^W++;
use lib qw(blib lib);
use Algorithm::Diff qw(diff LCS traverse_sequences traverse_balanced sdiff);
use Data::Dumper;
use Test;
BEGIN
{
$|++;
plan tests => 35;
$SIG{__DIE__} = sub # breakpoint on die
{
$DB::single = 1;
$DB::single = 1; # avoid complaint
die @_;
}
}
my @a = qw(a b c e h j l m n p);
my @b = qw(b c d e f j k l m r s t);
my @correctResult = qw(b c e j l m);
my $correctResult = join(' ', @correctResult);
my $skippedA = 'a h n p';
my $skippedB = 'd f k r s t';
# From the Algorithm::Diff manpage:
my $correctDiffResult = [
[ [ '-', 0, 'a' ] ],
[ [ '+', 2, 'd' ] ],
[ [ '-', 4, 'h' ], [ '+', 4, 'f' ] ],
[ [ '+', 6, 'k' ] ],
[
[ '-', 8, 'n' ],
[ '+', 9, 'r' ],
[ '-', 9, 'p' ],
[ '+', 10, 's' ],
[ '+', 11, 't' ],
]
];
# Result of LCS must be as long as @a
my @result = Algorithm::Diff::_longestCommonSubsequence( \@a, \@b );
ok( scalar(grep { defined } @result),
scalar(@correctResult),
"length of _longestCommonSubsequence" );
# result has b[] line#s keyed by a[] line#
# print "result =", join(" ", map { defined($_) ? $_ : 'undef' } @result), "\n";
my @aresult = map { defined( $result[$_] ) ? $a[$_] : () } 0 .. $#result;
my @bresult =
map { defined( $result[$_] ) ? $b[ $result[$_] ] : () } 0 .. $#result;
ok( "@aresult", $correctResult, "A results" );
ok( "@bresult", $correctResult, "B results" );
my ( @matchedA, @matchedB, @discardsA, @discardsB, $finishedA, $finishedB );
( run in 0.370 second using v1.01-cache-2.11-cpan-796a6f069b2 )