|
|
@@ -1,553 +0,0 @@
|
|
|
-/**
|
|
|
- * Copyright (c) 2010 committers of YAKINDU and others.
|
|
|
- * All rights reserved. This program and the accompanying materials
|
|
|
- * are made available under the terms of the Eclipse Public License v1.0
|
|
|
- * which accompanies this distribution, and is available at
|
|
|
- * http://www.eclipse.org/legal/epl-v10.html
|
|
|
- *
|
|
|
- * Contributors:
|
|
|
- * committers of YAKINDU - initial API and implementation
|
|
|
- */
|
|
|
-package org.yakindu.sct.model.sexec.interpreter.test;
|
|
|
-
|
|
|
-import static org.junit.Assert.assertEquals;
|
|
|
-
|
|
|
-import org.eclipse.xtext.junit4.InjectWith;
|
|
|
-import org.eclipse.xtext.junit4.XtextRunner;
|
|
|
-import org.junit.After;
|
|
|
-import org.junit.Before;
|
|
|
-import org.junit.Test;
|
|
|
-import org.junit.runner.RunWith;
|
|
|
-import org.yakindu.base.expressions.expressions.Expression;
|
|
|
-import org.yakindu.base.types.ITypeSystem;
|
|
|
-import org.yakindu.base.types.InferredType;
|
|
|
-import org.yakindu.sct.model.sgraph.Scope;
|
|
|
-import org.yakindu.sct.model.stext.test.util.AbstractSTextTest;
|
|
|
-import org.yakindu.sct.model.stext.test.util.STextInjectorProvider;
|
|
|
-import org.yakindu.sct.simulation.core.sexec.interpreter.IStatementInterpreter;
|
|
|
-import org.yakindu.sct.simulation.core.sruntime.ExecutionContext;
|
|
|
-import org.yakindu.sct.simulation.core.sruntime.ExecutionEvent;
|
|
|
-import org.yakindu.sct.simulation.core.sruntime.ExecutionVariable;
|
|
|
-import org.yakindu.sct.simulation.core.sruntime.impl.ExecutionEventImpl;
|
|
|
-import org.yakindu.sct.simulation.core.sruntime.impl.ExecutionVariableImpl;
|
|
|
-
|
|
|
-import com.google.inject.Inject;
|
|
|
-
|
|
|
-/**
|
|
|
- *
|
|
|
- * @author andreas muelder - Initial contribution and API
|
|
|
- *
|
|
|
- */
|
|
|
-@RunWith(XtextRunner.class)
|
|
|
-@InjectWith(STextInjectorProvider.class)
|
|
|
-public class STextInterpreterTest extends AbstractSTextTest {
|
|
|
-
|
|
|
- @Inject
|
|
|
- private ExecutionContext context;
|
|
|
- @Inject
|
|
|
- private IStatementInterpreter interpreter;
|
|
|
- @Inject
|
|
|
- private ITypeSystem typeSystem;
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntVariableAssignment() {
|
|
|
- executeWithDefaultScope("intVar = 42");
|
|
|
- assertEquals(42L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testHexVariableAssignment() {
|
|
|
- executeWithDefaultScope("intVar = 0xFF");
|
|
|
- assertEquals(0xFF, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testBoolTrueVariableAssignment() {
|
|
|
- executeWithDefaultScope("boolVar = true");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testBoolFalseVariableAssignment() {
|
|
|
- executeWithDefaultScope("boolVar = false");
|
|
|
- assertEquals(false, getContext().getVariable("boolVar").getValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealVariableAssignment() {
|
|
|
- executeWithDefaultScope("realVar = 42.0");
|
|
|
- assertEquals(42.0d, getContext().getVariable("realVar").getValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testStringVariableAssignment() {
|
|
|
- executeWithDefaultScope("stringVar = 'fortytwo'");
|
|
|
- assertEquals("fortytwo", getStringValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testStringNullAssignment() {
|
|
|
- executeWithDefaultScope("stringVar = null");
|
|
|
- assertEquals(null, getStringValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testConditionalTrue() {
|
|
|
- executeWithDefaultScope("intVar = true ? 42 : 1");
|
|
|
- assertEquals(42L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testConditionalFalse() {
|
|
|
- executeWithDefaultScope("intVar = false ? 42 : 1");
|
|
|
- assertEquals(1L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testNestedExpression() {
|
|
|
- executeWithDefaultScope("intVar = (1 + 1) * 2");
|
|
|
- assertEquals(4L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testBooleanOr() {
|
|
|
- executeWithDefaultScope("boolVar = true || false");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testBooleanAnd() {
|
|
|
- executeWithDefaultScope("boolVar = true && false");
|
|
|
- assertEquals(false, getContext().getVariable("boolVar").getValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testBitwiseXor() {
|
|
|
- executeWithDefaultScope("intVar = 0xF0F0 ^ 0xFF00");
|
|
|
- assertEquals(0x0FF0, getContext().getVariable("intVar").getValue());
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testBitwiseOr() {
|
|
|
- executeWithDefaultScope("intVar = 0xF0F0 | 0xFFFF");
|
|
|
- assertEquals(0xFFFF, getContext().getVariable("intVar").getValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testBitwiseAnd() {
|
|
|
- executeWithDefaultScope("intVar = 0xF0F0 & 0xFFFF");
|
|
|
- assertEquals(0x0F0F0, getContext().getVariable("intVar").getValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testBoolEqual() {
|
|
|
- executeWithDefaultScope("boolVar = false == false");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntEqual() {
|
|
|
- executeWithDefaultScope("boolVar = 1 == 1");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealEqual() {
|
|
|
- executeWithDefaultScope("boolVar = 1.0f == 1.0f");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testStringEqual() {
|
|
|
- executeWithDefaultScope("boolVar = 'string' == 'string'");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testBoolNotEqual() {
|
|
|
- executeWithDefaultScope("boolVar = true != false");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntNotEqual() {
|
|
|
- executeWithDefaultScope("boolVar = 1 != 2");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealNotEqual() {
|
|
|
- executeWithDefaultScope("boolVar = 1.0f != 2.0f");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testStringNotEqual() {
|
|
|
- executeWithDefaultScope("boolVar = 'string' != 'string2'");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntGreaterEqual() {
|
|
|
- executeWithDefaultScope("boolVar = 2 >= 1");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealGreaterEqual() {
|
|
|
- executeWithDefaultScope("boolVar = 2.0f >= 2.0f");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntSmallerEqual() {
|
|
|
- executeWithDefaultScope("boolVar = 1 <= 2");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealSmallerEqual() {
|
|
|
- executeWithDefaultScope("boolVar = 2.0f <= 2.0f");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntGreater() {
|
|
|
- executeWithDefaultScope("boolVar = 2 > 1");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealGreater() {
|
|
|
- executeWithDefaultScope("boolVar = 2.1f > 2.0f");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntSmaller() {
|
|
|
- executeWithDefaultScope("boolVar = 1 < 2");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealSmaller() {
|
|
|
- executeWithDefaultScope("boolVar = 2.0f < 2.1f");
|
|
|
- assertEquals(true, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntPositive() {
|
|
|
- executeWithDefaultScope("intVar = + 1");
|
|
|
- assertEquals(1L, getIntValue());
|
|
|
- executeWithDefaultScope("intVar = +2");
|
|
|
- assertEquals(2L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealPositive() {
|
|
|
- executeWithDefaultScope("realVar = +1.0");
|
|
|
- assertEquals(1.0d, getRealValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntNegative() {
|
|
|
- executeWithDefaultScope("intVar = - 1");
|
|
|
- assertEquals(-1L, getIntValue());
|
|
|
- executeWithDefaultScope("intVar = -2");
|
|
|
- assertEquals(-2L, getIntValue());
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealNegative() {
|
|
|
- executeWithDefaultScope("realVar = -1.0f");
|
|
|
- assertEquals(-1.0d, getRealValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntPlus() {
|
|
|
- executeWithDefaultScope("intVar = 42 + 1");
|
|
|
- assertEquals(43L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealPlus() {
|
|
|
- executeWithDefaultScope("realVar = 42.0 + 1.0");
|
|
|
- assertEquals(43.0d, getRealValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntMinus() {
|
|
|
- executeWithDefaultScope("intVar = 42 - 1");
|
|
|
- assertEquals(41L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealMinus() {
|
|
|
- executeWithDefaultScope("realVar = 42.0f - 1.0f");
|
|
|
- assertEquals(41.0d, getRealValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntMultiply() {
|
|
|
- executeWithDefaultScope("intVar = 42 * 2");
|
|
|
- assertEquals(84L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealMultiply() {
|
|
|
- executeWithDefaultScope("realVar = 42.0f * 2.0f");
|
|
|
- assertEquals(84.0d, getRealValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntDivide() {
|
|
|
- executeWithDefaultScope("intVar = 42 / 2");
|
|
|
- assertEquals(21L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealDivide() {
|
|
|
- executeWithDefaultScope("realVar = 42.0f / 2.0f");
|
|
|
- assertEquals(21.0d, getRealValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntModulo() {
|
|
|
- executeWithDefaultScope("intVar = 42 % 2");
|
|
|
- assertEquals(0L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealModulo() {
|
|
|
- executeWithDefaultScope("realVar = 42.0f % 2.0f");
|
|
|
- assertEquals(0.0d, getRealValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntLeft() {
|
|
|
- executeWithDefaultScope("intVar = 42 << 2");
|
|
|
- assertEquals(168L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntRight() {
|
|
|
- executeWithDefaultScope("intVar = 42 >> 2");
|
|
|
- assertEquals(10L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntAnd() {
|
|
|
- executeWithDefaultScope("intVar= 9 & 12");
|
|
|
- assertEquals(8L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntXor() {
|
|
|
- executeWithDefaultScope("intVar= 9 ^ 12");
|
|
|
- assertEquals(5L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntOr() {
|
|
|
- executeWithDefaultScope("intVar= 9 | 12");
|
|
|
- assertEquals(13L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntBitComplement() {
|
|
|
- executeWithDefaultScope("intVar= ~9");
|
|
|
- assertEquals(-10L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testNot() {
|
|
|
- executeWithDefaultScope("boolVar = ! true");
|
|
|
- assertEquals(false, getBoolValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testPrirority() {
|
|
|
- executeWithDefaultScope("intVar = 1 + 2 * 3");
|
|
|
- assertEquals(7L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testNested() {
|
|
|
- executeWithDefaultScope("intVar = (1 + 2) * 3");
|
|
|
- assertEquals(9L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntPlusAssign() {
|
|
|
- executeWithDefaultScope("intVar=42");
|
|
|
- executeWithDefaultScope("intVar+=42");
|
|
|
- assertEquals(84L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealPlusAssign() {
|
|
|
- executeWithDefaultScope("realVar = 42.0");
|
|
|
- executeWithDefaultScope("realVar+=42.0");
|
|
|
- assertEquals(84.0d, getRealValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntMinusAssign() {
|
|
|
- executeWithDefaultScope("intVar=42");
|
|
|
- executeWithDefaultScope("intVar-=10");
|
|
|
- assertEquals(32L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealMinusAssign() {
|
|
|
- executeWithDefaultScope("realVar=42.0f");
|
|
|
- executeWithDefaultScope("realVar-=10.0");
|
|
|
- assertEquals(32.0d, getRealValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntMultAssign() {
|
|
|
- executeWithDefaultScope("intVar=42");
|
|
|
- executeWithDefaultScope("intVar*=1");
|
|
|
- assertEquals(42L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealMultAssign() {
|
|
|
- executeWithDefaultScope("realVar=42.0f");
|
|
|
- executeWithDefaultScope("realVar*=1.0");
|
|
|
- assertEquals(42.0d, getRealValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntDivAssign() {
|
|
|
- executeWithDefaultScope("intVar=42");
|
|
|
- executeWithDefaultScope("intVar/=1");
|
|
|
- assertEquals(42L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealDivAssign() {
|
|
|
- executeWithDefaultScope("realVar=42.0f");
|
|
|
- executeWithDefaultScope("realVar/=1.0f");
|
|
|
- assertEquals(42.0d, getRealValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testIntModAssign() {
|
|
|
- executeWithDefaultScope("intVar=42");
|
|
|
- executeWithDefaultScope("intVar%=1");
|
|
|
- assertEquals(0L, getIntValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testRealModAssign() {
|
|
|
- executeWithDefaultScope("realVar=42.0f");
|
|
|
- executeWithDefaultScope("realVar%=1.0f");
|
|
|
- assertEquals(0.0d, getRealValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testPlainTrue() {
|
|
|
- assertEquals(true, executeExpression("", "true"));
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testPlainFalse() {
|
|
|
- assertEquals(false, executeExpression("", "false"));
|
|
|
- }
|
|
|
-
|
|
|
- // Convenience...
|
|
|
-
|
|
|
- @Before
|
|
|
- public void setup() {
|
|
|
- initContext();
|
|
|
- }
|
|
|
-
|
|
|
- private void initContext() {
|
|
|
- // "event abc operation foo() var intVar : integer var boolVar : boolean
|
|
|
- // var realVar : real
|
|
|
- ExecutionVariable intVar = new ExecutionVariableImpl();
|
|
|
- intVar.setName("intVar");
|
|
|
- intVar.setFqName("intVar");
|
|
|
- intVar.setType(new InferredType(typeSystem.getIntegerType()));
|
|
|
- intVar.setValue(0);
|
|
|
- context.getSlots().add(intVar);
|
|
|
-
|
|
|
- ExecutionVariable boolVar = new ExecutionVariableImpl();
|
|
|
- boolVar.setName("boolVar");
|
|
|
- boolVar.setFqName("boolVar");
|
|
|
- boolVar.setType(new InferredType(typeSystem.getBooleanType()));
|
|
|
- boolVar.setValue(false);
|
|
|
- context.getSlots().add(boolVar);
|
|
|
-
|
|
|
- ExecutionVariable realVar = new ExecutionVariableImpl();
|
|
|
- realVar.setName("realVar");
|
|
|
- realVar.setFqName("realVar");
|
|
|
- realVar.setType(new InferredType(typeSystem.getRealType()));
|
|
|
- realVar.setValue(0.0f);
|
|
|
- context.getSlots().add(realVar);
|
|
|
-
|
|
|
- ExecutionVariable stringVar = new ExecutionVariableImpl();
|
|
|
- stringVar.setName("stringVar");
|
|
|
- stringVar.setFqName("stringVar");
|
|
|
- stringVar.setType(new InferredType(typeSystem.getStringType()));
|
|
|
- stringVar.setValue("");
|
|
|
- context.getSlots().add(stringVar);
|
|
|
-
|
|
|
- ExecutionEvent event = new ExecutionEventImpl();
|
|
|
- event.setName("abc");
|
|
|
- event.setFqName("abc");
|
|
|
- event.setType(new InferredType(typeSystem.getIntegerType()));
|
|
|
- context.getSlots().add(event);
|
|
|
- }
|
|
|
-
|
|
|
- protected Object getBoolValue() {
|
|
|
- return context.getVariable("boolVar").getValue();
|
|
|
- }
|
|
|
-
|
|
|
- protected Object getIntValue() {
|
|
|
- return context.getVariable("intVar").getValue();
|
|
|
- }
|
|
|
-
|
|
|
- protected Object getRealValue() {
|
|
|
- return context.getVariable("realVar").getValue();
|
|
|
- }
|
|
|
-
|
|
|
- protected Object getStringValue() {
|
|
|
- return context.getVariable("stringVar").getValue();
|
|
|
- }
|
|
|
-
|
|
|
- protected Object executeWithDefaultScope(String expression) {
|
|
|
- Scope defaultScope = internalScope();
|
|
|
- Expression statement = (Expression) parseExpression(expression,
|
|
|
- defaultScope, Expression.class.getSimpleName());
|
|
|
- return interpreter.evaluateStatement(statement, context);
|
|
|
- }
|
|
|
-
|
|
|
- protected Object execute(String scope, String expression) {
|
|
|
- Scope defaultScope = createInternalScope(scope);
|
|
|
- Expression statement = (Expression) parseExpression(expression,
|
|
|
- defaultScope, Expression.class.getSimpleName());
|
|
|
- return interpreter.evaluateStatement(statement, context);
|
|
|
- }
|
|
|
-
|
|
|
- protected Object executeExpression(String scope, String expression) {
|
|
|
- Scope defaultScope = createInternalScope(scope);
|
|
|
- Expression statement = (Expression) parseExpression(expression,
|
|
|
- defaultScope, Expression.class.getSimpleName());
|
|
|
- return interpreter.evaluateStatement(statement, context);
|
|
|
- }
|
|
|
-
|
|
|
- public ExecutionContext getContext() {
|
|
|
- return context;
|
|
|
- }
|
|
|
-
|
|
|
- @After
|
|
|
- public void tearDown() {
|
|
|
- context = null;
|
|
|
- }
|
|
|
-}
|