diff options
Diffstat (limited to 'conform/conformtest.pl')
-rw-r--r-- | conform/conformtest.pl | 88 |
1 files changed, 61 insertions, 27 deletions
diff --git a/conform/conformtest.pl b/conform/conformtest.pl index 8d61016bbd..a8a27f5d2a 100644 --- a/conform/conformtest.pl +++ b/conform/conformtest.pl @@ -75,6 +75,17 @@ $verbose = 1; $total = 0; $skipped = 0; $errors = 0; +$xerrors = 0; + +sub note_error { + my($xfail) = @_; + if ($xfail) { + $xerrors++; + printf ("Ignoring this failure.\n"); + } else { + $errors++; + } +} sub poorfnmatch { @@ -107,7 +118,7 @@ sub poorfnmatch { sub compiletest { - my($fnamebase, $msg, $errmsg, $skip, $optional) = @_; + my($fnamebase, $msg, $errmsg, $skip, $optional, $xfail) = @_; my($result) = $skip; my($printlog) = 0; @@ -129,7 +140,7 @@ sub compiletest printf (" $errmsg Compiler message:\n"); $printlog = 1; } - ++$errors; + note_error($xfail); $result = 1; } } else { @@ -159,7 +170,7 @@ sub compiletest sub runtest { - my($fnamebase, $msg, $errmsg, $skip) = @_; + my($fnamebase, $msg, $errmsg, $skip, $xfail) = @_; my($result) = $skip; my($printlog) = 0; @@ -177,7 +188,7 @@ sub runtest printf (" $errmsg Compiler message:\n"); $printlog = 1; } - ++$errors; + note_error($xfail); $result = 1; } else { # Now run the program. If the exit code is not zero something is wrong. @@ -191,7 +202,7 @@ sub runtest } } else { printf (" FAIL\n"); - ++$errors; + note_error($xfail); $printlog = 1; unlink "$fnamebase.out"; rename "$fnamebase.out2", "$fnamebase.out"; @@ -328,11 +339,16 @@ while ($#headers >= 0) { close (TESTFILE); $missing = compiletest ($fnamebase, "Checking whether <$h> is available", - "Header <$h> not available", 0, 0); + "Header <$h> not available", 0, 0, 0); printf ("\n"); last control if ($missing); } + my($xfail) = 0; + if (/^xfail-/) { + s/^xfail-//; + $xfail = 1; + } my($optional) = 0; if (/^optional-/) { s/^optional-//; @@ -364,7 +380,7 @@ while ($#headers >= 0) { ($optional ? "NOT AVAILABLE." : "Member \"$member\" not available."), $res, - $optional); + $optional, $xfail); if ($res == 0 || $missing != 0 || !$optional) { # Test the types of the members. @@ -378,7 +394,7 @@ while ($#headers >= 0) { compiletest ($fnamebase, "Testing for type of member $member", "Member \"$member\" does not have the correct type.", - $res, 0); + $res, 0, $xfail); } } elsif (/^(macro|constant|macro-constant|macro-int-constant) +([a-zA-Z0-9_]*) *(?:{([^}]*)} *)?(?:([>=<!]+) ([A-Za-z0-9_\\'-]*))?/) { my($symbol_type) = $1; @@ -407,7 +423,7 @@ while ($#headers >= 0) { ($optional ? "NOT PRESENT" : "Macro \"$symbol\" is not available."), $res, - $optional); + $optional, $xfail); } if ($symbol_type =~ /constant/) { @@ -422,7 +438,7 @@ while ($#headers >= 0) { ($optional ? "NOT PRESENT" : "Constant \"$symbol\" not available."), $res, - $optional); + $optional, $xfail); } $res = $res || $mres || $cres; @@ -461,7 +477,7 @@ while ($#headers >= 0) { close (TESTFILE); runtest ($fnamebase, "Testing for #if usability of symbol $symbol", - "Symbol \"$symbol\" not usable in #if.", $res); + "Symbol \"$symbol\" not usable in #if.", $res, $xfail); } if (defined ($type) && ($res == 0 || !$optional)) { @@ -480,7 +496,7 @@ while ($#headers >= 0) { compiletest ($fnamebase, "Testing for type of symbol $symbol", "Symbol \"$symbol\" does not have the correct type.", - $res, 0); + $res, 0, $xfail); } if (defined ($op) && ($res == 0 || !$optional)) { @@ -493,7 +509,8 @@ while ($#headers >= 0) { close (TESTFILE); $res = runtest ($fnamebase, "Testing for value of symbol $symbol", - "Symbol \"$symbol\" has not the right value.", $res); + "Symbol \"$symbol\" has not the right value.", $res, + $xfail); } } elsif (/^symbol *([a-zA-Z0-9_]*) *([A-Za-z0-9_-]*)?/) { my($symbol) = $1; @@ -513,7 +530,7 @@ while ($#headers >= 0) { close (TESTFILE); $res = compiletest ($fnamebase, "Testing for symbol $symbol", - "Symbol \"$symbol\" not available.", $res, 0); + "Symbol \"$symbol\" not available.", $res, 0, $xfail); if ($value ne "") { # Generate a program to test for the value of this constant. @@ -524,7 +541,8 @@ while ($#headers >= 0) { close (TESTFILE); $res = runtest ($fnamebase, "Testing for value of symbol $symbol", - "Symbol \"$symbol\" has not the right value.", $res); + "Symbol \"$symbol\" has not the right value.", $res, + $xfail); } } elsif (/^type *({([^}]*)|([a-zA-Z0-9_]*))/) { my($type) = "$2$3"; @@ -554,7 +572,8 @@ while ($#headers >= 0) { compiletest ($fnamebase, "Testing for type $type", ($optional ? "NOT AVAILABLE" - : "Type \"$type\" not available."), $missing, $optional); + : "Type \"$type\" not available."), $missing, $optional, + $xfail); } elsif (/^tag *({([^}]*)|([a-zA-Z0-9_]*))/) { my($type) = "$2$3"; @@ -575,7 +594,7 @@ while ($#headers >= 0) { close (TESTFILE); compiletest ($fnamebase, "Testing for type $type", - "Type \"$type\" not available.", $missing, 0); + "Type \"$type\" not available.", $missing, 0, $xfail); } elsif (/^function *({([^}]*)}|([a-zA-Z0-9_]*)) [(][*]([a-zA-Z0-9_]*) ([(].*[)])/) { my($rettype) = "$2$3"; my($fname) = "$4"; @@ -597,7 +616,7 @@ while ($#headers >= 0) { ($optional ? "NOT AVAILABLE" : "Function \"$fname\" is not available."), $res, - $optional); + $optional, $xfail); if ($res == 0 || $missing == 1 || !$optional) { # Generate a program to test for the type of this function. @@ -610,7 +629,8 @@ while ($#headers >= 0) { close (TESTFILE); compiletest ($fnamebase, "Test for type of function $fname", - "Function \"$fname\" has incorrect type.", $res, 0); + "Function \"$fname\" has incorrect type.", $res, 0, + $xfail); } } elsif (/^function *({([^}]*)}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) ([(].*[)])/) { my($rettype) = "$2$3"; @@ -633,7 +653,7 @@ while ($#headers >= 0) { ($optional ? "NOT AVAILABLE" : "Function \"$fname\" is not available."), $res, - $optional); + $optional, $xfail); if ($res == 0 || $missing != 0 || !$optional) { # Generate a program to test for the type of this function. @@ -646,7 +666,8 @@ while ($#headers >= 0) { close (TESTFILE); compiletest ($fnamebase, "Test for type of function $fname", - "Function \"$fname\" has incorrect type.", $res, 0); + "Function \"$fname\" has incorrect type.", $res, 0, + $xfail); } } elsif (/^variable *({([^}]*)}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) *(.*)/) { my($type) = "$2$3"; @@ -667,7 +688,8 @@ while ($#headers >= 0) { close (TESTFILE); $res = compiletest ($fnamebase, "Test availability of variable $vname", - "Variable \"$vname\" is not available.", $res, 0); + "Variable \"$vname\" is not available.", $res, 0, + $xfail); # Generate a program to test for the type of this function. open (TESTFILE, ">$fnamebase.c"); @@ -678,7 +700,7 @@ while ($#headers >= 0) { close (TESTFILE); compiletest ($fnamebase, "Test for type of variable $fname", - "Variable \"$vname\" has incorrect type.", $res, 0); + "Variable \"$vname\" has incorrect type.", $res, 0, $xfail); } elsif (/^macro-function *({([^}]*)}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) ([(].*[)])/) { my($rettype) = "$2$3"; my($fname) = "$4"; @@ -698,7 +720,8 @@ while ($#headers >= 0) { close (TESTFILE); $res = compiletest ($fnamebase, "Test availability of macro $fname", - "Function \"$fname\" is not available.", $res, 0); + "Function \"$fname\" is not available.", $res, 0, + $xfail); # Generate a program to test for the type of this function. open (TESTFILE, ">$fnamebase.c"); @@ -711,7 +734,7 @@ while ($#headers >= 0) { close (TESTFILE); compiletest ($fnamebase, "Test for type of macro $fname", - "Function \"$fname\" has incorrect type.", $res, 0); + "Function \"$fname\" has incorrect type.", $res, 0, $xfail); } elsif (/^macro-str *([^ ]*) *(\".*\")/) { # The above regex doesn't handle a \" in a string. my($macro) = "$1"; @@ -731,7 +754,7 @@ while ($#headers >= 0) { close (TESTFILE); compiletest ($fnamebase, "Test availability of macro $macro", - "Macro \"$macro\" is not available.", $missing, 0); + "Macro \"$macro\" is not available.", $missing, 0, $xfail); # Generate a program to test for the value of this macro. open (TESTFILE, ">$fnamebase.c"); @@ -743,7 +766,8 @@ while ($#headers >= 0) { close (TESTFILE); $res = runtest ($fnamebase, "Testing for value of macro $macro", - "Macro \"$macro\" has not the right value.", $res); + "Macro \"$macro\" has not the right value.", $res, + $xfail); } elsif (/^allow-header *(.*)/) { my($pattern) = $1; if ($seenheader{$pattern} != 1) { @@ -774,6 +798,8 @@ while ($#headers >= 0) { next acontrol if (/^#/); next acontrol if (/^[ ]*$/); + s/^xfail-//; + s/^optional-//; if (/^element *({([^}]*)}|([^ ]*)) *({([^}]*)}|([^ ]*)) *([A-Za-z0-9_]*) *(.*)/) { push @allow, $7; } elsif (/^(macro|constant|macro-constant|macro-int-constant) +([a-zA-Z0-9_]*) *(?:{([^}]*)} *)?(?:([>=<!]+) ([A-Za-z0-9_-]*))?/) { @@ -838,6 +864,14 @@ if ($errors > 0 && $percent < 1.0) { printf ("%3d%%)\n", $percent); } +printf (" Number of xfailed tests : %4d (", $xerrors); +$percent = ($xerrors * 100) / $total; +if ($xerrors > 0 && $percent < 1.0) { + printf (" <1%%)\n"); +} else { + printf ("%3d%%)\n", $percent); +} + printf (" Number of skipped tests : %4d (", $skipped); $percent = ($skipped * 100) / $total; if ($skipped > 0 && $percent < 1.0) { |