Commit Description:
Add timers for Simulation and various engines...
Commit Description:
Add timers for Simulation and various engines Starting to add additional timers for different stages of the process of updating in order to get more insight into what is slowing it down. The update takes 9ms, which is much longer than it used to. Engine-specific timers are coming later.
File last commit:
Show/Diff file:
Action:
FNA/lib/MojoShader/unit_tests/run_tests.pl
192 lines | 5.0 KiB | text/plain | PerlLexer
#!/usr/bin/perl -w
use warnings;
use strict;
use Digest::SHA1;
use Cwd;
use FindBin qw($Bin);
my $testdir = $Bin;
undef $Bin;
#print("testdir is $testdir\n");
my $binpath = getcwd();
#print("binpath is $binpath\n");
my $GPrintCmds = 0;
my @modules = qw( preprocessor assembler compiler parser );
sub compare_files {
my ($a, $b, $endlines) = @_;
if (not open(FILE1, '<', $a)) {
return (0, "Couldn't open '$a' for checksum");
}
if (not open(FILE2, '<', $b)) {
close(FILE1);
return (0, "Couldn't open '$b' for checksum");
}
my $sha1 = Digest::SHA1->new;
my $sha2 = Digest::SHA1->new;
if (not $endlines) {
$sha1->addfile(*FILE1);
$sha2->addfile(*FILE2);
} else {
while (<FILE1>) { s/[\r\n]//g; $sha1->add($_); }
while (<FILE2>) { s/[\r\n]//g; $sha2->add($_); }
}
close(FILE1);
close(FILE2);
if ($sha1->hexdigest ne $sha2->hexdigest) {
return (0, "Result doesn't match expectations");
}
return (1);
}
my %tests = ();
$tests{'output'} = sub {
my ($module, $fname) = @_;
my $output = 'unittest_tempoutput';
my $desired = $fname . '.correct';
my $cmd = undef;
my $endlines = 1;
# !!! FIXME: this should go elsewhere.
if ($module eq 'preprocessor') {
$cmd = "$binpath/mojoshader-compiler -P '$fname' -o '$output'";
} else {
return (0, "Don't know how to do this module type");
}
$cmd .= ' 2>/dev/null 1>/dev/null';
print("$cmd\n") if ($GPrintCmds);
if (system($cmd) != 0) {
unlink($output) if (-f $output);
return (0, "External program reported error");
}
if (not -f $output) { return (0, "Didn't get any output file"); }
my @retval = compare_files($desired, $output, $endlines);
unlink($output);
return @retval;
};
$tests{'errors'} = sub {
my ($module, $fname) = @_;
my $error_output = 'unittest_temperroutput';
my $output = 'unittest_tempoutput';
my $desired = $fname . '.correct';
my $cmd = undef;
my $endlines = 1;
# !!! FIXME: this should go elsewhere.
if ($module eq 'preprocessor') {
$cmd = "$binpath/mojoshader-compiler -P '$fname' -o '$output'";
} else {
return (0, "Don't know how to do this module type");
}
$cmd .= " 2>$error_output 1>/dev/null";
print("$cmd\n") if ($GPrintCmds);
system($cmd);
unlink($output) if (-f $output);
if (not -f $error_output) { return (0, "Didn't get any error output"); }
my @retval = compare_files($desired, $error_output, $endlines);
unlink($error_output);
return @retval;
};
my $totaltests = 0;
my $pass = 0;
my $fail = 0;
my $skip = 0;
my @fails = ();
my $result = '';
chdir($testdir) or die("Failed to chdir('$testdir'): $!\n");
foreach (@modules) {
my $module = $_;
foreach (keys %tests) {
my $testtype = $_;
my $fn = $tests{$_};
my $d = "$module/$testtype";
next if (not -d $d); # no tests at the moment.
opendir(TESTDIR, $d) || die("Failed to open dir '$d': $!\n");
my $subsection = " ... $module / $testtype ...\n";
print($subsection);
my $addedsubsection = 0;
my $fname = readdir(TESTDIR);
while (defined $fname) {
my $isfail = 0;
my $origfname = $fname;
$fname = readdir(TESTDIR); # set for next iteration.
next if (-d $origfname);
next if ($origfname =~ /\.correct\Z/);
my $fullfname = "$d/$origfname";
my ($rc, $reason) = &$fn($module, $fullfname);
if ($rc == 1) {
$result = 'PASS';
$pass++;
} elsif ($rc == 0) {
$isfail = 1;
$result = 'FAIL';
$fail++;
} elsif ($rc == -1) {
$result = 'SKIP';
$skip++;
}
if (defined $reason) {
$reason = " ($reason)";
} else {
$reason = '';
}
my $output = "$result ${origfname}${reason}\n";
print($output);
if ($isfail) {
if (!$addedsubsection) {
$addedsubsection = 1;
push(@fails, $subsection);
}
push(@fails, $output);
}
$totaltests++;
}
closedir(TESTDIR);
}
}
if (scalar(@fails)) {
print("\n\n");
print("*************************************************************\n");
print("*************************************************************\n");
print("** SOME TESTS FAILED! PLEASE CORRECT THE FOLLOWING ISSUES. **\n");
print("*************************************************************\n");
print("*************************************************************\n");
print("\n");
foreach (@fails) {
print $_;
}
print("\n\n");
}
print("\n$totaltests tests, $pass passed, $fail failed, $skip skipped.\n\n");
exit(($fail > 0) ? 1 : 0);
# end if run_tests.pl ...