#! /usr/bin/perl use strict; use warnings; my $v=0; $v++,shift if ($ARGV[0]||"") eq "-v"; $v++,shift if ($ARGV[0]||"") eq "-v"; @ARGV and @ARGV%1==0 or die "$0: [-v] { }..."; my @s=([0,0],[0,0]); while (@ARGV) { local *F; my $f="(diff -U999999 '".shift."' '".shift."';:)|"; open F,$f or die $f; my($a,$b,$text); while () { my $line=$.-3; chomp; warn "$line:$_\n" if $v; next if $_ eq " BREAKSTUB"; die $_ if /^.BREAKSTUB/; if (/^ BREAK/) { if (!defined $text) {} elsif (!$a && !$b) { print "both bad:$line\n$text"; } elsif ($a && !$b) { print "regression:$line\n$text"; } elsif (!$a && $b && $v>=2) { print "improvement:$line\n$text"; } $s[$a||0][$b||0]++ if defined $text; $a=$b=0; $text="$_\n"; next; } $text.="$_\n" if defined $text; die $_ if /^.BREAK/; my $re=qr/Breakpoint at |\d+ hack_count/o; $a=1 if /^[-]$re/o; $b=1 if /^[+]$re/o; $a=$b=1 if /^ $re/o; } close F or die $f; } printf "prev bad: %5d\n",$s[0][0]+$s[0][1]; printf "now bad: %5d\n",$s[0][0]+$s[1][0]; printf "both bad: %5d\n",$s[0][0]; printf "regression: %5d\n",$s[1][0]; printf "improvement: %5d\n",$s[0][1]; printf "both good: %5d\n",$s[1][1];