use of pcgen.base.formula.visitor.EvaluateVisitor in project pcgen by PCGen.
the class LookupFunctionTest method testNoLookup.
@Test
public void testNoLookup() {
Finder finder = new Finder();
DataTable dt = doTableSetup();
finder.map.put(DataTable.class, "A", dt);
finder.map.put(TableColumn.class, "Name", buildColumn("Name", stringManager));
finder.map.put(TableColumn.class, "Value", buildColumn("Value", numberManager));
finder.map.put(TableColumn.class, "Result", buildColumn("Result", stringManager));
VariableLibrary vl = getVariableLibrary();
WriteableVariableStore vs = getVariableStore();
TableFormatFactory fac = new TableFormatFactory(finder);
FormatManager<?> tableMgr = fac.build("STRING,NUMBER", formatLibrary);
vl.assertLegalVariableID("TableA", getGlobalScope(), tableMgr);
ColumnFormatFactory cfac = new ColumnFormatFactory(finder);
FormatManager<?> columnMgr = cfac.build("NUMBER", formatLibrary);
vl.assertLegalVariableID("ResultColumn", getGlobalScope(), columnMgr);
VariableID tableID = vl.getVariableID(getGlobalScopeInst(), "TableA");
vs.put(tableID, tableMgr.convert("A"));
VariableID columnID = vl.getVariableID(getGlobalScopeInst(), "ResultColumn");
vs.put(columnID, columnMgr.convert("Value"));
String formula = "lookup(TableA,\"Oh No\",ResultColumn)";
SimpleNode node = TestUtilities.doParse(formula);
isValid(formula, node, numberManager, null);
isStatic(formula, node, false);
EvaluationManager manager = generateManager();
Object result = new EvaluateVisitor().visit(node, manager);
if (!result.equals(0)) {
TestCase.fail("Expected Invalid result, should have been zero due to invalid column: " + result);
}
}
use of pcgen.base.formula.visitor.EvaluateVisitor in project pcgen by PCGen.
the class AbstractFormulaTestCase method performEvaluation.
public void performEvaluation(String formula, SimpleNode node, Object valueOf, EvaluationManager manager) {
Object result = new EvaluateVisitor().visit(node, manager);
if (result.equals(valueOf)) {
return;
}
//Try ints as double as well just in case (temporary)
if (valueOf instanceof Integer) {
if (result.equals(valueOf)) {
return;
}
} else //Give Doubles a bit of fuzz
if (valueOf instanceof Double) {
if (TestUtilities.doubleEqual(((Double) valueOf).doubleValue(), ((Number) result).doubleValue())) {
return;
}
}
TestCase.fail("Expected " + valueOf.getClass().getSimpleName() + " (" + valueOf + ") for Formula: " + formula + ", was " + result + " (" + result.getClass().getSimpleName() + ")");
}
use of pcgen.base.formula.visitor.EvaluateVisitor in project pcgen by PCGen.
the class LookupFunctionTest method testNoColumn.
@Test
public void testNoColumn() {
Finder finder = new Finder();
DataTable dt = doTableSetup();
finder.map.put(DataTable.class, "A", dt);
finder.map.put(TableColumn.class, "Name", buildColumn("Name", stringManager));
finder.map.put(TableColumn.class, "Value", buildColumn("Value", numberManager));
finder.map.put(TableColumn.class, "Result", buildColumn("Result", stringManager));
VariableLibrary vl = getVariableLibrary();
WriteableVariableStore vs = getVariableStore();
TableFormatFactory fac = new TableFormatFactory(finder);
FormatManager<?> tableMgr = fac.build("STRING,NUMBER", formatLibrary);
vl.assertLegalVariableID("TableA", getGlobalScope(), tableMgr);
ColumnFormatFactory cfac = new ColumnFormatFactory(finder);
FormatManager<?> columnMgr = cfac.build("NUMBER", formatLibrary);
vl.assertLegalVariableID("ResultColumn", getGlobalScope(), columnMgr);
VariableID tableID = vl.getVariableID(getGlobalScopeInst(), "TableA");
vs.put(tableID, tableMgr.convert("A"));
VariableID columnID = vl.getVariableID(getGlobalScopeInst(), "ResultColumn");
vs.put(columnID, columnMgr.convert("Result"));
String formula = "lookup(TableA,\"That\",ResultColumn)";
SimpleNode node = TestUtilities.doParse(formula);
isValid(formula, node, numberManager, null);
isStatic(formula, node, false);
EvaluationManager manager = generateManager();
Object result = new EvaluateVisitor().visit(node, manager);
if (result instanceof Number) {
TestCase.fail("Expected Invalid result, should have been a string due to invalid column: " + result);
}
}
use of pcgen.base.formula.visitor.EvaluateVisitor in project pcgen by PCGen.
the class AbstractFormulaTestCase method evaluatesTo.
public void evaluatesTo(String formula, SimpleNode node, Object valueOf) {
EvaluationManager manager = generateManager();
Object result = new EvaluateVisitor().visit(node, manager);
if (result.equals(valueOf)) {
return;
}
//Try ints as double as well just in case (temporary)
if (valueOf instanceof Integer) {
if (result.equals(valueOf)) {
return;
}
} else //Give Doubles a bit of fuzz
if (valueOf instanceof Double) {
if (TestUtilities.doubleEqual(((Double) valueOf).doubleValue(), ((Number) result).doubleValue(), TestUtilities.SMALL_ERROR)) {
return;
}
}
TestCase.fail("Expected " + valueOf.getClass().getSimpleName() + " (" + valueOf + ") for Formula: " + formula + ", was " + result + " (" + result.getClass().getSimpleName() + ")");
}
Aggregations