From c829f5a45a8b0dc0f263bed3a3d2af830bae0af0 Mon Sep 17 00:00:00 2001 From: Cookiebowser <lucas.doering@live.de> Date: Mon, 13 Mar 2023 14:32:20 +0100 Subject: [PATCH] fixed some test-cases that I broke for other languages --- .../codegenerator/generators/DeclarationGenerator.java | 5 ++++- .../codegenerator/generators/ExpressionGenerator.java | 5 ++++- .../codegenerator/generators/MachineGenerator.java | 4 ++-- .../stups/codegenerator/generators/TypeGenerator.java | 1 + .../java/de/hhu/stups/codegenerator/java/TestJava.java | 8 ++++---- .../codegenerator/rust_embedded/TestRelation.java | 9 +++++---- .../de/hhu/stups/codegenerator/FunctionalOverride.mch | 10 ++++++---- .../de/hhu/stups/codegenerator/Intersection.out | 2 +- .../hhu/stups/codegenerator/IntersectionAddition.strs | 4 ++-- .../resources/de/hhu/stups/codegenerator/Override.mch | 2 +- .../de/hhu/stups/codegenerator/OverrideAddition.strs | 6 +----- .../de/hhu/stups/codegenerator/RangeRestriction.out | 2 +- .../stups/codegenerator/RangeRestrictionAddition.strs | 2 +- 13 files changed, 33 insertions(+), 27 deletions(-) diff --git a/src/main/java/de/hhu/stups/codegenerator/generators/DeclarationGenerator.java b/src/main/java/de/hhu/stups/codegenerator/generators/DeclarationGenerator.java index 47d42d725..f8f0fda99 100644 --- a/src/main/java/de/hhu/stups/codegenerator/generators/DeclarationGenerator.java +++ b/src/main/java/de/hhu/stups/codegenerator/generators/DeclarationGenerator.java @@ -37,11 +37,12 @@ public class DeclarationGenerator { private final DeferredSetAnalyzer deferredSetAnalyzer; private final SetDefinitions setDefinitions; + private final boolean forEmbedded; public DeclarationGenerator(final STGroup currentGroup, final MachineGenerator machineGenerator, final TypeGenerator typeGenerator, final ImportGenerator importGenerator, final NameHandler nameHandler, final DeferredSetAnalyzer deferredSetAnalyzer, - final SetDefinitions setDefinitions) { + final SetDefinitions setDefinitions, final boolean forEmbedded) { this.currentGroup = currentGroup; this.machineGenerator = machineGenerator; this.typeGenerator = typeGenerator; @@ -52,6 +53,7 @@ public class DeclarationGenerator { this.setToEnum = new HashMap<>(); this.enumToMachine = new HashMap<>(); this.setDefinitions = setDefinitions; + this.forEmbedded = forEmbedded; } /* @@ -309,6 +311,7 @@ public class DeclarationGenerator { } public String generateSetEnumName(BType type) { + if (!this.forEmbedded) return ""; if (type instanceof EnumeratedSetElementType) return ((EnumeratedSetElementType)type).getSetName(); if (type instanceof BoolType) return "BOOL"; //TODO? diff --git a/src/main/java/de/hhu/stups/codegenerator/generators/ExpressionGenerator.java b/src/main/java/de/hhu/stups/codegenerator/generators/ExpressionGenerator.java index 813cff562..24187391a 100644 --- a/src/main/java/de/hhu/stups/codegenerator/generators/ExpressionGenerator.java +++ b/src/main/java/de/hhu/stups/codegenerator/generators/ExpressionGenerator.java @@ -172,11 +172,12 @@ public class ExpressionGenerator { private final IterationConstructHandler iterationConstructHandler; private SetDefinitions setDefinitions; + private final boolean forEmbedded; public ExpressionGenerator(final GeneratorMode mode, final STGroup currentGroup, final MachineGenerator machineGenerator, boolean useBigInteger, String minint, String maxint, final NameHandler nameHandler, final ImportGenerator importGenerator, final DeclarationGenerator declarationGenerator, final IdentifierGenerator identifierGenerator, final TypeGenerator typeGenerator, - final IterationConstructHandler iterationConstructHandler, final RecordStructGenerator recordStructGenerator, SetDefinitions setDefinitions) { + final IterationConstructHandler iterationConstructHandler, final RecordStructGenerator recordStructGenerator, SetDefinitions setDefinitions, boolean forEmbedded) { this.mode = mode; this.currentGroup = currentGroup; this.machineGenerator = machineGenerator; @@ -192,6 +193,7 @@ public class ExpressionGenerator { this.iterationConstructHandler.setExpressionGenerator(this); this.recordStructGenerator = recordStructGenerator; this.setDefinitions = setDefinitions; + this.forEmbedded = forEmbedded; } /* @@ -475,6 +477,7 @@ public class ExpressionGenerator { } private void addElementToConstSet(ExprNode expr) { + if (!this.forEmbedded) return; if (!(expr.getType() instanceof SetType)) return; BType subType = ((SetType) expr.getType()).getSubType(); SetDefinition setDef = typeGenerator.addSetDefinition(subType, true); //create const-setDef is necessary diff --git a/src/main/java/de/hhu/stups/codegenerator/generators/MachineGenerator.java b/src/main/java/de/hhu/stups/codegenerator/generators/MachineGenerator.java index 694804bb9..5eba60827 100755 --- a/src/main/java/de/hhu/stups/codegenerator/generators/MachineGenerator.java +++ b/src/main/java/de/hhu/stups/codegenerator/generators/MachineGenerator.java @@ -175,9 +175,9 @@ public class MachineGenerator implements AbstractVisitor<String, Void> { this.infiniteSetGenerator = new InfiniteSetGenerator(currentGroup, this, nameHandler); this.identifierGenerator = new IdentifierGenerator(currentGroup, this, nameHandler, parallelConstructHandler, declarationGenerator); this.recordStructGenerator = new RecordStructGenerator(currentGroup, this, typeGenerator, importGenerator, nameHandler); - this.declarationGenerator = new DeclarationGenerator(currentGroup, this, typeGenerator, importGenerator, nameHandler, deferredSetAnalyzer, setDefinitions); + this.declarationGenerator = new DeclarationGenerator(currentGroup, this, typeGenerator, importGenerator, nameHandler, deferredSetAnalyzer, setDefinitions, forEmbedded); this.expressionGenerator = new ExpressionGenerator(mode, currentGroup, this, useBigInteger, minint, maxint, nameHandler, importGenerator, - declarationGenerator, identifierGenerator, typeGenerator, iterationConstructHandler, recordStructGenerator, setDefinitions); + declarationGenerator, identifierGenerator, typeGenerator, iterationConstructHandler, recordStructGenerator, setDefinitions, forEmbedded); this.predicateGenerator = new PredicateGenerator(currentGroup, this, nameHandler, importGenerator, iterationConstructHandler, infiniteSetGenerator); this.lambdaFunctionGenerator = new LambdaFunctionGenerator(currentGroup, expressionGenerator, predicateGenerator, typeGenerator, declarationGenerator); this.recordStructAnalyzer = new RecordStructAnalyzer(recordStructGenerator); diff --git a/src/main/java/de/hhu/stups/codegenerator/generators/TypeGenerator.java b/src/main/java/de/hhu/stups/codegenerator/generators/TypeGenerator.java index d6e1463fc..44e1490fe 100644 --- a/src/main/java/de/hhu/stups/codegenerator/generators/TypeGenerator.java +++ b/src/main/java/de/hhu/stups/codegenerator/generators/TypeGenerator.java @@ -168,6 +168,7 @@ public class TypeGenerator { public SetDefinition addSetDefinition(BType type) { return this.addSetDefinition(type, false); } public SetDefinition addSetDefinition(BType type, boolean constant) { + if (!this.forEmbedded) return null; SetDefinition existingDef = this.setDefinitions.getDefinition(type); if (existingDef != null) { if (constant || !existingDef.isConstant()) return existingDef; //returns dynamic set if it exists, even if constant set is 'requested'. Caller needs to check for that. (we only keep const-definitions if there is no dynamic one) diff --git a/src/test/java/de/hhu/stups/codegenerator/java/TestJava.java b/src/test/java/de/hhu/stups/codegenerator/java/TestJava.java index 69cfb4095..7bb965218 100755 --- a/src/test/java/de/hhu/stups/codegenerator/java/TestJava.java +++ b/src/test/java/de/hhu/stups/codegenerator/java/TestJava.java @@ -121,9 +121,9 @@ public class TestJava { return; } - String generatedMachinePath = Paths.get("build", "resources", "test", "de", "hhu", "stups", "codegenerator", machinePath.substring(0, machinePath.length() - machineName.length()) + " " + machineName).toString(); - - Process executeProcess = runtime.exec("java -cp btypes.jar:" + generatedMachinePath); + String generatedMachinePath = Paths.get("build", "resources", "test", "de", "hhu", "stups", "codegenerator", machinePath.substring(0, machinePath.length() - machineName.length())).toString(); + String separator = ";"; // For windows, use ';', UNIX ':' + Process executeProcess = runtime.exec("java -cp \"btypes.jar" + separator + generatedMachinePath + "\" " + machineName); executeProcess.waitFor(); error = streamToString(executeProcess.getErrorStream()); @@ -131,7 +131,7 @@ public class TestJava { throw new RuntimeException(error); } - String result = streamToString(executeProcess.getInputStream()).replaceAll("\n", ""); + String result = streamToString(executeProcess.getInputStream()).replaceAll("[\n\r]", ""); String expectedOutput = streamToString(new FileInputStream(mainPath.toFile().getAbsoluteFile().toString().replaceAll(".java", ".out"))).replaceAll("\n", ""); System.out.println("Assert: " + result + " = " + expectedOutput); diff --git a/src/test/java/de/hhu/stups/codegenerator/rust_embedded/TestRelation.java b/src/test/java/de/hhu/stups/codegenerator/rust_embedded/TestRelation.java index 7c8cb5b20..62716fd28 100644 --- a/src/test/java/de/hhu/stups/codegenerator/rust_embedded/TestRelation.java +++ b/src/test/java/de/hhu/stups/codegenerator/rust_embedded/TestRelation.java @@ -110,26 +110,27 @@ public class TestRelation extends TestRSE { - @Test + @Test(expected = RuntimeException.class) //grows to big for embedded public void testRelationGeneralizedUnion() throws Exception { testRSE("RelationGeneralizedUnion", "RelationGeneralizedUnionAddition.strs"); } - @Test + @Test(expected = RuntimeException.class) //grows to big for embedded public void testRelationGeneralizedUnionEmpty() throws Exception { testRSE("RelationGeneralizedUnionEmpty", "RelationGeneralizedUnionEmptyAddition.strs"); } - @Test + @Test(expected = RuntimeException.class) //grows to big for embedded public void testRelationGeneralizedIntersection() throws Exception { testRSE("RelationGeneralizedIntersection", "RelationGeneralizedIntersectionAddition.strs"); } - @Test + @Test(expected = RuntimeException.class) //grows to big for embedded public void testRelationGeneralizedIntersectionEmpty() throws Exception { testRSE("RelationGeneralizedIntersectionEmpty", "RelationGeneralizedIntersectionEmptyAddition.strs"); } + @Test public void testFunctionalOverride() throws Exception { testRSE("FunctionalOverride", "FunctionalOverrideAddition.strs"); diff --git a/src/test/resources/de/hhu/stups/codegenerator/FunctionalOverride.mch b/src/test/resources/de/hhu/stups/codegenerator/FunctionalOverride.mch index b0bc824c6..810aa901a 100644 --- a/src/test/resources/de/hhu/stups/codegenerator/FunctionalOverride.mch +++ b/src/test/resources/de/hhu/stups/codegenerator/FunctionalOverride.mch @@ -1,14 +1,16 @@ MACHINE FunctionalOverride +SETS EINT = {ZERO, ONE, TWO, THREE, FOUR} + VARIABLES f, s -INVARIANT f : INT --> INT & s : INT +INVARIANT f : EINT --> EINT & s : EINT -INITIALISATION f := {0|->0, 1|->1, 2|->2}; s := 3 +INITIALISATION f := {ZERO|->ZERO, ONE|->ONE, TWO|->TWO}; s := THREE OPERATIONS - calculate = BEGIN s := f(1) END; - out <-- getRes = out := s + calculate = BEGIN s := f(ONE) END; + out <-- getRes = IF s = ONE THEN out := 1 ELSE out := 0 END END \ No newline at end of file diff --git a/src/test/resources/de/hhu/stups/codegenerator/Intersection.out b/src/test/resources/de/hhu/stups/codegenerator/Intersection.out index 6d9d648d4..53bc05aa2 100644 --- a/src/test/resources/de/hhu/stups/codegenerator/Intersection.out +++ b/src/test/resources/de/hhu/stups/codegenerator/Intersection.out @@ -1 +1 @@ -{2} \ No newline at end of file +{TWO} \ No newline at end of file diff --git a/src/test/resources/de/hhu/stups/codegenerator/IntersectionAddition.strs b/src/test/resources/de/hhu/stups/codegenerator/IntersectionAddition.strs index 4fa58faa9..4424b86ed 100644 --- a/src/test/resources/de/hhu/stups/codegenerator/IntersectionAddition.strs +++ b/src/test/resources/de/hhu/stups/codegenerator/IntersectionAddition.strs @@ -3,8 +3,8 @@ fn main() { intersection.calculate(); let res = intersection.getRes(); if res.card() == 1 && res.elementOf(&EINT::TWO) { - println!("{{2}}"); + println!("{{TWO}}"); } else { println!("Wrong output! Card is: {}", res.card()) } -} \ No newline at end of file +} diff --git a/src/test/resources/de/hhu/stups/codegenerator/Override.mch b/src/test/resources/de/hhu/stups/codegenerator/Override.mch index 9deab40aa..fca38402f 100644 --- a/src/test/resources/de/hhu/stups/codegenerator/Override.mch +++ b/src/test/resources/de/hhu/stups/codegenerator/Override.mch @@ -11,6 +11,6 @@ INITIALISATION f := {ZERO|->ZERO, ONE|->ONE, TWO|->TWO}; s := {ONE|->THREE}; r:= OPERATIONS calculate = BEGIN r := r <+ s END; - out <-- getRes = out := r(ONE) + out <-- getRes = IF r(ONE) = THREE THEN out := 3 ELSE out := 0 END END \ No newline at end of file diff --git a/src/test/resources/de/hhu/stups/codegenerator/OverrideAddition.strs b/src/test/resources/de/hhu/stups/codegenerator/OverrideAddition.strs index 60983cf4b..eae483208 100644 --- a/src/test/resources/de/hhu/stups/codegenerator/OverrideAddition.strs +++ b/src/test/resources/de/hhu/stups/codegenerator/OverrideAddition.strs @@ -1,9 +1,5 @@ fn main() { let mut _override = Override::new(); _override.calculate(); - if _override.getRes().eq(&EINT::THREE) { - println!("3"); - } else { - println!("Wrong result!"); - } + println!("{}", _override.getRes()); } \ No newline at end of file diff --git a/src/test/resources/de/hhu/stups/codegenerator/RangeRestriction.out b/src/test/resources/de/hhu/stups/codegenerator/RangeRestriction.out index bc138e2a8..331f77c33 100644 --- a/src/test/resources/de/hhu/stups/codegenerator/RangeRestriction.out +++ b/src/test/resources/de/hhu/stups/codegenerator/RangeRestriction.out @@ -1 +1 @@ -{(1 |-> 2)} \ No newline at end of file +{(ONE |-> TWO)} \ No newline at end of file diff --git a/src/test/resources/de/hhu/stups/codegenerator/RangeRestrictionAddition.strs b/src/test/resources/de/hhu/stups/codegenerator/RangeRestrictionAddition.strs index 9d6495520..9b5770b67 100644 --- a/src/test/resources/de/hhu/stups/codegenerator/RangeRestrictionAddition.strs +++ b/src/test/resources/de/hhu/stups/codegenerator/RangeRestrictionAddition.strs @@ -3,7 +3,7 @@ fn main() { range.calculate(); let res = range.getRes(); if res.card() == 1 && res.functionCall(&EINT::ONE).eq(&EINT::TWO) { - println!("{{(1 |-> 2)}}"); + println!("{{(ONE |-> TWO)}}"); } else { println!("Wrong result!"); } -- GitLab