3 # Run tests in parallel. This just allows you to check that your tests
4 # are roughly capable of running in parallel. It writes output to a
6 # From: Eric Wilhelm @ ewilhelm at cpan.org
11 use File::Basename ();
17 #@tests = List::Util::shuffle(@tests);
24 my $jobs = 9; # scalar(@tests); # if you like forkbombs
28 if ( $jobs == @running ) {
30 while ( my $pid = shift(@running) ) {
31 if ( waitpid( $pid, POSIX::WNOHANG() ) > 0 ) {
32 warn ' ' x 25 . "done $map{$pid}\n";
38 #warn "running ", scalar(@list);
42 my $test = shift(@tests);
43 defined( my $pid = fork ) or die;
46 push( @running, $pid );
51 my $dest_base = '/tmp';
52 my $dest_dir = File::Basename::dirname("$dest_base/$test");
53 unless ( -d $dest_dir ) {
54 File::Path::mkpath($dest_dir) or die;
58 open( STDOUT, '>', "$dest_base/$test.out" ) or die;
59 open( STDERR, '>', "$dest_base/$test.err" ) or die;
60 exec( $^X, '-Ilib', $test );
67 ( $v == -1 ) and last;
68 $? and warn "$map{$v} ($v) no happy $?";
72 # vim:ts=2:sw=2:et:sta