#!/usr/bin/env perl #use Smart::Comments; use strict; use warnings; use YAML::Syck; use File::Copy; use List::Util 'sum'; my $cur_file = 't/cur-timer.dat'; my $hist_file = 't/last-timer.dat'; my $cmd = shift || ''; if ($cmd && $cmd ne 'update_hist') { die "Command $cmd not recognized.\n"; } if (!-f $cur_file) { die "No $cur_file found. run 'make test' first?\n"; } if ($cmd eq 'update_hist' or !-f $hist_file) { copy($cur_file, $hist_file); } my $cur_data = LoadFile($cur_file); ### $cur_data my $hist_data = LoadFile($hist_file); sub faster ($$); sub mean (@); while (my ($key, $val) = each %$cur_data) { ### $key ### $val my $len = @$val; my $mean = mean(@$val); my $hist_val = $hist_data->{$key}; my $hist_mean = mean(@$hist_val); my $percent = faster($mean, $hist_mean); my $arrow; if ($percent > 0) { $arrow = "FASTER++" } elsif ($percent < 0) { $arrow = "SLOWER--" } else { $arrow = "" } if ($mean < 1) { $mean = sprintf("%.02d ms", $mean * 1000); } else { $mean = sprintf("%.02d s", $mean); } $mean =~ s/^0+//g; print "$key: $mean ($len trials) $percent\% $arrow\n"; } sub faster ($$) { my ($new, $old) = @_; my $delta = 1/$new - 1/$old; int ($delta / (1/$old) * 100); } sub mean (@) { my $sum = sum(@_); $sum/@_; }