/*
* Created on Apr 19, 2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package cs227b.teamIago.resolver;
import cs227b.teamIago.parser.Parser;
/**
*
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class ProverTest
{
public ProverTest(){}
// this main reads in an axiom file, a state file, and a moves file, and
// prints out output according to the format specified in assignment 3
public static void main(String args[])
{
try {
int maxIndex;
boolean wantDebugPrintouts = false;
if (args.length % 3 == 1) wantDebugPrintouts = true;
if (args.length >= 3) maxIndex = args.length / 3;
else maxIndex = 4;
for (int testfile = 1; testfile <= maxIndex ; testfile++)
{
System.out.println("**************** Game " + testfile + " *****************");
String axiomFile = "data/axioms" + testfile + ".kif";
String stateFile = "data/state" + testfile + ".kif";
String movesFile = "data/moves" + testfile + ".kif";
if (args.length > 3*(testfile-1) + 2)
{
int offset;
if (wantDebugPrintouts) offset = 1;
else offset = 0;
axiomFile = args[3*(testfile-1) + 0 + offset];
stateFile = args[3*(testfile-1) + 1 + offset];
movesFile = args[3*(testfile-1) + 2 + offset];
}
ExpList axiomList = Parser.parseFile(axiomFile);
ExpList stateList = Parser.parseFile(stateFile);
ExpList movesList = Parser.parseFile(movesFile);
// TODO: enable second param once optimization works
// ...or rather, once it actually improves speed. d'oh.
Theory theoryObj = new Theory(wantDebugPrintouts, false);
for (int i = 0; i < axiomList.size(); i++)
{
theoryObj.add(axiomList.get(i));
}
for (int i = 0; i < stateList.size(); i++)
{
theoryObj.add(stateList.get(i));
}
for (int i = 0; i < movesList.size(); i++)
{
theoryObj.add(movesList.get(i));
}
if (wantDebugPrintouts)
System.err.println("Current value of topVar: " + theoryObj.getTopVar());
// Atoms
Atom legal = new Atom("LEGAL");
Atom role = new Atom("Role");
Atom goal = new Atom("GOAL");
Atom terminal = new Atom("Terminal");
Atom next = new Atom("next");
// Variables
Variable v1 = theoryObj.generateVar();
Variable v2 = theoryObj.generateVar();
Variable v3 = theoryObj.generateVar();
// Lists of Variables
ExpList v1only = new ExpList();
v1only.add(v1);
// Collections of answer expressions
ExpList roles;
ExpList legalMoves;
ExpList goalValues;
ExpList nextState;
boolean isTerminal;
// Get all the available roles
roles = theoryObj.finds(v1,new Predicate(role,v1only));
if (roles == null) {
System.out.println("No playable roles found: aborting.");
System.exit(-1);
}
int i;
for (i = 0; i < roles.size(); i++)
{
Expression player = roles.get(i);
ExpList roleV2 = new ExpList();
roleV2.add(player);
roleV2.add(v2);
System.out.println("Player " + player.toString());
legalMoves = theoryObj.finds(v2,new Predicate(legal,roleV2));
if (legalMoves == null)
System.out.println("No legal moves found.");
else
System.out.println("Legal moves: " + legalMoves.toString());
goalValues = theoryObj.finds(v2,new Predicate(goal,roleV2));
if (goalValues == null)
System.out.println("No goal values found.");
else
System.out.println("Goal values: " +
goalValues.toString());
}
isTerminal = theoryObj.findp(terminal);
if (isTerminal) {
System.out.println("Game is in terminal state.");
System.out.println("(Not calculating next state.)");
}
else
{
System.out.println("Game is in non-terminal state.");
nextState = theoryObj.finds(v1,new Predicate(next,v1only));
if (nextState == null)
System.out.println("Could not calculate next state.");
else System.out.println("Next state: " + nextState);
}
System.out.println("************* End of Game " + testfile + " *************");
}
} catch (InterruptedException e) {
System.out.println("how did we get an interruption here? " + e);
}
}
}