Blame util/table.pl

Packit Service 5195f2
#! /usr/bin/perl
Packit Service 5195f2
##
Packit Service 5195f2
## vi:ts=4:et
Packit Service 5195f2
##
Packit Service 5195f2
##---------------------------------------------------------------------------##
Packit Service 5195f2
##
Packit Service 5195f2
##  Author:
Packit Service 5195f2
##      Markus F.X.J. Oberhumer         <markus@oberhumer.com>
Packit Service 5195f2
##
Packit Service 5195f2
##  Description:
Packit Service 5195f2
##      Convert the output of the LZO lzotest program into a nice table.
Packit Service 5195f2
##
Packit Service 5195f2
##  Copyright (C) 1996-2014 Markus Franz Xaver Johannes Oberhumer
Packit Service 5195f2
##
Packit Service 5195f2
##---------------------------------------------------------------------------##
Packit Service 5195f2
Packit Service 5195f2
$PROG = $0;
Packit Service 5195f2
require 'ctime.pl';
Packit Service 5195f2
Packit Service 5195f2
#
Packit Service 5195f2
# get options
Packit Service 5195f2
#
Packit Service 5195f2
Packit Service 5195f2
while ($_ = $ARGV[ $[ ], /^-/) {
Packit Service 5195f2
    shift(@ARGV);
Packit Service 5195f2
    /^--$/ && ($opt_last = 1, last);
Packit Service 5195f2
Packit Service 5195f2
    /^--sort=name/ && ($opt_sort_summary_by_name++, next);
Packit Service 5195f2
    /^--sort=ratio/ && ($opt_sort_summary_by_ratio++, next);
Packit Service 5195f2
    /^-s/ && ($opt_summary_only++, next);
Packit Service 5195f2
    /^-t/ && ($opt_clear_time++, next);
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
$alg = '';
Packit Service 5195f2
$sep = "+" . ("-" x 76) . "+\n";
Packit Service 5195f2
Packit Service 5195f2
$block_size = -1;
Packit Service 5195f2
Packit Service 5195f2
$n = 0;
Packit Service 5195f2
@algs = ();
Packit Service 5195f2
%average = ();
Packit Service 5195f2
%total = ();
Packit Service 5195f2
Packit Service 5195f2
$lzo_version_string = '';
Packit Service 5195f2
$lzo_version_date = '';
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
# /***********************************************************************
Packit Service 5195f2
# //
Packit Service 5195f2
# ************************************************************************/
Packit Service 5195f2
Packit Service 5195f2
while (<>) {
Packit Service 5195f2
Packit Service 5195f2
    if (/(^|\s)(\d+)\s+block\-size/i) {
Packit Service 5195f2
        if ($block_size < 0) {
Packit Service 5195f2
            $block_size = $2;
Packit Service 5195f2
            &intro($block_size);
Packit Service 5195f2
        } elsif ($block_size != $2) {
Packit Service 5195f2
            die "$PROG: block-size: $block_size != $2\n";
Packit Service 5195f2
        }
Packit Service 5195f2
        next;
Packit Service 5195f2
    }
Packit Service 5195f2
Packit Service 5195f2
    if (/^\s*LZO\s.*library\s+\(v\s*([\w\.\s]+)\s*\,\s*([^\)]+)\)/) {
Packit Service 5195f2
        $lzo_version_string = $1;
Packit Service 5195f2
        $lzo_version_date = $2;
Packit Service 5195f2
        next;
Packit Service 5195f2
    }
Packit Service 5195f2
Packit Service 5195f2
    if (/^\s*(\S+(\s+\[\S+\])?)\s*(\|.*\|)\s*$/i) {
Packit Service 5195f2
        if ($1 ne $alg) {
Packit Service 5195f2
            &footer($1);
Packit Service 5195f2
            &header($1);
Packit Service 5195f2
        }
Packit Service 5195f2
        $line = $3;
Packit Service 5195f2
        &stats(*line);
Packit Service 5195f2
        print "$line\n" if (!$opt_summary_only);
Packit Service 5195f2
    }
Packit Service 5195f2
}
Packit Service 5195f2
&footer($1);
Packit Service 5195f2
Packit Service 5195f2
&summary();
Packit Service 5195f2
Packit Service 5195f2
exit(0);
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
# /***********************************************************************
Packit Service 5195f2
# //
Packit Service 5195f2
# ************************************************************************/
Packit Service 5195f2
Packit Service 5195f2
sub stats {
Packit Service 5195f2
    local (*l) = @_;
Packit Service 5195f2
    local ($x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8);
Packit Service 5195f2
Packit Service 5195f2
    if ($l !~ /^\|\s*(.+?)\s+(\d+)\s+(\d+)\s+(\d+)\s+([\d\.]+\s+)?([\d\.]+\s+)?([\d\.]+)\s+([\d\.]+)\s*\|/) {
Packit Service 5195f2
        die $_;
Packit Service 5195f2
    }
Packit Service 5195f2
Packit Service 5195f2
    $n++;
Packit Service 5195f2
Packit Service 5195f2
    $x1 = $1; $x2 = $2; $x3 = $3; $x4 = $4;
Packit Service 5195f2
    $x5 = ($x2 > 0) ? $x4 * 100.0 / $x2 : 0.0;
Packit Service 5195f2
    $x6 = ($x2 > 0) ? $x4 *   8.0 / $x2 : 0.0;
Packit Service 5195f2
    $x7 = $7; $x8 = $8;
Packit Service 5195f2
Packit Service 5195f2
    # convert from kB/s to MB/s (for old versions of lzotest)
Packit Service 5195f2
    if ($x7 =~ /\.\d\d$/) { $x7 = $x7 / 1000.0; }
Packit Service 5195f2
    if ($x8 =~ /\.\d\d$/) { $x8 = $x8 / 1000.0; }
Packit Service 5195f2
Packit Service 5195f2
    if ($opt_clear_time) {
Packit Service 5195f2
        $x7 = $x8 = 0.0;
Packit Service 5195f2
    }
Packit Service 5195f2
Packit Service 5195f2
    $s[0] += $x2;
Packit Service 5195f2
    $s[1] += $x3;
Packit Service 5195f2
    $s[2] += $x4;
Packit Service 5195f2
    $s[3] += $x5;
Packit Service 5195f2
    $s[4] += $x6;
Packit Service 5195f2
    if ($x7 > 0) {
Packit Service 5195f2
        $s[5] += 1.0 / $x7; $sn[5] += 1;
Packit Service 5195f2
    }
Packit Service 5195f2
    if ($x8 > 0) {
Packit Service 5195f2
        $s[6] += 1.0/ $x8; $sn[6] += 1;
Packit Service 5195f2
    }
Packit Service 5195f2
Packit Service 5195f2
    $x1 =~ s/\s+$//;
Packit Service 5195f2
    $l = sprintf("| %-14s %10d %5d %9d %6.1f %5.2f %9.3f %9.3f |",
Packit Service 5195f2
                    $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8);
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
# /***********************************************************************
Packit Service 5195f2
# //
Packit Service 5195f2
# ************************************************************************/
Packit Service 5195f2
Packit Service 5195f2
sub header {
Packit Service 5195f2
    local ($t) = @_;
Packit Service 5195f2
Packit Service 5195f2
    $alg = $t;
Packit Service 5195f2
Packit Service 5195f2
    # reset stats
Packit Service 5195f2
    $n = 0;
Packit Service 5195f2
    @s = (0, 0, 0, 0.0, 0.0, 0.0, 0.0);
Packit Service 5195f2
    @sn = (0, 0, 0, 0, 0, 0, 0);
Packit Service 5195f2
Packit Service 5195f2
    return if $opt_summary_only;
Packit Service 5195f2
Packit Service 5195f2
    print "\n$alg\n\n";
Packit Service 5195f2
    print $sep;
Packit Service 5195f2
print <
Packit Service 5195f2
| File Name          Length   CxB    ComLen  Ratio% Bits  Com MB/s  Dec MB/s |
Packit Service 5195f2
| ---------          ------   ---    ------  -----  ----  --------  -------- |
Packit Service 5195f2
EndOfString
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
# /***********************************************************************
Packit Service 5195f2
# //
Packit Service 5195f2
# ************************************************************************/
Packit Service 5195f2
Packit Service 5195f2
sub footer {
Packit Service 5195f2
    local ($t) = @_;
Packit Service 5195f2
    local ($shm5, $shm6);
Packit Service 5195f2
Packit Service 5195f2
    return unless $alg;
Packit Service 5195f2
    die if $n <= 0;
Packit Service 5195f2
    die if $s[0] <= 0;
Packit Service 5195f2
Packit Service 5195f2
    # harmonic mean
Packit Service 5195f2
    $shm5 = $s[5] > 0 ? $sn[5] / $s[5] : 0.0;
Packit Service 5195f2
    $shm6 = $s[6] > 0 ? $sn[6] / $s[6] : 0.0;
Packit Service 5195f2
Packit Service 5195f2
    push(@algs,$alg);
Packit Service 5195f2
Packit Service 5195f2
    $average{$alg} =
Packit Service 5195f2
        sprintf("| %-14s %10d %5d %9d %6.1f %5.2f %9.3f %9.3f |\n",
Packit Service 5195f2
            "Average", $s[0]/$n, $s[1]/$n, $s[2]/$n,
Packit Service 5195f2
            $s[3]/$n, $s[4]/$n,
Packit Service 5195f2
            $shm5, $shm6);
Packit Service 5195f2
Packit Service 5195f2
    $total{$alg} =
Packit Service 5195f2
        sprintf("| %-14s %10d %5d %9d %6.1f %5.2f %9.3f %9.3f |\n",
Packit Service 5195f2
            "Total", $s[0], $s[1], $s[2],
Packit Service 5195f2
            $s[2]/$s[0]*100, $s[2]/$s[0]*8,
Packit Service 5195f2
            $shm5, $shm6);
Packit Service 5195f2
Packit Service 5195f2
    return if $opt_summary_only;
Packit Service 5195f2
Packit Service 5195f2
    print $sep;
Packit Service 5195f2
    print $average{$alg};
Packit Service 5195f2
    print $total{$alg};
Packit Service 5195f2
    print $sep, "\n";
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
# /***********************************************************************
Packit Service 5195f2
# //
Packit Service 5195f2
# ************************************************************************/
Packit Service 5195f2
Packit Service 5195f2
$sort_mode = 0;
Packit Service 5195f2
Packit Service 5195f2
sub cmp_by_ratio {
Packit Service 5195f2
    local ($aa, $bb);
Packit Service 5195f2
Packit Service 5195f2
    if ($sort_mode == 0) {
Packit Service 5195f2
        $aa = $average{$a};
Packit Service 5195f2
        $bb = $average{$b};
Packit Service 5195f2
    } elsif ($sort_mode == 1) {
Packit Service 5195f2
        $aa = $total{$a};
Packit Service 5195f2
        $bb = $total{$b};
Packit Service 5195f2
    } else {
Packit Service 5195f2
        die;
Packit Service 5195f2
    }
Packit Service 5195f2
Packit Service 5195f2
    ($aa =~ m%^\s*\|\s+\S+\s+\d+\s+\d+\s+\d+\s+(\S+)%) || die;
Packit Service 5195f2
    $aa = $1;
Packit Service 5195f2
    ($bb =~ m%^\s*\|\s+\S+\s+\d+\s+\d+\s+\d+\s+(\S+)%) || die;
Packit Service 5195f2
    $bb = $1;
Packit Service 5195f2
Packit Service 5195f2
    # $aa < $bb;
Packit Service 5195f2
    $aa cmp $bb;
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
# /***********************************************************************
Packit Service 5195f2
# //
Packit Service 5195f2
# ************************************************************************/
Packit Service 5195f2
Packit Service 5195f2
sub summary {
Packit Service 5195f2
    local ($l);
Packit Service 5195f2
    local (@k);
Packit Service 5195f2
Packit Service 5195f2
    $sort_mode = 0;
Packit Service 5195f2
    if ($opt_sort_summary_by_name) {
Packit Service 5195f2
        @k = sort(@algs);
Packit Service 5195f2
    } elsif ($opt_sort_summary_by_ratio) {
Packit Service 5195f2
        @k = sort(cmp_by_ratio @algs);
Packit Service 5195f2
    } else {
Packit Service 5195f2
        @k = @algs;
Packit Service 5195f2
    }
Packit Service 5195f2
Packit Service 5195f2
    print "\n\n";
Packit Service 5195f2
    print "Summary of average values\n\n";
Packit Service 5195f2
    print $sep;
Packit Service 5195f2
print <
Packit Service 5195f2
| Algorithm          Length   CxB    ComLen  Ratio% Bits  Com MB/s  Dec MB/s |
Packit Service 5195f2
| ---------          ------   ---    ------  -----  ----  --------  -------- |
Packit Service 5195f2
EndOfString
Packit Service 5195f2
Packit Service 5195f2
    for (@k) {
Packit Service 5195f2
        $l = $average{$_};
Packit Service 5195f2
        $l =~ s/Average[\s]{7}/sprintf("%-14s",$_)/e;
Packit Service 5195f2
        print $l;
Packit Service 5195f2
    }
Packit Service 5195f2
    print $sep;
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
    $sort_mode = 1;
Packit Service 5195f2
    if ($opt_sort_summary_by_name) {
Packit Service 5195f2
        @k = sort(@algs);
Packit Service 5195f2
    } elsif ($opt_sort_summary_by_ratio) {
Packit Service 5195f2
        @k = sort(cmp_by_ratio @algs);
Packit Service 5195f2
    } else {
Packit Service 5195f2
        @k = @algs;
Packit Service 5195f2
    }
Packit Service 5195f2
Packit Service 5195f2
    print "\n\n";
Packit Service 5195f2
    print "Summary of total values\n\n";
Packit Service 5195f2
    print $sep;
Packit Service 5195f2
print <
Packit Service 5195f2
| Algorithm          Length   CxB    ComLen  Ratio% Bits  Com MB/s  Dec MB/s |
Packit Service 5195f2
| ---------          ------   ---    ------  -----  ----  --------  -------- |
Packit Service 5195f2
EndOfString
Packit Service 5195f2
Packit Service 5195f2
    for (@k) {
Packit Service 5195f2
        $l = $total{$_};
Packit Service 5195f2
        $l =~ s/Total[\s]{9}/sprintf("%-14s",$_)/e;
Packit Service 5195f2
        print $l;
Packit Service 5195f2
    }
Packit Service 5195f2
    print $sep;
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
# /***********************************************************************
Packit Service 5195f2
# //
Packit Service 5195f2
# ************************************************************************/
Packit Service 5195f2
Packit Service 5195f2
sub intro {
Packit Service 5195f2
    local ($bs) = @_;
Packit Service 5195f2
    local ($v, $t, $x);
Packit Service 5195f2
    local ($u, $uname_m, $uname_s, $uname_r);
Packit Service 5195f2
Packit Service 5195f2
    $t = &ctime(time); chop($t);
Packit Service 5195f2
    $t = sprintf("%-55s |", $t);
Packit Service 5195f2
Packit Service 5195f2
    $v='';
Packit Service 5195f2
    if ($lzo_version_string) {
Packit Service 5195f2
        $v = $lzo_version_string;
Packit Service 5195f2
        $v .= ', ' . $lzo_version_date if $lzo_version_date;
Packit Service 5195f2
        $v = sprintf("%-55s |", $v);
Packit Service 5195f2
        $v = sprintf("| LZO version      : %s\n", $v);
Packit Service 5195f2
    }
Packit Service 5195f2
Packit Service 5195f2
    if ($bs % 1024 == 0) {
Packit Service 5195f2
        $x = sprintf("%d (= %d kB)", $bs, $bs / 1024);
Packit Service 5195f2
    } else {
Packit Service 5195f2
        $x = sprintf("%d (= %.3f kB)", $bs, $bs / 1024.0);
Packit Service 5195f2
    }
Packit Service 5195f2
    $x = sprintf("%-55s |", $x);
Packit Service 5195f2
Packit Service 5195f2
    $u='';
Packit Service 5195f2
    if (1 == 1) {
Packit Service 5195f2
        $uname_s = `uname -s`; $uname_s =~ s/^\s+//; $uname_s =~ s/\s+$//;
Packit Service 5195f2
        $uname_r = `uname -r`; $uname_r =~ s/^\s+//; $uname_r =~ s/\s+$//;
Packit Service 5195f2
        $uname_m = `uname -m`; $uname_m =~ s/^\s+//; $uname_m =~ s/\s+$//;
Packit Service 5195f2
        if ($uname_s && $uname_m) {
Packit Service 5195f2
            $u = $uname_s;
Packit Service 5195f2
            $u .= ' ' . $uname_r if $uname_r;
Packit Service 5195f2
            $u .= ' ' . $uname_m;
Packit Service 5195f2
            $u = sprintf("%-55s |", $u);
Packit Service 5195f2
            $u = sprintf("| Operating system : %s\n", $u);
Packit Service 5195f2
        }
Packit Service 5195f2
    }
Packit Service 5195f2
    print <
Packit Service 5195f2
Packit Service 5195f2
+----------------------------------------------------------------------------+
Packit Service 5195f2
| DATA COMPRESSION TEST                                                      |
Packit Service 5195f2
| =====================                                                      |
Packit Service 5195f2
| Time of run      : $t
Packit Service 5195f2
$v$u| Context length   : $x
Packit Service 5195f2
+----------------------------------------------------------------------------+
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
Notes:
Packit Service 5195f2
- CxB is the number of independent blocks a file was splitted
Packit Service 5195f2
- MB/s is the speed measured in 1,000,000 uncompressed bytes per second
Packit Service 5195f2
- all averages are calculated from the un-rounded values
Packit Service 5195f2
- the average ratio & bits are calculated by the arithmetic mean
Packit Service 5195f2
- the average speed is calculated by the harmonic mean
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
EndOfString
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
__END__
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
### insert something like this after 'Time of run':
Packit Service 5195f2
Packit Service 5195f2
| Hardware         : Intel Pentium 133, 64 MB RAM, 256 kB Cache          |
Packit Service 5195f2
| Operating system : MS-DOS 7.10, HIMEM.SYS 3.95, DOS/4GW 1.97           |
Packit Service 5195f2
| Compiler         : Watcom C32 10.5                                     |
Packit Service 5195f2
| Compiler flags   : -mf -5r -oneatx                                     |
Packit Service 5195f2
| Test suite       : Calgary Corpus Suite                                |
Packit Service 5195f2
| Files in suite   : 14                                                  |
Packit Service 5195f2
| Timing accuracy  : One part in 100                                     |
Packit Service 5195f2
Packit Service 5195f2