File: comp

package info (click to toggle)
aspell 0.60.8.2-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 15,336 kB
  • sloc: cpp: 24,378; sh: 12,340; perl: 1,924; ansic: 1,661; makefile: 852; sed: 16
file content (82 lines) | stat: -rwxr-xr-x 2,300 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/perl

use strict;
use warnings;
use autodie;

use Symbol 'qualify_to_ref';

open A, $ARGV[0];
open B, $ARGV[1];
my $level = $ARGV[2];
$level = 0 unless defined $level;

my %score;
$score{orig} = [0,0,0,0,0,0];
$score{new} = [0,0,0,0,0,0];
sub get_line(*$) {
    my $fh = qualify_to_ref(shift, caller);
    my $id = shift;
    local $_ = <$fh>;
    chomp;
    my @d = split "\t", $_, -1;
    push @d, '' if @d == 4;
    die "bad line: $_" unless @d == 5;
    my %v = (key => "$d[0] => $d[1]",
             mis => $d[0], cur => $d[1], pos => $d[2], num => $d[3], sugs => $d[4]);
    $v{pos} = 'inf'  if $v{pos} == 0;
    $score{$id}[0]++     if $v{pos} == 1;
    $score{$id}[1]++     if $v{pos} <= 5;
    $score{$id}[2]++    if $v{pos} <= 10;
    $score{$id}[3]++    if $v{pos} <= 25;
    $score{$id}[4]++    if $v{pos} <= 50;
    $score{$id}[5]++ if $v{pos} < 'inf';
    my @sugs = split ', ', $v{sugs};
    foreach (@sugs) {$_ = "*$_*" if $_ eq $v{cur};}
    $v{sugs} = join ', ', @sugs;
    return %v;
}

my @tally = (0,0,0,0);
my $fail = 0;

while (!eof(A) && !eof(B)) {
    my %a = get_line A, 'orig';
    my %b = get_line B, 'new';
    my $prefix = '  ';
    if ($a{sugs} eq $b{sugs}) {
        $tally[0]++;
        next if ($level > 0);
        print "$prefix$a{key}: same\n";
        next;
    } elsif ($a{pos} eq $b{pos}) {
        $tally[1]++;
        next if ($level > 1);
        print "$prefix$a{key}: differ:\n";
        $fail++;
    } elsif ($a{pos} > $b{pos}) {
        $tally[2]++;
        next if ($level > 2);
        $prefix = '. ';
        print "$prefix$a{key}: better: $a{pos} > $b{pos}:\n";
        $fail++;
    } else {
        $tally[3]++;
        $prefix = '!!';
        print "$prefix$a{key}: WORSE: $a{pos} < $b{pos}:\n";
        $fail++;
    }
    printf "$prefix    %3d: $a{sugs}\n", $a{num};
    printf "$prefix    %3d: $b{sugs}\n", $b{num};
}

my @fh = (*STDOUT);
print STDERR "RESULTS DIFFER ($ARGV[0] $ARGV[1])!\n" if $fail;
push @fh, *STDERR if $fail;
for my $fh (@fh) {
    printf $fh "STATS orig: ".join(" ", @{$score{orig}})."\n";
    printf $fh "STATS diff: ".join(" ", map {sprintf("%+3d", $score{new}[$_] - $score{orig}[$_])} (0..5))."\n";
    printf $fh "TOTALS:  same: %d,  differ: %d,  better: %d,  WORSE: %d\n", @tally;
}

exit 1 if $fail != 0;