
import java.io.*;

public class Tester {
	static RETURN result;

	static boolean resultReturned = false;

	static boolean runtime = false;

	static Exception except;
	
	static TableMaker myTableMaker;
	
public static void main(String[] args) throws Exception
    {
	PrintWriter printer = new PrintWriter(
		new BufferedWriter(new FileWriter("results")));	
	try{
	    ParseTest p = new ParseTest("input");
	    myTableMaker = new TableMaker("output.html");
	    
	    int count = 0;
	    while (true){
		final CLASS xx = new CLASS();		
		count++;
		
		ARGPARSE

		    // System.out.print(count +"\t");
		    // printer.print(count +"\t");
  
		resultReturned = false;
		Thread runner = new Thread(){
			public void run()
			{
			    runtime = false;
			    try{
                                result = xx. METHOD(ARGCALL);
                                resultReturned = true;
			    }
			    catch (Exception e){
				runtime = true;
				except = e;
			    }
			}
		    };

		boolean done = true;

		try{
		    runner.setDaemon(true);
		    runner.start();
		    runner.join(3000);
		    done = ! runner.isInterrupted();
		}
		catch(Exception e){
		    done = false;
		}
		RETURN expected;

  	        expected = p.match(result);

		if (! done || resultReturned == false){
		    //System.out.print("time limit exceeded : ");
		    if (runtime){
			printer.print("<td>runtime exception:"+except);
			except.printStackTrace(printer);
		    
		    String out = "Runtime Exception: " + except;
		     
		  myTableMaker.addEntry(p.printArgs(),out, p.print(expected), false);
		    }
		    else{
			myTableMaker.addEntry(p.printArgs(),
								"Time limit exceeded. Execution halted.", 
										p.print(expected), false);
						printer.print("<td>time limit exceeded: ");
		    }
		    
//		    PRINTARGS
	    
		}		
		
		else if (! p.ok()){
  
		   // PRINTARGS


	
		myTableMaker.addEntry(p.printArgs(),p.print(result), p.print(expected),
							false);
		}
		else {
		    myTableMaker.addEntry("","","",true);
		}
	    }
	}
	catch (Exception ioe){
	    printer.close();
	}
	
	myTableMaker.makeTable();
    }}