Add Julia
[gruntmaster-daemon.git] / t / 01-jobs.t
CommitLineData
5c5cd38a
MG
1#!/usr/bin/perl -w
2use v5.14;
3use strict;
4use warnings;
5
6use Gruntmaster::Daemon;
7
fe29da7c 8use Cwd qw/getcwd/;
10c4f6f5
MG
9use File::Basename qw/fileparse/;
10use File::Slurp qw/read_file/;
5c5cd38a 11use File::Temp qw/tempdir/;
b8f7001a 12use File::Which qw/which/;
7be5f054 13use Hash::Merge qw/merge/;
5c5cd38a
MG
14use List::Util qw/sum/;
15use Log::Log4perl;
16use Test::More;
64871a33 17use YAML::Tiny qw/LoadFile/;
5c5cd38a
MG
18
19##################################################
20
b8f7001a
MG
21use constant COMPILER => {
22 qw/C gcc
23 CPP g++
f8b954a9 24 GOLFSCRIPT golfscript
b8f7001a
MG
25 MONO gmcs
26 JAVA javac
6d1f2d94 27 JULIA julia
b8f7001a
MG
28 PASCAL fpc
29 GOLANG go
30 GCCGO gccgo
31 HASKELL ghc
32 PERL perl
c88da74d 33 PYTHON python
cd0623f0 34 RUBY ruby
27be8560 35 RUST rustc
c88da74d 36 SBCL sbcl/};
b8f7001a 37
6d1f2d94 38my %needs_fork = map { $_ => 1 } qw/GOLANG GOLFSCRIPT GCCGO JAVA JULIA RUBY/;
f8b954a9 39
d5200925 40my $loglevel = $ENV{TEST_LOG_LEVEL} // ($ENV{TEST_VERBOSE} ? 'TRACE' : 'OFF');
5c5cd38a
MG
41my $log_conf = <<CONF;
42log4perl.category.Gruntmaster.Daemon = $loglevel, stderr
43
44log4perl.appender.stderr = Log::Log4perl::Appender::Screen
45log4perl.appender.stderr.layout = Log::Log4perl::Layout::PatternLayout
46log4perl.appender.stderr.layout.ConversionPattern = [\%d] [\%F{1}:\%M{1}:\%L] [\%p] \%m\%n
47CONF
48Log::Log4perl->init(\$log_conf);
49
fe29da7c 50$ENV{PATH} = getcwd . ':' . $ENV{PATH};
436deb11 51umask 0022;
da905f9e 52
5c5cd38a 53sub check_job{
7be5f054 54 my $meta = shift;
197cd6a3 55 if (defined $meta->{results}) {
56187177 56 delete $meta->{results}[$_]{time} for keys @{$meta->{results}};
197cd6a3 57 }
ee638edb
MG
58 my $desc = $meta->{name} . ': ' . $meta->{test_name};
59 is $meta->{result}, $meta->{expected_result}, "Result is correct ($desc)";
60 is $meta->{result_text}, $meta->{expected_result_text}, "Result text is correct ($desc)";
61 is_deeply $meta->{results}, $meta->{expected_results}, "Results are correct ($desc)";
5c5cd38a
MG
62}
63
64my @problems = exists $ENV{TEST_PROBLEMS} ? map {"t/problems/$_"} split ' ', $ENV{TEST_PROBLEMS} : <t/problems/*>;
b8f7001a
MG
65@problems = grep { $_ !~ /hello/ } @problems unless $ENV{RELEASE_TESTING} || $ENV{TEST_PROBLEMS};
66
5c5cd38a
MG
67plan tests => 3 * sum map { my @temp = <$_/tests/*>; scalar @temp } @problems;
68note "Problems to be tested: " . join ', ', @problems;
69
23b3dc5a 70my $tempdir = tempdir "gruntmasterd-testingXXXX", TMPDIR => 1, CLEANUP => 1;
f028e0a8 71chmod 0777, $tempdir;
10c4f6f5
MG
72
73my $job = 0;
5c5cd38a
MG
74
75for my $problem (@problems) {
7be5f054
MG
76 my $pbmeta = LoadFile "$problem/meta.yml";
77 for (1 .. $pbmeta->{testcnt}) {
78 $pbmeta->{infile}[$_ - 1] = read_file "$problem/$_.in" if $pbmeta->{generator} eq 'File';
00a45f89 79 $pbmeta->{okfile}[$_ - 1] = read_file "$problem/$_.ok" if $pbmeta->{runner} && $pbmeta->{runner} eq 'File';
197cd6a3 80 }
7be5f054 81 if (exists $pbmeta->{files}) {
759d3ca5 82 $_->{content} = read_file "$problem/$_->{name}" for values %{$pbmeta->{files}}
197cd6a3 83 }
10c4f6f5 84
197cd6a3 85 TODO: {
7be5f054 86 note "Now testing problem $pbmeta->{name} ($pbmeta->{description})";
10c4f6f5 87
197cd6a3 88 for my $source (<$problem/tests/*>) {
b8f7001a
MG
89 SKIP: {
90 my $meta = LoadFile "$source/meta.yml";
fcfcfb93 91 if ($meta->{files}{prog}) {
fd807ac9
MG
92 my $format = $meta->{files}{prog}{format};
93 my $compiler = COMPILER->{$format};
fcfcfb93 94 skip "$compiler not found in path", 3 unless $ENV{GRUNTMASTER_VM} || which $compiler;
f8b954a9 95 skip "$format requires multiple processes. Set GRUNTMASTER_KILL_USER and GRUNTMASTER_SUDO to allow multiple processes.", 3 if !$ENV{GRUNTMASTER_KILL_USER} && $needs_fork{$format};
fcfcfb93
MG
96 $meta->{files}{prog}{content} = read_file "$source/$meta->{files}{prog}{name}";
97 }
b8f7001a 98 $meta = merge $meta, $pbmeta;
fd807ac9 99 local $TODO = $meta->{todo} if exists $meta->{todo};
b8f7001a 100 note "Running $meta->{test_name} ($meta->{test_description})...";
fe29da7c 101 my $savedcwd = getcwd;
b8f7001a
MG
102 chdir $tempdir;
103 Gruntmaster::Daemon::process $meta;
104 chdir $savedcwd;
105 check_job $meta;
106 }
197cd6a3 107 }
5c5cd38a 108 }
5c5cd38a 109}
This page took 0.023903 seconds and 4 git commands to generate.