citrun

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

commit 95d8099d1e53eda8464b362550b92e659f7bdb01
parent 7c6e5b2578dc40bb689c2723751edf326fa4b3a0
Author: Kyle Milz <kyle@0x30.net>
Date:   Thu, 30 Jun 2016 18:10:36 -0600

tt: try adding mutt again

Diffstat:
MTest/Viewer.pm | 3++-
Att/mutt.t | 169+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 171 insertions(+), 1 deletion(-)

diff --git a/Test/Viewer.pm b/Test/Viewer.pm @@ -102,7 +102,8 @@ sub cmp_static_data { # http://stackoverflow.com/questions/822563/how-can-i-iterate-over-multiple-lists-at-the-same-time-in-perl my $it = each_array( @$known_good, @sorted_tus ); while ( my ($x, $y) = $it->() ) { - next if ($x->[0] eq "if_xcmdsrv.c"); + # For Vim and Mutt respectively. + next if ($x->[0] eq "if_xcmdsrv.c" || $x->[0] eq "/conststrings.c"); like( $y->[0], qr/.*$x->[0]/, "$x->[0]: filename check" ); is ( $y->[1], $x->[1], "$x->[0]: total lines check" ); diff --git a/tt/mutt.t b/tt/mutt.t @@ -0,0 +1,169 @@ +use strict; +use warnings; + +use Expect; +use List::MoreUtils qw( each_array ); +use Test::More; +use Time::HiRes qw( time ); + +my $num_tests = 279; +$num_tests = 283 if ($^O ne "darwin"); +plan tests => $num_tests; + +use Test::Package; +use Test::Viewer; + +# Download: Mutt 1.6.1, depends on nothing (?). +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); + +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"); + +$vanilla[2] = $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(); + +$citrun[2] = $package->get_file_size("/mutt"); + +# Verify: instrumented data structures are consistent. +my $viewer = Test::Viewer->new(); +my $exp = Expect->spawn("$srcdir/mutt"); + +my @known_good = ( + # file name lines instrumented sites + [ "/addrbook.c", 246, 102 ], + [ "/alias.c", 658, 266 ], + [ "/ascii.c", 107, 42 ], + [ "/attach.c", 1043, 454 ], + [ "/base64.c", 123, 42 ], + [ "/browser.c", 1267, 342 ], + [ "/buffy.c", 629, 234 ], + [ "/charset.c", 680, 179 ], + [ "/color.c", 824, 260 ], + [ "/commands.c", 1018, 358 ], + [ "/complete.c", 199, 70 ], + [ "/compose.c", 1345, 375 ], + [ "/conststrings.c", 47, 0 ], + [ "/copy.c", 962, 403 ], + [ "/crypt-mod.c", 59, 32 ], + [ "/crypt.c", 1121, 461 ], + [ "/cryptglue.c", 396, 100 ], + [ "/curs_lib.c", 1046, 323 ], + [ "/curs_main.c", 2349, 545 ], + [ "/date.c", 191, 59 ], + [ "/edit.c", 491, 212 ], + [ "/editmsg.c", 235, 97 ], + [ "/enter.c", 772, 267 ], + [ "/filter.c", 184, 103 ], + [ "/flags.c", 384, 129 ], + [ "/from.c", 199, 138 ], + [ "/getdomain.c", 70, 40 ], + [ "/group.c", 209, 117 ], + [ "/handler.c", 1845, 612 ], + [ "/hash.c", 179, 83 ], + [ "/hdrline.c", 764, 313 ], + [ "/headers.c", 214, 124 ], + [ "/help.c", 380, 187 ], + [ "/history.c", 320, 122 ], + [ "/hook.c", 545, 186 ], + [ "/init.c", 3285, 1120 ], + [ "/keymap.c", 1146, 387 ], + [ "/lib.c", 1086, 360 ], + [ "/main.c", 1225, 353 ], + [ "/mbox.c", 1269, 446 ], + [ "/mbyte.c", 569, 68 ], + [ "/menu.c", 1082, 273 ], + [ "/mh.c", 2351, 726 ], + [ "/muttlib.c", 1958, 555 ], + [ "/mx.c", 1629, 455 ], + [ "/pager.c", 2817, 631 ], + [ "/parse.c", 1648, 588 ], + [ "/patchlist.c", 12, 28 ], + [ "/pattern.c", 1546, 549 ], + [ "/postpone.c", 748, 232 ], + [ "/query.c", 543, 223 ], + [ "/recvattach.c", 1274, 428 ], + [ "/recvcmd.c", 950, 297 ], + [ "/resize.c", 80, 47 ], + [ "/rfc1524.c", 594, 203 ], + [ "/rfc2047.c", 924, 315 ], + [ "/rfc2231.c", 384, 136 ], + [ "/rfc3676.c", 390, 140 ], + [ "/rfc822.c", 919, 245 ], + [ "/safe_asprintf.c", 96, 35 ], + [ "/score.c", 196, 74 ], + [ "/send.c", 1953, 660 ], + [ "/sendlib.c", 2890, 972 ], + [ "/signal.c", 254, 85 ], + [ "/sort.c", 343, 133 ], + [ "/status.c", 309, 148 ], + [ "/system.c", 142, 65 ], + [ "/thread.c", 1431, 386 ], + [ "/url.c", 325, 164 ], +); + +if ($^O ne "darwin") { + my $to_insert = [ "/dotlock.c", 759, 139 ]; + + for my $i (0..(scalar @known_good - 1)) { + next if ($known_good[$i]->[0] lt $to_insert->[0]); + + splice @known_good, $i, 0, ($to_insert); + last; + } +} + +$viewer->accept(); +is( $viewer->{num_tus}, scalar @known_good, "translation unit count" ); + +$viewer->cmp_static_data(\@known_good); + +my $start = time; +$viewer->get_dynamic_data() 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;