Skip to content

Commit

Permalink
Improve diffdepth speed a bit and add a testcase
Browse files Browse the repository at this point in the history
  • Loading branch information
mlschroe committed Oct 4, 2023
1 parent 5d1da85 commit 22b0154
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 18 deletions.
43 changes: 25 additions & 18 deletions PBuild/Meta.pm
Original file line number Diff line number Diff line change
Expand Up @@ -168,26 +168,33 @@ sub diffsortedmd5 {
sub diffdepth {
my ($m1, $m2) = @_;
my $i = -1;
for (@$m1) {
$i++;
my $m = $m2->[$i];
if (!defined($m)) {
return 1 unless $i;
my $i1 = $_ =~ y!/!/!;
return $i1 + 2;
} elsif ($m ne $_) {
return 1 unless $i;
my $i1 = $_ =~ y!/!/!;
my $i2 = $m =~ y!/!/!;
return $i1 < $i2 ? $i1 + 2 : $i2 + 2;
if (@$m1 <= @$m2) {
for (@$m1) {
if ($_ ne $m2->[++$i]) {
return 1 unless $i;
my $i1 = $_ =~ y!/!/!;
my $i2 = $m2->[$i] =~ y!/!/!;
return $i1 < $i2 ? $i1 + 2 : $i2 + 2;
}
}
return 0 if ++$i == @$m2;
return 1 unless $i;
my $i2 = $m2->[$i] =~ y!/!/!;
return $i2 + 2;
} else {
for (@$m2) {
if ($_ ne $m1->[++$i]) {
return 1 unless $i;
my $i1 = $m1->[$i] =~ y!/!/!;
my $i2 = $_ =~ y!/!/!;
return $i1 < $i2 ? $i1 + 2 : $i2 + 2;
}
}
$i++;
return 1 unless $i;
my $i1 = $m1->[$i] =~ y!/!/!;
return $i1 + 2;
}
$i++;
my $m = $m2->[$i];
return 0 unless defined $m;
return 1 unless $i;
my $i2 = $m =~ y!/!/!;
return $i2 + 2;
}

1;
57 changes: 57 additions & 0 deletions t/diffdepth.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/usr/bin/perl -w

use strict;

use Test::More tests => 18;

use PBuild::Meta;

sub dodiff {
my ($a1, $a2, $x, $msg) = @_;
my $n1 = PBuild::Meta::diffdepth($a1, $a2);
is($n1, $x, "$msg - normal");
$n1 = PBuild::Meta::diffdepth($a2, $a1);
is($n1, $x, "$msg - normal reversed");
}

my @m1;
my @m2;

dodiff(\@m1, \@m2, 0, 'empty1');
push @m1, 'bbb1f01d98683e5cad6f396ae49ce66c dwz';
dodiff(\@m1, \@m2, 1, 'empty2');
push @m2, 'bbb1f01d98683e5cad6f396ae49ce66c dwz';
dodiff(\@m1, \@m2, 0, 'identical1');
@m1 = ();
dodiff(\@m1, \@m2, 1, 'empty3');

@m1 = split("\n", <<'EOF');
bbb1f01d98683e5cad6f396ae49ce66c dwz
bbb1f01d98683e5cad6f396ae49ce66c aaa
EOF
@m2 = split("\n", <<'EOF');
bbb1f01d98683e5cad6f396ae49ce66c dwz
EOF
dodiff(\@m1, \@m2, 2, 'one aaa');

@m2 = @m1;
dodiff(\@m1, \@m2, 0, 'identical aaa');

@m1 = split("\n", <<'EOF');
bbb1f01d98683e5cad6f396ae49ce66c dwz
bbb1f01d98683e5cad6f396ae49ce66c aba
EOF
dodiff(\@m1, \@m2, 2, 'different aaa');

@m1 = split("\n", <<'EOF');
bbb1f01d98683e5cad6f396ae49ce66c dwz
bbb1f01d98683e5cad6f396ae49ce66c aaa
bbb1f01d98683e5cad6f396ae49ce66c aaa/xx
EOF
dodiff(\@m1, \@m2, 3, 'different aaa/xx');

push @m1, 'bbb1f01d98683e5cad6f396ae49ce66c aaa/yy';
push @m2, 'bbb1f01d98683e5cad6f396ae49ce66c aaa/yy';
dodiff(\@m1, \@m2, 3, 'different aaa/xx 2');


0 comments on commit 22b0154

Please sign in to comment.