06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | #!/usr/local/bin/pike
#include <simulate.h>
|
e9361f | 1995-11-06 | Fredrik Hübinette (Hubbe) | |
|
c7dbb6 | 1996-06-09 | Fredrik Hübinette (Hubbe) | | #if !efun(_verify_internals)
#define _verify_internals()
#endif
|
a9679f | 1995-11-13 | David Hedbor | |
int main(int argc, string *argv)
{
|
c7dbb6 | 1996-06-09 | Fredrik Hübinette (Hubbe) | | int e, verbose, successes, errors, t, check;
|
a9679f | 1995-11-13 | David Hedbor | | string *tests;
program testprogram;
int start, fail;
for(e=1;e<argc;e++)
{
|
a67f2f | 1996-05-16 | Fredrik Hübinette (Hubbe) | | string opt;
int arg;
arg=1;
if(sscanf(argv[e],"--%s=%d",opt,arg)==2)
opt="--"+opt;
else if(sscanf(argv[e],"-%s%d",opt,arg)==2)
opt="-"+opt;
else
opt=argv[e];
switch(opt)
|
a9679f | 1995-11-13 | David Hedbor | | {
case "-h":
case "--help":
perror("Usage: "+argv[e]+" [-v | --verbose] [-h | --help] [-t <testno>] <testfile>\n");
return 0;
case "-v":
case "--verbose":
|
a67f2f | 1996-05-16 | Fredrik Hübinette (Hubbe) | | verbose+=arg;
|
a9679f | 1995-11-13 | David Hedbor | | break;
case "-s":
case "--start-test":
|
a67f2f | 1996-05-16 | Fredrik Hübinette (Hubbe) | | start=arg;
|
a9679f | 1995-11-13 | David Hedbor | | start--;
break;
case "-f":
case "--fail":
|
a67f2f | 1996-05-16 | Fredrik Hübinette (Hubbe) | | fail+=arg;
|
a9679f | 1995-11-13 | David Hedbor | | break;
case "-t":
case "--trace":
|
a67f2f | 1996-05-16 | Fredrik Hübinette (Hubbe) | | t+=arg;
|
e9361f | 1995-11-06 | Fredrik Hübinette (Hubbe) | | break;
|
c7dbb6 | 1996-06-09 | Fredrik Hübinette (Hubbe) | | case "-c":
case "--check":
check++;
|
a9679f | 1995-11-13 | David Hedbor | | break;
default:
if(tests)
{
|
03764e | 1996-11-12 | Fredrik Hübinette (Hubbe) | | perror("Unknown argument: "+opt+".\n");
|
a9679f | 1995-11-13 | David Hedbor | | exit(1);
}
tests=(read_bytes(argv[e])||"")/"\n....\n";
}
}
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | if(!tests)
{
tests=(clone((program)"/precompiled/file","stdin")->read(0x7fffffff)||"")/"\n....\n";
}
|
262567 | 1996-09-23 | Fredrik Hübinette (Hubbe) | | if(!tests)
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | {
perror("Failed to read test file!\n");
exit(1);
}
tests=tests[0..sizeof(tests)-2];
|
a9679f | 1995-11-13 | David Hedbor | | for(e=start;e<sizeof(tests);e++)
{
|
a67f2f | 1996-05-16 | Fredrik Hübinette (Hubbe) | | string test,condition;
|
a9679f | 1995-11-13 | David Hedbor | | int type;
object o;
mixed a,b;
|
c7dbb6 | 1996-06-09 | Fredrik Hübinette (Hubbe) | | if(check) _verify_internals();
|
a67f2f | 1996-05-16 | Fredrik Hübinette (Hubbe) | | test=tests[e];
if(sscanf(test,"COND %s\n%s",condition,test)==2)
{
if(!clone(compile_string("mixed c() { return "+condition+"; }","Cond "+(e+1)))->c())
{
if(verbose)
perror("Not doing test "+(e+1)+"\n");
successes++;
continue;
}
}
sscanf(test,"%s\n%s",type,test);
|
a9679f | 1995-11-13 | David Hedbor | | sscanf(type,"%*s expected result: %s",type);
if(verbose)
{
perror("Doing test "+(e+1)+"\n");
if(verbose>1)
perror(test+"\n");
}
|
c7dbb6 | 1996-06-09 | Fredrik Hübinette (Hubbe) | | if(check > 1) _verify_internals();
|
a9679f | 1995-11-13 | David Hedbor | | switch(type)
{
case "COMPILE_ERROR":
master()->set_inhibit_compile_errors(1);
if(catch(compile_string(test,"Test "+(e+1))))
{
successes++;
}else{
perror("Test "+(e+1)+" failed.\n");
perror(test+"\n");
errors++;
}
master()->set_inhibit_compile_errors(0);
break;
case "EVAL_ERROR":
master()->set_inhibit_compile_errors(1);
if(catch(clone(compile_string(test,"Test "+(e+1)))->a()))
{
successes++;
}else{
perror("Test "+(e+1)+" failed.\n");
perror(test+"\n");
errors++;
}
master()->set_inhibit_compile_errors(0);
break;
default:
o=clone(compile_string(test,"Test "+(e+1)));
|
c7dbb6 | 1996-06-09 | Fredrik Hübinette (Hubbe) | | if(check > 1) _verify_internals();
|
a9679f | 1995-11-13 | David Hedbor | | a=b=0;
if(t) trace(t);
if(functionp(o->a)) a=o->a();
if(functionp(o->b)) b=o->b();
if(t) trace(0);
|
c7dbb6 | 1996-06-09 | Fredrik Hübinette (Hubbe) | |
if(check > 1) _verify_internals();
|
a9679f | 1995-11-13 | David Hedbor | | switch(type)
{
case "FALSE":
a=!a;
case "TRUE":
if(!a)
{
perror("Test "+(e+1)+" failed.\n");
perror(test+"\n");
errors++;
}else{
successes++;
}
break;
case "RUN":
successes++;
break;
case "EQ":
if(a!=b)
{
perror("Test "+(e+1)+" failed.\n");
perror(test+"\n");
perror(sprintf("o->a(): %O\n",a));
perror(sprintf("o->b(): %O\n",b));
errors++;
}else{
successes++;
}
break;
case "EQUAL":
if(!equal(a,b))
{
perror("Test "+(e+1)+" failed.\n");
perror(test+"\n");
perror(sprintf("o->a(): %O\n",a));
perror(sprintf("o->b(): %O\n",b));
errors++;
}else{
successes++;
}
break;
default:
perror(sprintf("Unknown test type (%O).\n",type));
errors++;
}
}
|
c7dbb6 | 1996-06-09 | Fredrik Hübinette (Hubbe) | |
if(check > 2) _verify_internals();
|
a9679f | 1995-11-13 | David Hedbor | | if(fail && errors)
exit(1);
}
if(errors + successes != sizeof(tests))
{
perror("Errors + Successes != number of tests!\n");
errors++;
}
|
c7dbb6 | 1996-06-09 | Fredrik Hübinette (Hubbe) | |
|
a9679f | 1995-11-13 | David Hedbor | | if(errors || verbose)
{
perror("Failed tests: "+errors+".\n");
}
return errors;
}
|