use of jkind.lustre.RealExpr in project AGREE by loonwerks.
the class Main method testReal.
private static void testReal() throws IOException {
System.out.println("=============Real Test=============");
final Evaluator baseEvaluator = createEvaluator(INPUT_DIRECTORY + "symb_test_real.lus");
final Evaluator evaluator = new Evaluator(baseEvaluator, Arrays.asList(new BinaryExpr(new IdExpr("__SIM_PE___ASSUME0"), BinaryOp.EQUAL, new BoolExpr(true)), new BinaryExpr(new IdExpr("__SIM_PE___ASSUME1"), BinaryOp.EQUAL, new BoolExpr(true)), new BinaryExpr(new IdExpr("__SIM_PE__TOP__ss__TILDE__0__DOT____GUARANTEE0"), BinaryOp.EQUAL, new BoolExpr(true)), new BinaryExpr(new IdExpr("__SIM_PE__TOP__ss__TILDE__0__DOT____GUARANTEE1"), BinaryOp.EQUAL, new BoolExpr(true)), new BinaryExpr(new IdExpr("in1"), BinaryOp.EQUAL, new RealExpr(BigDecimal.valueOf(60))), new BinaryExpr(new IdExpr("in2"), BinaryOp.EQUAL, new RealExpr(BigDecimal.valueOf(10)))));
testValue("in1", evaluator, new RealValue(BigFraction.valueOf(BigDecimal.valueOf(60))));
testValue("in2", evaluator, new RealValue(BigFraction.valueOf(BigDecimal.valueOf(10))));
testValue("out1", evaluator, new RealValue(BigFraction.valueOf(BigDecimal.valueOf(30))));
testValue("out2", evaluator, new RealValue(BigFraction.valueOf(BigDecimal.valueOf(20))));
}
use of jkind.lustre.RealExpr in project AGREE by loonwerks.
the class AgreeASTBuilder method caseGetPropertyExpr.
@Override
public Expr caseGetPropertyExpr(GetPropertyExpr expr) {
NamedElement propName = expr.getProp();
PropertyExpression propVal;
if (propName instanceof Property) {
ComponentRef cr = expr.getComponentRef();
NamedElement compName = null;
if (cr instanceof DoubleDotRef) {
compName = ((DoubleDotRef) cr).getElm();
} else if (cr instanceof ThisRef) {
compName = curInst;
}
Property prop = (Property) propName;
propVal = AgreeUtils.getPropExpression(compName, prop);
if (propVal == null) {
if (Activator.getDefault().getPreferenceStore().getBoolean(PreferenceConstants.PREF_UNSPECIFIED_AADL_PROPERTIES)) {
String propInputName = unspecifiedAadlPropertyPrefix + compName.getName() + dotChar + prop.getName();
unspecifiedAadlProperties.put(propInputName, expr);
return new IdExpr(propInputName);
} else {
throw new AgreeException("Could not locate property value '" + prop.getQualifiedName() + "' in component '" + compName.getName() + "'. Is it possible " + "that a 'this' statement is used in a context in which it wasn't supposed to?" + " Analysis of unspecified AADL properties as inputs may be enabled in the AGREE preferences.");
}
}
} else {
propVal = AgreeUtils.getPropExpression((PropertyConstant) propName);
if (propVal == null) {
throw new AgreeException("Could not locate property value '" + propName.getQualifiedName());
}
}
Expr res = null;
if (propVal != null) {
if (propVal instanceof StringLiteral) {
// nodeStr += value.getValue() + ")";
throw new AgreeException("Property value for '" + propName.getQualifiedName() + "' cannot be of string type");
} else if (propVal instanceof NamedValue) {
// EnumerationLiteral enVal = (EnumerationLiteral) absVal;
throw new AgreeException("Property value for '" + propName.getQualifiedName() + "' cannot be of enumeration type");
} else if (propVal instanceof BooleanLiteral) {
BooleanLiteral value = (BooleanLiteral) propVal;
res = new BoolExpr(value.getValue());
} else if (propVal instanceof IntegerLiteral) {
IntegerLiteral value = (IntegerLiteral) propVal;
res = new IntExpr(BigInteger.valueOf((long) value.getScaledValue()));
} else {
assert (propVal instanceof RealLiteral);
RealLiteral value = (RealLiteral) propVal;
res = new RealExpr(BigDecimal.valueOf(value.getValue()));
}
}
assert (res != null);
return res;
}
use of jkind.lustre.RealExpr in project AGREE by loonwerks.
the class AgreePatternTranslator method translatePatternProperty.
private Expr translatePatternProperty(AgreeSporadicPattern pattern, AgreeNodeBuilder builder, EObject varReference) {
if (!((RealExpr) pattern.jitter).value.equals(BigDecimal.ZERO)) {
throw new AgreeException("We currently do not handle non-zero jitter values correctly for sporadic patterns");
}
AgreeVar timeofEvent = getTimeOf(pattern.event.id, builder, null);
Expr propExpr = expr("(true -> (not ((pre laste) = -1.0) => event => time - (pre laste) >= period))", to("laste", timeofEvent), to("event", pattern.event), to("time", timeExpr), to("period", pattern.period));
return propExpr;
}
use of jkind.lustre.RealExpr in project AGREE by loonwerks.
the class AgreePatternTranslator method translatePatternConstraint.
private Expr translatePatternConstraint(AgreeSporadicPattern pattern, AgreeNodeBuilder builder, EObject varReference) {
AgreeVar jitterVar = new AgreeVar(JITTER_PREFIX + patternIndex, NamedType.REAL, varReference);
AgreeVar periodVar = new AgreeVar(PERIOD_PREFIX + patternIndex, NamedType.REAL, varReference);
AgreeVar timeoutVar = new AgreeVar(TIMEOUT_PREFIX + patternIndex, NamedType.REAL, varReference);
builder.addOutput(jitterVar);
builder.addOutput(periodVar);
builder.addOutput(timeoutVar);
IdExpr jitterId = new IdExpr(jitterVar.id);
IdExpr periodId = new IdExpr(periodVar.id);
IdExpr timeoutId = new IdExpr(timeoutVar.id);
builder.addEventTime(timeoutVar);
// -j <= jitter <= j
Expr jitterLow = new BinaryExpr(new UnaryExpr(UnaryOp.NEGATIVE, pattern.jitter), BinaryOp.LESSEQUAL, jitterId);
Expr jitterHigh = new BinaryExpr(jitterId, BinaryOp.LESSEQUAL, pattern.jitter);
builder.addAssertion(new AgreeStatement(null, new BinaryExpr(jitterLow, BinaryOp.AND, jitterHigh), pattern.reference));
// pnext >= 0 -> if pre ((pnext + jitter) = t) then pnext >= p +
// pre(pnext) else pre(pnext)
Expr prePNext = new UnaryExpr(UnaryOp.PRE, periodId);
Expr pNextInit = new BinaryExpr(periodId, BinaryOp.GREATEREQUAL, new RealExpr(BigDecimal.ZERO));
Expr pNextCond = new BinaryExpr(periodId, BinaryOp.PLUS, jitterId);
pNextCond = new BinaryExpr(pNextCond, BinaryOp.EQUAL, timeExpr);
pNextCond = new UnaryExpr(UnaryOp.PRE, pNextCond);
Expr pNextThen = new BinaryExpr(pattern.period, BinaryOp.PLUS, prePNext);
pNextThen = new BinaryExpr(periodId, BinaryOp.GREATEREQUAL, pNextThen);
Expr pNextHold = new BinaryExpr(periodId, BinaryOp.EQUAL, prePNext);
Expr pNextIf = new IfThenElseExpr(pNextCond, pNextThen, pNextHold);
Expr pNext = new BinaryExpr(pNextInit, BinaryOp.ARROW, pNextIf);
builder.addAssertion(new AgreeStatement(null, pNext, pattern.reference));
// timeout = pnext + jitter
Expr timeoutExpr = new BinaryExpr(periodId, BinaryOp.PLUS, jitterId);
timeoutExpr = new BinaryExpr(timeoutId, BinaryOp.EQUAL, timeoutExpr);
builder.addAssertion(new AgreeStatement(null, timeoutExpr, pattern.reference));
// event = (t = timeout)
Expr eventExpr = new BinaryExpr(timeExpr, BinaryOp.EQUAL, timeoutId);
eventExpr = new BinaryExpr(pattern.event, BinaryOp.EQUAL, eventExpr);
return eventExpr;
}
use of jkind.lustre.RealExpr in project AGREE by loonwerks.
the class AgreeRealtimeCalendarBuilder method getTimeConstraint.
public static Expr getTimeConstraint(Set<AgreeVar> events) {
IdExpr timeId = AgreePatternTranslator.timeExpr;
Expr preTime = new UnaryExpr(UnaryOp.PRE, timeId);
Expr nodeCall = new BinaryExpr(timeId, BinaryOp.MINUS, preTime);
for (AgreeVar eventVar : events) {
Expr event = new IdExpr(eventVar.id);
BinaryExpr timeChange = new BinaryExpr(event, BinaryOp.MINUS, timeId);
Expr preTimeChange = new UnaryExpr(UnaryOp.PRE, timeChange);
nodeCall = new NodeCallExpr(MIN_POS_NODE_NAME, preTimeChange, nodeCall);
}
nodeCall = new BinaryExpr(preTime, BinaryOp.PLUS, nodeCall);
Expr timeExpr = new BinaryExpr(timeId, BinaryOp.EQUAL, nodeCall);
timeExpr = new BinaryExpr(new BoolExpr(true), BinaryOp.ARROW, timeExpr);
Expr timeGrtPreTime = new BinaryExpr(timeId, BinaryOp.GREATER, preTime);
Expr timeInitZero = new BinaryExpr(timeId, BinaryOp.EQUAL, new RealExpr(BigDecimal.ZERO));
timeInitZero = new BinaryExpr(timeInitZero, BinaryOp.ARROW, timeGrtPreTime);
return new BinaryExpr(timeInitZero, BinaryOp.AND, timeExpr);
}
Aggregations