From 50c7f12544869b0822d29385d76df81ca70f3a2b Mon Sep 17 00:00:00 2001 From: Michael Leuschel <leuschel@uni-duesseldorf.de> Date: Mon, 13 Feb 2023 13:00:34 +0100 Subject: [PATCH] add test Signed-off-by: Michael Leuschel <leuschel@uni-duesseldorf.de> --- src/main/java/de/tla2bAst/ExpressionTranslator.java | 1 + .../java/de/tla2b/expression/ComplexExpressionTest.java | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/main/java/de/tla2bAst/ExpressionTranslator.java b/src/main/java/de/tla2bAst/ExpressionTranslator.java index 7dd9bf0..76121df 100644 --- a/src/main/java/de/tla2bAst/ExpressionTranslator.java +++ b/src/main/java/de/tla2bAst/ExpressionTranslator.java @@ -216,6 +216,7 @@ public class ExpressionTranslator implements SyntaxTreeConstants { searchVarInSyntaxTree(expr); // this code seems to assume that there is no variable clash between outer and nested variables + // I guess the parser will then generate "Multiply-defined symbol ..." errors for (int i = 0; i < noVariables.size(); i++) { variables.remove(noVariables.get(i)); } diff --git a/src/test/java/de/tla2b/expression/ComplexExpressionTest.java b/src/test/java/de/tla2b/expression/ComplexExpressionTest.java index f8fc9f6..297a8a6 100644 --- a/src/test/java/de/tla2b/expression/ComplexExpressionTest.java +++ b/src/test/java/de/tla2b/expression/ComplexExpressionTest.java @@ -84,5 +84,12 @@ public class ComplexExpressionTest { compareExpr("CHOOSE({x|x:0..100 & x**3 - 20*x**2 + 7*x = 14388})", "CHOOSE x \\in 0..100: x^3 - 20*x^2 + 7*x = 14388"); } + @Test + public void testConstraintCHOOSENested() throws Exception { + compareExpr("CHOOSE({y|y : 0 .. 100 & y = CHOOSE({x|x : 0 .. 100 & x ** 3 - 20 * x ** 2 + 7 * x = 14388})})", + "CHOOSE y \\in 0..100: y = CHOOSE x \\in 0..100: x^3 - 20*x^2 + 7*x = 14388"); + } + // Note that for: CHOOSE x \in 0..100: x = CHOOSE x \in 0..100: x^3 - 20*x^2 + 7*x = 14388 + // we get an error: Multiply-defined symbol 'x': this definition or declaration conflicts } -- GitLab