citrun

watch C/C++ source code execute
Log | Files | Refs | LICENSE

commit 3f6e3e00aeac9d5dab634436750b13888704f891
parent 41bc0d5009b2b57bc61cd02688efca9498bdedb9
Author: Kyle Milz <kyle@0x30.net>
Date:   Fri,  1 Jul 2016 13:49:09 -0600

tt: factor out report generation into Test::Report

Diffstat:
MTest/Package.pm | 6++++++
ATest/Report.pm | 61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtt/libressl.t | 57++++++++++++++++-----------------------------------------
Mtt/mutt.t | 52++++++++++++----------------------------------------
Mtt/vim.t | 59++++++++++++++++++-----------------------------------------
5 files changed, 113 insertions(+), 122 deletions(-)

diff --git a/Test/Package.pm b/Test/Package.pm @@ -12,6 +12,7 @@ sub new { bless($self, $class); return $self if (! defined ($dist_name)); + $self->{dist_name} = $dist_name; # Create temporary directory for the contents of this package. my $dir = tempdir( CLEANUP => 1 ); @@ -32,6 +33,11 @@ sub new { return $self; } +sub dist_name { + my ($self) = @_; + return $self->{dist_name}; +} + sub set_srcdir { my ($self, $srcdir) = @_; $self->{srcdir} = $self->{dir} . $srcdir; diff --git a/Test/Report.pm b/Test/Report.pm @@ -0,0 +1,61 @@ +package Test::Report; +use strict; + +use List::MoreUtils qw( each_array ); + +sub new { + my ($class, $name) = @_; + + my $self = {}; + bless($self, $class); + + $self->{name} = $name; + $self->{desc} = []; + $self->{vanilla} = []; + $self->{citrun} = []; + + return $self; +} + +sub add { + my ($self, $field, $desc) = @_; + + push @{ $self->{$field} }, ($desc); +} + +sub DESTROY { + my ($self) = @_; + + my @diff; + my @desc = @{ $self->{desc} }; + my @vanilla = @{ $self->{vanilla} }; + my @citrun = @{ $self->{citrun} }; + + my $it = each_array( @vanilla, @citrun ); + while ( my ($x, $y) = $it->() ) { + push @diff, $y * 100.0 / $x - 100.0; + } + + open (E2E_REPORT, ">>", "e2e_report.txt") or die "$!"; + + format E2E_REPORT = +@>>>>>>>>>>>>>>>>>>>> +$self->{name} +====================== +# @<<<<<<<<<<<<<<<<<<< @##.## +# "60 data calls (s):", $data_call_dur +# @<<<<<<<<<<<<<<<<<<< @##### +# "tests ok:", $num_tests + @>>>>>>>>> @>>>>>>>>> @>>>>>>> +"vanilla", "citrun", "diff (%)" + --------------------------------------------------------------------- + @<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>>>>>> @>>>>>>>>> @>>>> ~~ +shift(@desc), shift(@vanilla), shift(@citrun), shift(@diff) + +. + + write E2E_REPORT; + close E2E_REPORT; +} + +1; diff --git a/tt/libressl.t b/tt/libressl.t @@ -2,45 +2,46 @@ use strict; use warnings; use Expect; -use List::MoreUtils qw ( each_array ); use Test::More; -use Time::HiRes qw( time ); my $num_tests = 2550; $num_tests = 2530 if ($^O eq "darwin"); plan tests => $num_tests; use Test::Package; +use Test::Report; use Test::Viewer; # Download: LibreSSL 2.4.1 from ftp.openbsd.org. my $libressl_url = "http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/"; my $package = Test::Package->new("libressl-2.4.1.tar.gz", $libressl_url, "tar xzf"); - -# Dependencies. $package->dependencies("citrun"); -my (@vanilla, @citrun); -my @desc = ("configure time (sec)", "compile time (sec)", "openssl size (b)", - "libcrypto.a size (b)"); + +# New end to end report. +my $report = Test::Report->new($package->dist_name()); +$report->add("desc", "configure time (sec)"); +$report->add("desc", "compile time (sec)"); +$report->add("desc", "openssl size (b)"); +$report->add("desc", "libcrypto.a size (b)"); my $srcdir = $package->set_srcdir("/libressl-2.4.1"); # Vanilla configure and compile. -$vanilla[0] = $package->configure("./configure"); -$vanilla[1] = $package->compile("make -j8"); +$report->add("vanilla", $package->configure("./configure")); +$report->add("vanilla", $package->compile("make -j8")); -$vanilla[2] = $package->get_file_size("/apps/openssl/.libs/openssl"); -$vanilla[3] = $package->get_file_size("/crypto/.libs/libcrypto.a"); +$report->add("vanilla", $package->get_file_size("/apps/openssl/.libs/openssl")); +$report->add("vanilla", $package->get_file_size("/crypto/.libs/libcrypto.a")); # Reset. $package->clean("make distclean" ); # Instrumented configure and compile. -$citrun[0] = $package->inst_configure(); -$citrun[1] = $package->inst_compile(); +$report->add("citrun", $package->inst_configure()); +$report->add("citrun", $package->inst_compile()); -$citrun[2] = $package->get_file_size("/apps/openssl/.libs/openssl"); -$citrun[3] = $package->get_file_size("/crypto/.libs/libcrypto.a"); +$report->add("citrun", $package->get_file_size("/apps/openssl/.libs/openssl")); +$report->add("citrun", $package->get_file_size("/crypto/.libs/libcrypto.a")); # Verify: 'openssl' binary has working instrumentation. my $viewer = Test::Viewer->new(); @@ -705,29 +706,3 @@ for (1..60) { } $exp->hard_close(); - -my @diff; -my $it = each_array( @vanilla, @citrun ); -while ( my ($x, $y) = $it->() ) { - push @diff, $y * 100.0 / $x - 100.0; -} - -# Write report. -# -format STDOUT = - -LIBRESSL E2E REPORT -=================== - -SCALAR COMPARISONS - @>>>>>>>>> @>>>>>>>>> @>>>>>>> -"vanilla", "citrun", "diff (%)" - --------------------------------------------------------------------- -~~ @<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>>>>>> @>>>>>>>>> @>>>>>>> -shift(@desc), shift(@vanilla), shift(@citrun), shift(@diff) - -DIFF COMPARISONS - -. - -write; diff --git a/tt/mutt.t b/tt/mutt.t @@ -2,7 +2,6 @@ use strict; use warnings; use Expect; -use List::MoreUtils qw( each_array ); use Test::More; use Time::HiRes qw( time ); @@ -11,6 +10,7 @@ $num_tests = 342 if ($^O ne "darwin"); plan tests => $num_tests; use Test::Package; +use Test::Report; use Test::Viewer; # Download: Mutt 1.6.1, depends on nothing (?). @@ -18,25 +18,28 @@ my $mutt_url = "ftp://ftp.mutt.org/pub/mutt/"; my $package = Test::Package->new("mutt-1.6.1.tar.gz", $mutt_url, "tar xzf"); $package->dependencies("citrun"); -my @desc = ("configure time (sec)", "compile time (sec)", "mutt size (b)"); -my (@vanilla, @citrun); +# New end to end report. +my $report = Test::Report->new($package->dist_name()); +$report->add("desc", "configure time (sec)"); +$report->add("desc", "compile time (sec)"); +$report->add("desc", "mutt size (b)"); my $srcdir = $package->set_srcdir("/mutt-1.6.1"); # Vanilla configure and compile. -$vanilla[0] = $package->configure("./configure --disable-pgp --disable-smime --disable-nls --disable-iconv"); -$vanilla[1] = $package->compile("make -j8 all"); +$report->add("vanilla", $package->configure("./configure --disable-pgp --disable-smime --disable-nls --disable-iconv")); +$report->add("vanilla", $package->compile("make -j8 all")); -$vanilla[2] = $package->get_file_size("/mutt"); +$report->add("vanilla", $package->get_file_size("/mutt")); # Clean up before rebuild. $package->clean("make distclean"); # Instrumented configure and compile. -$citrun[0] = $package->inst_configure(); -$citrun[1] = $package->inst_compile(); +$report->add("citrun", $package->inst_configure()); +$report->add("citrun", $package->inst_compile()); -$citrun[2] = $package->get_file_size("/mutt"); +$report->add("citrun", $package->get_file_size("/mutt")); # Verify: instrumented data structures are consistent. my $viewer = Test::Viewer->new(); @@ -140,34 +143,3 @@ for (1..60) { my $data_call_dur = time - $start; $exp->hard_close(); - - -# Write report. -# - -my @diff; -my $it = each_array( @vanilla, @citrun ); -while ( my ($x, $y) = $it->() ) { - push @diff, $y * 100.0 / $x - 100.0; -} - -format STDOUT = - -MUTT E2E REPORT -=============== - - @<<<<<<<<<<<<<< @##.## sec -"60 data calls:", $data_call_dur - -SCALAR COMPARISONS - @>>>>>>>>> @>>>>>>>>> @>>>>>>> -"vanilla", "citrun", "diff (%)" - --------------------------------------------------------------------- -~~ @<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>>>>>> @>>>>>>>>> @>>>>>>> -shift(@desc), shift(@vanilla), shift(@citrun), shift(@diff) - -DIFF COMPARISONS - -. - -write; diff --git a/tt/vim.t b/tt/vim.t @@ -3,7 +3,6 @@ use warnings; use Cwd; use Expect; -use List::MoreUtils qw( each_array ); use Test::More; use Time::HiRes qw( time ); @@ -12,6 +11,7 @@ $num_tests = 333 if ($^O eq "darwin"); plan tests => $num_tests; use Test::Package; +use Test::Report; use Test::Viewer; # Download: Vim 7.4. @@ -27,10 +27,13 @@ sub time_expect { return time - $start; } -my @scalar_desc = ("configure time (sec)", "compile time (sec)", "vim size (b)", - "xxd size (b)", "test time (sec)"); -my @scalar_vanilla; -my @scalar_citrun; +# New end to end report. +my $report = Test::Report->new($package->dist_name()); +$report->add("desc", "configure time (sec)"); +$report->add("desc", "compile time (sec)"); +$report->add("desc", "vim size (b)"); +$report->add("desc", "xxd size (b)"); +$report->add("desc", "test time (sec)"); my $srcdir = $package->set_srcdir("/vim74/src"); @@ -39,28 +42,28 @@ my $cwd = getcwd; $package->patch("patch -p2 < $cwd/tt/patches/vim_osx.diff") if ($^O eq "darwin"); # Vanilla configure and compile. -$scalar_vanilla[0] = $package->configure("./configure --enable-gui=no"); -$scalar_vanilla[1] = $package->compile("make -j8 all"); +$report->add("vanilla", $package->configure("./configure --enable-gui=no")); +$report->add("vanilla", $package->compile("make -j8 all")); -$scalar_vanilla[2] = $package->get_file_size("/vim"); -$scalar_vanilla[3] = $package->get_file_size("/xxd/xxd"); +$report->add("vanilla", $package->get_file_size("/vim")); +$report->add("vanilla", $package->get_file_size("/xxd/xxd")); #$package->copy_file("auto/config.log", "config.log.vanilla"); # Vanilla test. -$scalar_vanilla[4] = time_expect("make", "-C", "$srcdir/testdir"); +$report->add("vanilla", time_expect("make", "-C", "$srcdir/testdir")); # Clean up before rebuild. $package->clean("make distclean"); # Instrumented configure and compile. -$scalar_citrun[0] = $package->inst_configure(); -$scalar_citrun[1] = $package->inst_compile(); +$report->add("citrun", $package->inst_configure()); +$report->add("citrun", $package->inst_compile()); -$scalar_citrun[2] = $package->get_file_size("/vim"); -$scalar_citrun[3] = $package->get_file_size("/xxd/xxd"); +$report->add("citrun", $package->get_file_size("/vim")); +$report->add("citrun", $package->get_file_size("/xxd/xxd")); # Instrumented test. -$scalar_citrun[4] = time_expect("make", "-C", "$srcdir/testdir"); +$report->add("citrun", time_expect("make", "-C", "$srcdir/testdir")); # Verify: instrumented data structures are consistent. my $viewer = Test::Viewer->new(); @@ -166,29 +169,3 @@ for (1..60) { } $exp->hard_close(); - -my @scalar_diff; -my $it = each_array( @scalar_vanilla, @scalar_citrun ); -while ( my ($x, $y) = $it->() ) { - push @scalar_diff, $y * 100.0 / $x - 100.0; -} - -# Write report. -# -format STDOUT = - -VIM E2E REPORT -============== - -SCALAR COMPARISONS - @>>>>>>>>> @>>>>>>>>> @>>>>>>> -"vanilla", "citrun", "diff (%)" - --------------------------------------------------------------------- -~~ @<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>>>>>> @>>>>>>>>> @>>>> -shift(@scalar_desc), shift(@scalar_vanilla), shift(@scalar_citrun), shift(@scalar_diff) - -DIFF COMPARISONS - -. - -write;