#!/usr/bin/perl use strict; use warnings; use diagnostics; #use FileHandle; #use IPC::Open2; # colours for output our $norm = ""; #our $bold = ""; our $green = ""; our $red = ""; #our $yellow = ""; our $tests = 0; our $test_input; our $expected_result; sub read_input() { my $text = ""; while (<>) { last if /^RESULT:/; $text .= $_; } return $text; } sub read_expected() { my $expected_result = <>; # strip begining whitespace $expected_result =~ s/^\s+//; # strip trailing whitespace $expected_result =~ s/\s+$//; return $expected_result; } our $basic_prog = "../type_check_test"; our $prog = $basic_prog; while (<>) { if (/^OPTIONS:(.*)/) { $prog = "$basic_prog $1"; } if (/^TEST:/) { $test_input = read_input; $expected_result = read_expected; if ($expected_result eq "success") { open (TYPECHECK, "| $prog"); print TYPECHECK $test_input; } elsif ($expected_result eq "undefined") { open (TYPECHECK, "| $prog -u"); print TYPECHECK $test_input; } elsif ($expected_result eq "redefinition") { open (TYPECHECK, "| $prog -r"); print TYPECHECK $test_input; } elsif ($expected_result eq "wrong") { open (TYPECHECK, "| $prog -t"); print TYPECHECK $test_input; } elsif ($expected_result eq "builtin") { open (TYPECHECK, "| $prog -b"); print TYPECHECK $test_input; } else { print "Unknown expected result: \"$expected_result\"\n"; next; } my $result = close (TYPECHECK); if (! $result) { print "\t[${red}FAILURE${norm}] in test $tests :\n$test_input\n"; exit(1); } $tests++; } } print "\t\t\t\t[${green}SUCCESS${norm}]\n";