use of pcgen.base.formula.base.ScopeInstance in project pcgen by PCGen.
the class DropIntoContextFunctionTest method testDynamic.
@Test
public void testDynamic() {
VariableLibrary vl = getVariableLibrary();
LegalScope equipScope = getScopeLibrary().getScope("EQUIPMENT");
LegalScope globalScope = getScopeLibrary().getScope("Global");
vl.assertLegalVariableID("LocalVar", equipScope, numberManager);
vl.assertLegalVariableID("EquipVar", globalScope, stringManager);
String formula = "dropIntoContext(\"EQUIPMENT\",EquipVar,LocalVar)";
SimpleNode node = TestUtilities.doParse(formula);
SemanticsVisitor semanticsVisitor = new SemanticsVisitor();
FormulaSemantics semantics = generateFormulaSemantics(getFormulaManager(), getGlobalScope(), null);
semanticsVisitor.visit(node, semantics);
if (!semantics.isValid()) {
TestCase.fail("Expected Valid Formula: " + formula + " but was told: " + semantics.getReport());
}
isStatic(formula, node, false);
Equipment equip = new Equipment();
equip.setName("EquipKey");
Equipment equipalt = new Equipment();
equipalt.setName("EquipAlt");
ScopeInstance scopeInste = getInstanceFactory().get("EQUIPMENT", equip);
VariableID varIDe = vl.getVariableID(scopeInste, "LocalVar");
getVariableStore().put(varIDe, 2);
ScopeInstance scopeInsta = getInstanceFactory().get("EQUIPMENT", equipalt);
VariableID varIDa = vl.getVariableID(scopeInsta, "LocalVar");
getVariableStore().put(varIDa, 3);
ScopeInstance globalInst = getInstanceFactory().getGlobalInstance("Global");
VariableID varIDq = vl.getVariableID(globalInst, "EquipVar");
getVariableStore().put(varIDq, "EquipKey");
LoadContext context = new RuntimeLoadContext(new RuntimeReferenceContext(), new ConsolidatedListCommitStrategy());
context.getReferenceContext().importObject(equip);
context.getReferenceContext().importObject(equipalt);
evaluatesTo(formula, node, 2, context);
Object rv = new ReconstructionVisitor().visit(node, new StringBuilder());
assertEquals(rv.toString(), formula);
getVariableStore().put(varIDq, "EquipAlt");
evaluatesTo(formula, node, 3, context);
}
use of pcgen.base.formula.base.ScopeInstance in project pcgen by PCGen.
the class DropIntoContextFunctionTest method testBasic.
@Test
public void testBasic() {
VariableLibrary vl = getVariableLibrary();
LegalScope equipScope = getScopeLibrary().getScope("EQUIPMENT");
vl.assertLegalVariableID("LocalVar", equipScope, numberManager);
String formula = "dropIntoContext(\"EQUIPMENT\",\"EquipKey\",LocalVar)";
SimpleNode node = TestUtilities.doParse(formula);
SemanticsVisitor semanticsVisitor = new SemanticsVisitor();
FormulaSemantics semantics = generateFormulaSemantics(getFormulaManager(), getGlobalScope(), null);
semanticsVisitor.visit(node, semantics);
if (!semantics.isValid()) {
TestCase.fail("Expected Valid Formula: " + formula + " but was told: " + semantics.getReport());
}
isStatic(formula, node, false);
Equipment equip = new Equipment();
equip.setName("EquipKey");
ScopeInstance scopeInst = getInstanceFactory().get("EQUIPMENT", equip);
VariableID varID = vl.getVariableID(scopeInst, "LocalVar");
getVariableStore().put(varID, 2);
LoadContext context = new RuntimeLoadContext(new RuntimeReferenceContext(), new ConsolidatedListCommitStrategy());
context.getReferenceContext().importObject(equip);
evaluatesTo(formula, node, 2, context);
Object rv = new ReconstructionVisitor().visit(node, new StringBuilder());
assertEquals(rv.toString(), formula);
}
use of pcgen.base.formula.base.ScopeInstance in project pcgen by PCGen.
the class InputFunctionTest method testGlobalChannelStrength.
@Test
public void testGlobalChannelStrength() {
VariableLibrary varLib = variableLibraryFacet.get(id.getDatasetID());
ScopeInstanceFactory instFactory = scopeFacet.get(id);
ScopeInstance globalInstance = instFactory.getGlobalInstance("Global");
varLib.assertLegalVariableID(ChannelUtilities.createVarName("STR"), globalInstance.getLegalScope(), numberManager);
VariableChannel<Number> strChannel = (VariableChannel<Number>) ChannelUtilities.getGlobalChannel(id, "STR");
String formula = "input(\"STR\")";
SimpleNode node = TestUtilities.doParse(formula);
isValid(formula, node, numberManager, null);
isStatic(formula, node, false);
evaluatesTo(formula, node, 0);
strChannel.set(2);
evaluatesTo(formula, node, 2);
Object rv = new ReconstructionVisitor().visit(node, new StringBuilder());
assertEquals(formula, rv.toString());
}
use of pcgen.base.formula.base.ScopeInstance in project pcgen by PCGen.
the class SetSolverManagerTest method testProcessDynamicSet.
@Test
public void testProcessDynamicSet() {
LegalScope equipScope = vsLib.getScope("EQUIPMENT");
sl.assertLegalVariableID("LocalVar", equipScope, numberManager);
sl.assertLegalVariableID("ResultVar", globalScope, numberManager);
sl.assertLegalVariableID("EquipVar", globalScope, equipmentManager);
Equipment equip = new Equipment();
equip.setName("EquipKey");
Equipment equipalt = new Equipment();
equipalt.setName("EquipAlt");
ScopeInstance scopeInste = siFactory.get("EQUIPMENT", equip);
VariableID varIDe = sl.getVariableID(scopeInste, "LocalVar");
manager.createChannel(varIDe);
vc.put(varIDe, 2);
ScopeInstance scopeInsta = siFactory.get("EQUIPMENT", equipalt);
VariableID varIDa = sl.getVariableID(scopeInsta, "LocalVar");
manager.createChannel(varIDa);
vc.put(varIDa, 3);
ScopeInstance globalInst = siFactory.getGlobalInstance("Global");
VariableID varIDq = sl.getVariableID(globalInst, "EquipVar");
manager.createChannel(varIDq);
VariableID varIDr = sl.getVariableID(globalInst, "ResultVar");
manager.createChannel(varIDr);
ModifierFactory am1 = new plugin.modifier.number.SetModifierFactory();
ModifierFactory amString = new plugin.modifier.string.SetModifierFactory();
PCGenModifier mod2 = am1.getModifier(2000, "2", new ManagerFactory() {
}, fm, globalScope, numberManager);
PCGenModifier mod3 = am1.getModifier(2000, "3", new ManagerFactory() {
}, fm, globalScope, numberManager);
PCGenModifier mod4 = am1.getModifier(3000, "4", new ManagerFactory() {
}, fm, globalScope, numberManager);
String formula = "dropIntoContext(\"EQUIPMENT\",EquipVar,LocalVar)";
PCGenModifier modf = am1.getModifier(2000, formula, new ManagerFactory() {
}, fm, globalScope, numberManager);
NEPCalculation calc1 = new ProcessCalculation<>(equip, new BasicSet(), equipmentManager);
CalculationModifier mod_e1 = new CalculationModifier<>(calc1, 2000);
NEPCalculation calc2 = new ProcessCalculation<>(equipalt, new BasicSet(), equipmentManager);
CalculationModifier mod_e2 = new CalculationModifier<>(calc2, 3000);
manager.addModifier(varIDe, mod2, scopeInste);
manager.addModifier(varIDa, mod3, scopeInsta);
assertEquals(2, vc.get(varIDe));
assertEquals(3, vc.get(varIDa));
assertEquals(0, vc.get(varIDr));
manager.addModifier(varIDq, mod_e1, globalInst);
manager.addModifier(varIDr, modf, globalInst);
assertEquals(2, vc.get(varIDr));
manager.addModifier(varIDq, mod_e2, globalInst);
assertEquals(3, vc.get(varIDr));
manager.addModifier(varIDa, mod4, scopeInsta);
assertEquals(4, vc.get(varIDr));
}
use of pcgen.base.formula.base.ScopeInstance in project pcgen by PCGen.
the class ResultFacet method getLocalVariable.
public Object getLocalVariable(CharID id, CDOMObject cdo, String varName) {
String localScopeName = cdo.getLocalScopeName();
if (localScopeName == null) {
return getGlobalVariable(id, varName);
}
ScopeInstance scope = scopeFacet.get(id, localScopeName, cdo);
if (scope == null) {
Logging.errorPrint("Improperly built " + cdo.getClass().getSimpleName() + ": " + cdo.getKeyName() + " had no VariableScope");
return null;
}
VariableID<?> varID = variableLibraryFacet.getVariableID(id.getDatasetID(), scope, varName);
return variableStoreFacet.getValue(id, varID);
}
Aggregations