citrun

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

commit 2b10b7d8747418ed0f97427d047167b4dc0012e6
parent 135187172b1923a490a18c5a0f566d36d3e31054
Author: Kyle Milz <kyle@0x30.net>
Date:   Sun,  8 Jan 2017 03:21:36 -0700

t: replace wrap_parallel.sh with perl

Diffstat:
Dt/wrap_parallel.sh | 50--------------------------------------------------
At/wrap_parallel.t | 61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 61 insertions(+), 50 deletions(-)

diff --git a/t/wrap_parallel.sh b/t/wrap_parallel.sh @@ -1,50 +0,0 @@ -#!/bin/sh -u -# -# Test that wrapping the 'make' build system produces instrumented binaries. -# -. t/utils.subr -plan 12 - -empty_main -cp main.c main1.c -cp main.c main2.c -cp main.c main3.c -cp main.c main4.c - -cat <<EOF > Makefile -all: program1 program2 program3 program4 - -program1: main1.o - cc -o program1 main1.o -program2: main2.o - cc -o program2 main2.o -program3: main3.o - cc -o program3 main3.o -program4: main4.o - cc -o program4 main4.o -EOF - -ok "is instrumented make -j4 successful" make -j4 -ok "is citrun_check successful" citrun_check -o check.out - -cat <<EOF > check.good -Summary: - 4 Source files used as input - 4 Application link commands - 4 Rewrite successes - 4 Rewritten source compile successes - -Totals: - 24 Lines of source code - 4 Function definitions - 4 Return statement values - 12 Total statements -EOF - -strip_millis check.out -ok "is citrun_check output identical" diff -u check.good check.out - -for i in 1 2 3 4; do - ok "is program$i execution successful" ./program$i - ok "is program$i runtime memory file created" test -f procdir/program${i}_* -done diff --git a/t/wrap_parallel.t b/t/wrap_parallel.t @@ -0,0 +1,61 @@ +# +# Check that calling citrun_inst in parallel doesn't cause any obviously bad +# things to happen. +# +use strict; +use warnings; +use File::Which; +use t::utils; +plan skip_all => 'make not found' unless (which 'make'); +plan tests => 15; + + +my $wrap = Test::Cmd->new( prog => 'citrun_wrap', workdir => '' ); + +$wrap->write( 'main1.c', 'int main(void) { return 0; }' ); +$wrap->write( 'main2.c', 'int main(void) { return 0; }' ); +$wrap->write( 'main3.c', 'int main(void) { return 0; }' ); +$wrap->write( 'main4.c', 'int main(void) { return 0; }' ); +$wrap->write( 'Makefile', <<'EOF' ); +all: program1 program2 program3 program4 + +program1: main1.o + cc -o program1 main1.o +program2: main2.o + cc -o program2 main2.o +program3: main3.o + cc -o program3 main3.o +program4: main4.o + cc -o program4 main4.o +EOF + +$wrap->run( args => 'make -j4', chdir => $wrap->curdir ); +print $wrap->stdout; +is( $wrap->stderr, '', 'is citrun_wrap make stderr silent' ); +is( $? >> 8, 0, 'is citrun_wrap make exit code 0' ); + +my $check_good = <<EOF; +Summary: + 4 Source files used as input + 4 Application link commands + 4 Rewrite successes + 4 Rewritten source compile successes + +Totals: + 4 Lines of source code + 4 Function definitions + 4 Return statement values + 12 Total statements +EOF + +$wrap->run( prog => 'citrun_check', chdir => $wrap->curdir ); +my $check_out = $wrap->stdout; +$check_out =~ s/^.*Milliseconds spent rewriting.*\n//gm; +eq_or_diff( $check_out, $check_good, 'is citrun_check stdout identical', { context => 3 } ); + +for (1..4) { + $wrap->run( prog => $wrap->workdir . "/program$_", chdir => $wrap->curdir ); + is( $wrap->stdout, '', "is instrumented program$_ stdout silent" ); + is( $wrap->stderr, '', "is instrumented program$_ stderr silent" ); + is( $? >> 8, 0, "is instrumented program$_ exit code 0" ); +}