diff --git a/src/main/java/de/tla2b/analysis/InstanceTransformation.java b/src/main/java/de/tla2b/analysis/InstanceTransformation.java index a3848880a94c8c07602f146c7243f7a40d16953e..3e578c4c7332c2960c85e464f6f7bb4f362a3521 100644 --- a/src/main/java/de/tla2b/analysis/InstanceTransformation.java +++ b/src/main/java/de/tla2b/analysis/InstanceTransformation.java @@ -4,11 +4,9 @@ package de.tla2b.analysis; - import java.util.Hashtable; import de.tla2b.global.BBuiltInOPs; - import tla2sany.semantic.ASTConstants; import tla2sany.semantic.AbortException; import tla2sany.semantic.AtNode; @@ -16,6 +14,7 @@ import tla2sany.semantic.Context; import tla2sany.semantic.ExprNode; import tla2sany.semantic.ExprOrOpArgNode; import tla2sany.semantic.FormalParamNode; +import tla2sany.semantic.InstanceNode; import tla2sany.semantic.LetInNode; import tla2sany.semantic.ModuleNode; import tla2sany.semantic.NumeralNode; @@ -35,6 +34,7 @@ public class InstanceTransformation extends BuiltInOPs implements ASTConstants { Hashtable<String, OpDefNode> defsHash; private int substitutionId = 11; + /** * @param con */ @@ -43,7 +43,8 @@ public class InstanceTransformation extends BuiltInOPs implements ASTConstants { defsHash = new Hashtable<String, OpDefNode>(); for (int i = 0; i < defs.length; i++) { - defsHash.put(defs[i].getName().toString(), defs[i]); + OpDefNode def = defs[i]; + defsHash.put(def.getName().toString(), def); } } @@ -51,23 +52,26 @@ public class InstanceTransformation extends BuiltInOPs implements ASTConstants { * @throws AbortException * */ - public void start() { + public void start() { for (int i = 0; i < defs.length; i++) { OpDefNode def = defs[i]; if (def.getSource() != def && !BBuiltInOPs.contains(def.getSource().getName())) { // instance String defName = def.getName().toString(); - String prefix = defName.substring(0, - defName.lastIndexOf('!') + 1); - def.setParams(generateNewParams(def.getParams())); - ExprNode body; - try { - body = generateNewExprNode(def.getBody(), prefix); - } catch (AbortException e) { - throw new RuntimeException(); + + if (def.getBody() instanceof SubstInNode) { + String prefix = defName.substring(0, + defName.lastIndexOf('!') + 1); + def.setParams(generateNewParams(def.getParams())); + ExprNode body; + try { + body = generateNewExprNode(def.getBody(), prefix); + } catch (AbortException e) { + throw new RuntimeException(); + } + def.setBody(body); } - def.setBody(body); } } } @@ -116,7 +120,8 @@ public class InstanceTransformation extends BuiltInOPs implements ASTConstants { Subst[] subs = substInNode.getSubsts(); for (int i = 0; i < subs.length; i++) { OpDeclNode op = subs[i].getOp(); - op.setToolObject(substitutionId, subs[i].getExpr()); + ExprOrOpArgNode expr = subs[i].getExpr(); + op.setToolObject(substitutionId, expr); } return generateNewExprNode(substInNode.getBody(), prefix); } @@ -195,8 +200,7 @@ public class InstanceTransformation extends BuiltInOPs implements ASTConstants { FormalParamNode f = (FormalParamNode) n.getOperator() .getToolObject(substitutionId); if (f == null) { - System.out.println(n.toString(4)); - System.out.println(n); + throw new RuntimeException(); } return new OpApplNode(f, generateNewArgs(n.getArgs(), prefix), n.getTreeNode(), null); @@ -224,8 +228,11 @@ public class InstanceTransformation extends BuiltInOPs implements ASTConstants { // normal userdefined Operator String opName = prefix + n.getOperator().getName().toString(); OpDefNode op = defsHash.get(opName); - return new OpApplNode(op, generateNewArgs(n.getArgs(), prefix), - n.getTreeNode(), null); + if (op == null) { + throw new RuntimeException(); + } + return new OpApplNode(op, generateNewArgs(n.getArgs(), + prefix), n.getTreeNode(), null); } } throw new RuntimeException("OpApplkind not implemented jet"); diff --git a/src/main/java/de/tla2b/analysis/SpecAnalyser.java b/src/main/java/de/tla2b/analysis/SpecAnalyser.java index fbf363c760984238d6cb47f5035eed0a95b2b560..c28f195b7e763270a6e61b1c95e73e2a8f2a05c0 100644 --- a/src/main/java/de/tla2b/analysis/SpecAnalyser.java +++ b/src/main/java/de/tla2b/analysis/SpecAnalyser.java @@ -260,9 +260,10 @@ public class SpecAnalyser extends BuiltInOPs implements ASTConstants, Set<OpDefNode> set = new HashSet<OpDefNode>(usedDefinitions); for (OpDefNode def : set) { if (def.getInRecursive()) { - bDefinitionsSet.remove(def); - RecursiveDefinition rd = new RecursiveDefinition(def); - recursiveDefinitions.add(rd); + throw new NotImplementedException("Recursive definitions are currently not supported."); +// bDefinitionsSet.remove(def); +// RecursiveDefinition rd = new RecursiveDefinition(def); +// recursiveDefinitions.add(rd); } else if (def.getBody() instanceof OpApplNode) { OpApplNode o = (OpApplNode) def.getBody(); diff --git a/src/main/java/de/tla2b/analysis/TypeChecker.java b/src/main/java/de/tla2b/analysis/TypeChecker.java index a2a965cdd9181208d8a1bf6f45fb062163c1b1d4..c090fceb3f44c947ae28b066ed462b86e07f96ca 100644 --- a/src/main/java/de/tla2b/analysis/TypeChecker.java +++ b/src/main/java/de/tla2b/analysis/TypeChecker.java @@ -99,6 +99,7 @@ public class TypeChecker extends BuiltInOPs implements ASTConstants, BBuildIns, OpDeclNode con = cons[i]; if (constantAssignments != null && constantAssignments.containsKey(con)) { + TLAType t = constantAssignments.get(con).getType(); con.setToolObject(TYPE_ID, t); if (t instanceof AbstractHasFollowers) { @@ -224,7 +225,6 @@ public class TypeChecker extends BuiltInOPs implements ASTConstants, BBuildIns, } if (usedDefinitions.contains(def)) visitOpDefNode(def); - } } @@ -246,7 +246,10 @@ public class TypeChecker extends BuiltInOPs implements ASTConstants, BBuildIns, p.setToolObject(paramId, u); u.addFollower(p); } - TLAType defType = visitExprNode(def.getBody(), new UntypedType()); + UntypedType u = new UntypedType(); + // def.setToolObject(TYPE_ID, u); + // u.addFollower(def); + TLAType defType = visitExprNode(def.getBody(), u); def.setToolObject(TYPE_ID, defType); if (defType instanceof AbstractHasFollowers) { ((AbstractHasFollowers) defType).addFollower(def); @@ -826,10 +829,10 @@ public class TypeChecker extends BuiltInOPs implements ASTConstants, BBuildIns, domType = visitExprOrOpArgNode(n.getArgs()[1], new UntypedType()); } + FunctionType func = new FunctionType(domType, expected); - FunctionType res = (FunctionType) visitExprOrOpArgNode( - n.getArgs()[0], func); - return res.getRange(); + TLAType res = visitExprOrOpArgNode(n.getArgs()[0], func); + return ((FunctionType) res).getRange(); } /*********************************************************************** diff --git a/src/main/java/de/tla2b/config/ModuleOverrider.java b/src/main/java/de/tla2b/config/ModuleOverrider.java index d3a95f7d406af9c053f6ae8677fb008c8500f71f..fff7afe5db53ad9da1451b4e3cfabae213c59cd4 100644 --- a/src/main/java/de/tla2b/config/ModuleOverrider.java +++ b/src/main/java/de/tla2b/config/ModuleOverrider.java @@ -220,9 +220,12 @@ public class ModuleOverrider extends BuiltInOPs implements ASTConstants { for (int i = 0; i < n.getArgs().length; i++) { if (n.getArgs()[i] != null) { - OpApplNode res = visitExprOrOpArgNode(n.getArgs()[i]); - if (res != null) { - n.getArgs()[i] = res; + ExprOrOpArgNode arg =n.getArgs()[i]; + if(arg != null){ + OpApplNode res = visitExprOrOpArgNode(n.getArgs()[i]); + if (res != null) { + n.getArgs()[i] = res; + } } } diff --git a/src/main/java/de/tla2b/output/ASTPrettyPrinter.java b/src/main/java/de/tla2b/output/ASTPrettyPrinter.java index a0359d0c4d6c1cf8610ec40b77e9818c61d52706..d89e24030c51ff9f7f772c3bf4bd32f652d0ca2a 100644 --- a/src/main/java/de/tla2b/output/ASTPrettyPrinter.java +++ b/src/main/java/de/tla2b/output/ASTPrettyPrinter.java @@ -9,12 +9,12 @@ import de.be4.classicalb.core.parser.analysis.ExtendedDFAdapter; import de.be4.classicalb.core.parser.node.AAbstractMachineParseUnit; import de.be4.classicalb.core.parser.node.AAnySubstitution; import de.be4.classicalb.core.parser.node.ABecomesSuchSubstitution; +import de.be4.classicalb.core.parser.node.AConstantsMachineClause; import de.be4.classicalb.core.parser.node.ADefinitionExpression; import de.be4.classicalb.core.parser.node.ADefinitionPredicate; import de.be4.classicalb.core.parser.node.AExpressionDefinitionDefinition; import de.be4.classicalb.core.parser.node.AIdentifierExpression; import de.be4.classicalb.core.parser.node.ALambdaExpression; -import de.be4.classicalb.core.parser.node.AMinusOrSetSubtractExpression; import de.be4.classicalb.core.parser.node.AOperation; import de.be4.classicalb.core.parser.node.AOperationsMachineClause; import de.be4.classicalb.core.parser.node.APredicateDefinitionDefinition; @@ -103,6 +103,8 @@ public class ASTPrettyPrinter extends ExtendedDFAdapter { putDeclarationClause("ASetsMachineClause", "SETS", ";"); putDeclarationClause("AAbstractConstantsMachineClause", "ABSTRACT_CONSTANTS", ","); + putDeclarationClause("AConstantsMachineClause", + "CONSTANTS", ","); putDeclarationClause("AVariablesMachineClause", "VARIABLES", ","); put("AEnumeratedSetSet", null, null, ", ", null, " = {", "}"); diff --git a/src/main/java/de/tla2b/translation/BDefinitionsFinder.java b/src/main/java/de/tla2b/translation/BDefinitionsFinder.java index 867822f6e78c2fb373d3feb40017bcd179759194..4ffc6069f0c29610e6eb9dccf7401d97c8853bd1 100644 --- a/src/main/java/de/tla2b/translation/BDefinitionsFinder.java +++ b/src/main/java/de/tla2b/translation/BDefinitionsFinder.java @@ -53,8 +53,9 @@ public class BDefinitionsFinder extends AbstractASTVisitor implements public void visitUserDefinedNode(OpApplNode n) { OpDefNode def = (OpDefNode) n.getOperator(); - bDefinitionsSet.add(def); - visitExprNode(def.getBody()); + if(bDefinitionsSet.add(def)){ + visitExprNode(def.getBody()); + } for (ExprOrOpArgNode exprOrOpArgNode : n.getArgs()) { visitExprOrOpArgNode(exprOrOpArgNode); } diff --git a/src/main/java/de/tla2b/types/TupleType.java b/src/main/java/de/tla2b/types/TupleType.java index 71ed583e283687094a3a5e6c49707d2c519e3779..0c22efd19f312a081a6dba3cf104b1ccfe654f1e 100644 --- a/src/main/java/de/tla2b/types/TupleType.java +++ b/src/main/java/de/tla2b/types/TupleType.java @@ -87,6 +87,9 @@ public class TupleType extends AbstractHasFollowers { return false; } } + if(!compareToAll(range)){ + return false; + } return true; } return false; diff --git a/src/main/java/de/tla2bAst/BAstCreator.java b/src/main/java/de/tla2bAst/BAstCreator.java index 469b7c051c9dddde4b2f9f449073fb40ca65947e..cc6d9f61b55730fa5984ed9efd8502e3cd8ca1fa 100644 --- a/src/main/java/de/tla2bAst/BAstCreator.java +++ b/src/main/java/de/tla2bAst/BAstCreator.java @@ -26,6 +26,7 @@ import tla2sany.semantic.SymbolNode; import tlc2.tool.BuiltInOPs; import tlc2.value.ModelValue; import tlc2.value.SetEnumValue; +import tlc2.value.StringValue; import tlc2.value.Value; import tlc2.value.ValueConstants; import de.be4.classicalb.core.parser.Definitions; @@ -123,6 +124,7 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals, createSetsClause(); createDefintionClause(); + createAbstractConstantsClause(); createConstantsClause(); createPropertyClause(); createVariableClause(); @@ -406,29 +408,16 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals, } } - private void createConstantsClause() { - List<OpDeclNode> bConstants; - if (conEval != null) { - bConstants = conEval.getbConstantList(); - } else { - bConstants = Arrays.asList(moduleNode.getConstantDecls()); - } - + private void createAbstractConstantsClause() { List<PExpression> constantsList = new ArrayList<PExpression>(); - for (OpDeclNode opDeclNode : bConstants) { - AIdentifierExpression id = new AIdentifierExpression( - createTIdentifierLiteral(getName(opDeclNode))); - constantsList.add(id); - TLAType type = (TLAType) opDeclNode.getToolObject(TYPE_ID); - typeTable.put(id, type); - } for (RecursiveDefinition recDef : specAnalyser .getRecursiveDefinitions()) { AIdentifierExpression id = new AIdentifierExpression( createTIdentifierLiteral(getName(recDef.getOpDefNode()))); constantsList.add(id); - TLAType type = (TLAType) recDef.getOpDefNode().getToolObject(TYPE_ID); + TLAType type = (TLAType) recDef.getOpDefNode().getToolObject( + TYPE_ID); typeTable.put(id, type); } @@ -445,9 +434,29 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals, constantsList); machineClauseList.add(abstractConstantsClause); } - - + } + + private void createConstantsClause() { + List<OpDeclNode> bConstants; + if (conEval != null) { + bConstants = conEval.getbConstantList(); + } else { + bConstants = Arrays.asList(moduleNode.getConstantDecls()); + } + List<PExpression> constantsList = new ArrayList<PExpression>(); + for (OpDeclNode opDeclNode : bConstants) { + AIdentifierExpression id = new AIdentifierExpression( + createTIdentifierLiteral(getName(opDeclNode))); + constantsList.add(id); + TLAType type = (TLAType) opDeclNode.getToolObject(TYPE_ID); + typeTable.put(id, type); + } + if (constantsList.size() > 0) { + AConstantsMachineClause constantsClause = new AConstantsMachineClause( + constantsList); + machineClauseList.add(constantsClause); + } } public AIdentifierExpression createIdentifierNode(SymbolNode symbolNode) { @@ -609,17 +618,25 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals, ArrayList<PExpression> list = new ArrayList<PExpression>(); for (int i = 0; i < s.elems.size(); i++) { Value v = s.elems.elementAt(i); - ModelValue m = (ModelValue) v; - AIdentifierExpression id = createIdentifierNode(m.toString()); - list.add(id); + list.add(createTLCValue(v)); } return new ASetExtensionExpression(list); } - + case MODELVALUE: { + ModelValue m = (ModelValue) tlcValue; + return createIdentifierNode(m.toString()); } - System.out.println(tlcValue); - throw new RuntimeException(); + case STRINGVALUE: { + StringValue stringValue = (StringValue) tlcValue; + return new AStringExpression(new TStringLiteral(stringValue + .getVal().toString())); + + } + default: + throw new NotImplementedException( + "TLC value in configuration file: " + tlcValue.getClass()); + } } private void createInvariantClause() { diff --git a/src/test/java/de/tla2b/prettyprintb/ExceptTest.java b/src/test/java/de/tla2b/prettyprintb/ExceptTest.java index d7952e0f8bb2a9feb6e09676f200184298a59a60..bf758be05efba49326ba8c60b2033b7d57f08def 100644 --- a/src/test/java/de/tla2b/prettyprintb/ExceptTest.java +++ b/src/test/java/de/tla2b/prettyprintb/ExceptTest.java @@ -1,13 +1,11 @@ package de.tla2b.prettyprintb; import static de.tla2b.util.TestUtil.compare; -import static org.junit.Assert.assertEquals; import org.junit.Ignore; import org.junit.Test; import util.ToolIO; -import de.tla2b.util.TestUtil; public class ExceptTest { @@ -18,7 +16,7 @@ public class ExceptTest { + "ASSUME k = [k EXCEPT ![TRUE] = 0, ![FALSE] = 0] \n" + "================================="; - final String expected = "MACHINE Testing\n" + "ABSTRACT_CONSTANTS k\n" + final String expected = "MACHINE Testing\n" + "CONSTANTS k\n" + "PROPERTIES " + " k : BOOL +-> INTEGER " + "& k = k <+ {TRUE |-> 0, FALSE |-> 0}" + "END"; compare(expected, module); @@ -31,7 +29,7 @@ public class ExceptTest { + "ASSUME k = [k EXCEPT ![TRUE] = 0, ![FALSE] = 0] \n" + "================================="; - final String expected = "MACHINE Testing\n" + "ABSTRACT_CONSTANTS k\n" + final String expected = "MACHINE Testing\n" + "CONSTANTS k\n" + "PROPERTIES " + " k : BOOL +-> INTEGER " + "& k = k <+ {TRUE |-> 0, FALSE |-> 0}" + "END"; compare(expected, module); @@ -47,7 +45,7 @@ public class ExceptTest { + "================================="; final String expected = "MACHINE Testing\n" - + "ABSTRACT_CONSTANTS k \n" + + "CONSTANTS k \n" + "PROPERTIES k : INTEGER +-> INTEGER & (k = %x.(x : {1, 2}| x) & (k <+ {1 |-> k(1) + 1})(1) = 2)\n" + "END"; compare(expected, module); @@ -63,11 +61,12 @@ public class ExceptTest { + "ASSUME k = [x,y \\in {1,2} |-> x+y] /\\ k2 = [k EXCEPT ![1,1] = @ + 4] \n" + "================================="; - final String expected = "MACHINE Testing\n" - + "ABSTRACT_CONSTANTS k, k2\n" + final String expected = "MACHINE Testing\n" + "CONSTANTS k, k2\n" + "PROPERTIES k : POW(INTEGER*INTEGER*INTEGER) " + "& k2 : POW(INTEGER*INTEGER*INTEGER) " + "& k = %x,y.(x : {1, 2} & y : {1, 2}| x + y) " + "& k2 = k <+ {(1, 1) |-> k(1, 1) + 4} \n" + "END"; + compare(expected, module); } + } diff --git a/src/test/java/de/tla2b/prettyprintb/ExtensibleRecordTest.java b/src/test/java/de/tla2b/prettyprintb/ExtensibleRecordTest.java index 9438ef8fbe49dcc0d5f098c6a02ba665bc033ca7..8f9b37bbfb562eff92907337eae5c6036fb6cb4e 100644 --- a/src/test/java/de/tla2b/prettyprintb/ExtensibleRecordTest.java +++ b/src/test/java/de/tla2b/prettyprintb/ExtensibleRecordTest.java @@ -38,7 +38,7 @@ public class ExtensibleRecordTest { + "================================="; final String expected = "MACHINE Testing\n" - + "ABSTRACT_CONSTANTS k \n" + + "CONSTANTS k \n" + "PROPERTIES k : struct(b:POW(BOOL * INTEGER), a:POW(BOOL * INTEGER)) & ((k = rec(b:{}, a:{(TRUE,1)}) & k /= rec(b:{(TRUE,1)}, a:{})) & (k'a)(TRUE) = 1) \n" + "END"; compare(expected, module); @@ -76,7 +76,7 @@ public class ExtensibleRecordTest { + "================================="; final String expected = "MACHINE Testing\n" - + "ABSTRACT_CONSTANTS k \n" + + "CONSTANTS k \n" + "PROPERTIES k : struct(a:POW(BOOL * INTEGER), b:POW(BOOL * BOOL)) & (k = rec(a:{(TRUE,1)}, b:{}) & TRUE = (k'b)(TRUE)) \n" + "END"; compare(expected, module); diff --git a/src/test/java/de/tla2b/prettyprintb/FunctionTest.java b/src/test/java/de/tla2b/prettyprintb/FunctionTest.java index 093344021ca97dccb584880e1a43fade6990340c..ee2f6722d9541518f9b25b06245533bc95a964eb 100644 --- a/src/test/java/de/tla2b/prettyprintb/FunctionTest.java +++ b/src/test/java/de/tla2b/prettyprintb/FunctionTest.java @@ -5,14 +5,10 @@ package de.tla2b.prettyprintb; import static de.tla2b.util.TestUtil.compare; -import static org.junit.Assert.assertEquals; import org.junit.Ignore; import org.junit.Test; -import de.tla2b.util.TestUtil; -import util.ToolIO; - public class FunctionTest { @Test @@ -23,7 +19,7 @@ public class FunctionTest { + "================================="; final String expected = "MACHINE Testing\n" - + "ABSTRACT_CONSTANTS k\n" + + "CONSTANTS k\n" + "PROPERTIES k : INTEGER +-> BOOL & k = %x.(x : {1}| bool(TRUE = TRUE)) \n" + "END"; compare(expected, module); @@ -37,7 +33,7 @@ public class FunctionTest { + "================================="; final String expected = "MACHINE Testing\n" - + "ABSTRACT_CONSTANTS k\n" + + "CONSTANTS k\n" + "PROPERTIES k : INTEGER * INTEGER +-> INTEGER & k = %x,y.(x : {1,2} & y : {1,2}| 1) \n" + "END"; compare(expected, module); @@ -51,7 +47,7 @@ public class FunctionTest { + "================================="; final String expected = "MACHINE Testing\n" - + "ABSTRACT_CONSTANTS k\n" + + "CONSTANTS k\n" + "PROPERTIES k : INTEGER * BOOL +-> INTEGER & k = %x,y.(x : {1} & y : BOOL| 1) \n" + "END"; compare(expected, module); @@ -72,7 +68,7 @@ public class FunctionTest { + "================================="; final String expected = "MACHINE Testing\n" - + "ABSTRACT_CONSTANTS k,k2,k3\n" + + "CONSTANTS k,k2,k3\n" + "PROPERTIES k : POW(INTEGER*INTEGER) & k2 : INTEGER & k3 : INTEGER \n" + " & k = fact & fact(k2) = k3 \n" + "DEFINITIONS IF_THEN_ELSE(P, a, b) == (%t_.(t_=TRUE & P = TRUE | a )\\/%t_.(t_=TRUE & not(P= TRUE) | b ))(TRUE); \n" @@ -126,7 +122,7 @@ public class FunctionTest { + "ASSUME k = [BOOLEAN -> {1}] \n" + "================================="; - final String expected = "MACHINE Testing\n" + "ABSTRACT_CONSTANTS k\n" + final String expected = "MACHINE Testing\n" + "CONSTANTS k\n" + "PROPERTIES k : POW(BOOL +-> INTEGER) & k = BOOL --> {1}" + "END"; compare(expected, module); diff --git a/src/test/java/de/tla2b/prettyprintb/LogicOperatorsTest.java b/src/test/java/de/tla2b/prettyprintb/LogicOperatorsTest.java index 164a417a422931f8d2ac2a9c4bfdcaddfca5908f..faf7234b1d243a0cc266e23e84f2e5840cd3d777 100644 --- a/src/test/java/de/tla2b/prettyprintb/LogicOperatorsTest.java +++ b/src/test/java/de/tla2b/prettyprintb/LogicOperatorsTest.java @@ -17,7 +17,7 @@ public class LogicOperatorsTest { + "ASSUME k = (2 # 1)\n" + "================================="; - final String expected = "MACHINE Testing\n" + "ABSTRACT_CONSTANTS k\n" + final String expected = "MACHINE Testing\n" + "CONSTANTS k\n" + "PROPERTIES k : BOOL & k = bool(2 /= 1)\n" + "END"; compare(expected, module); } @@ -29,7 +29,7 @@ public class LogicOperatorsTest { + "ASSUME k = TRUE\n" + "================================="; - final String expected = "MACHINE Testing\n" + "ABSTRACT_CONSTANTS k\n" + final String expected = "MACHINE Testing\n" + "CONSTANTS k\n" + "PROPERTIES k : BOOL & k = TRUE \n" + "END"; compare(expected, module); } @@ -53,7 +53,7 @@ public class LogicOperatorsTest { + "ASSUME k = (FALSE \\land TRUE) \n" + "================================="; final String expected = "MACHINE Testing\n" - + "ABSTRACT_CONSTANTS k\n" + + "CONSTANTS k\n" + "PROPERTIES k : BOOL & k = bool(FALSE = TRUE & TRUE = TRUE) \n" + "END"; compare(expected, module); @@ -146,7 +146,7 @@ public class LogicOperatorsTest { + "================================="; final String expected = "MACHINE Testing\n" - + "ABSTRACT_CONSTANTS S\n" + + "CONSTANTS S\n" + "PROPERTIES S : POW(INTEGER) & (S = {1, 2, 3} & #u.(u : seq(S) & !s.(s : S => #n.(n : 1 .. size(u) & u(n) = s)))) \n" + "END"; compare(expected, module); diff --git a/src/test/java/de/tla2b/prettyprintb/MacroTest.java b/src/test/java/de/tla2b/prettyprintb/MacroTest.java index 8a216417b5456d45528621221f14600f9fcff9a8..3eabe27bdbdb49308fef7442fb0ecc05e63975dd 100644 --- a/src/test/java/de/tla2b/prettyprintb/MacroTest.java +++ b/src/test/java/de/tla2b/prettyprintb/MacroTest.java @@ -96,7 +96,7 @@ public class MacroTest { final String expected = "MACHINE Testing\n" + "DEFINITIONS \n" + "def(y) == !(x_1).(x_1 : {1} => y = 3); \n" - + "ABSTRACT_CONSTANTS x\n" + + "CONSTANTS x\n" + "PROPERTIES x : INTEGER & (x = 3 & def(x)) \n" + "END"; compare(expected, module); } diff --git a/src/test/java/de/tla2b/prettyprintb/RecordTest.java b/src/test/java/de/tla2b/prettyprintb/RecordTest.java index 5fba3bc60d7fb5e766598d11d11f3722182654a7..175057c6967aab781a00af3d1aa157717a910c79 100644 --- a/src/test/java/de/tla2b/prettyprintb/RecordTest.java +++ b/src/test/java/de/tla2b/prettyprintb/RecordTest.java @@ -27,7 +27,7 @@ public class RecordTest { + "================================="; final String expected = "MACHINE Testing\n" - + "ABSTRACT_CONSTANTS k\n" + + "CONSTANTS k\n" + "PROPERTIES k : POW(struct(a:INTEGER, b:BOOL)) & k = struct(a : {1}, b : BOOL) \n" + "END"; compare(expected, module); @@ -45,7 +45,7 @@ public class RecordTest { + "================================="; final String expected = "MACHINE Testing\n" - + "ABSTRACT_CONSTANTS k\n" + + "CONSTANTS k\n" + "PROPERTIES k : struct(a:INTEGER, b:BOOL) & k = rec(a : 1, b : TRUE) \n" + "END"; compare(expected, module); @@ -88,7 +88,7 @@ public class RecordTest { + "================================="; final String expected = "MACHINE Testing\n" - + "ABSTRACT_CONSTANTS k\n" + + "CONSTANTS k\n" + "PROPERTIES k : struct(a:INTEGER, b:BOOL) & (k = rec(a : 1, b : TRUE) & k'b = TRUE) \n" + "END"; compare(expected, module); @@ -104,7 +104,7 @@ public class RecordTest { + "ASSUME k = [a |-> 1, b |-> TRUE] /\\ k2 = [k EXCEPT !.a = 2] \n" + "================================="; final String expected = "MACHINE Testing\n" - + "ABSTRACT_CONSTANTS k, k2\n" + + "CONSTANTS k, k2\n" + "PROPERTIES k : struct(a:INTEGER, b:BOOL) & k2 : struct(a:INTEGER, b:BOOL) & (k = rec(a : 1, b : TRUE) & k2 = rec(a : 2, b : k'b)) \n" + "END"; compare(expected, module); @@ -122,7 +122,7 @@ public class RecordTest { + "================================="; final String expected = "MACHINE Testing\n" - + "ABSTRACT_CONSTANTS k, k2\n" + + "CONSTANTS k, k2\n" + "PROPERTIES k : struct(a:INTEGER, b:BOOL) & k2 : struct(a:INTEGER, b:BOOL) & (k = rec(a : 1, b : TRUE) & k2 = rec(a : k'a + 1, b : k'b)) \n" + "END"; compare(expected, module); diff --git a/src/test/java/de/tla2b/prettyprintb/SetsClauseTest.java b/src/test/java/de/tla2b/prettyprintb/SetsClauseTest.java index 303283a3e12d6469e701d31c71e6b03ae6da903f..737c0593d5061a27e43bc9324435cd8f79b693cd 100644 --- a/src/test/java/de/tla2b/prettyprintb/SetsClauseTest.java +++ b/src/test/java/de/tla2b/prettyprintb/SetsClauseTest.java @@ -16,7 +16,7 @@ public class SetsClauseTest { final String expected = "MACHINE Testing\n" + "SETS ENUM1 = {s1,s2,s3} \n" - + "ABSTRACT_CONSTANTS S " + + "CONSTANTS S " + "PROPERTIES S = ENUM1 & S = S \n" + "END"; compare(expected, module, config); } diff --git a/src/test/java/de/tla2b/prettyprintb/SetsTest.java b/src/test/java/de/tla2b/prettyprintb/SetsTest.java index e1c16a71a57c0e5c6d1d2a1a6a18fcc67215c966..74f8ffa0bcfd05dcf4569a01ee6bbf73fe468355 100644 --- a/src/test/java/de/tla2b/prettyprintb/SetsTest.java +++ b/src/test/java/de/tla2b/prettyprintb/SetsTest.java @@ -17,7 +17,7 @@ public class SetsTest { + "ASSUME k = {1,2,3}\n" + "================================="; - final String expected = "MACHINE Testing\n" + "ABSTRACT_CONSTANTS k\n" + final String expected = "MACHINE Testing\n" + "CONSTANTS k\n" + "PROPERTIES k : POW(INTEGER) & k = {1,2,3} \n" + "END"; compare(expected, module); } @@ -29,7 +29,7 @@ public class SetsTest { + "ASSUME k = {TRUE, 1 = 1}\n" + "================================="; - final String expected = "MACHINE Testing\n" + "ABSTRACT_CONSTANTS k\n" + final String expected = "MACHINE Testing\n" + "CONSTANTS k\n" + "PROPERTIES k : POW(BOOL) & k = {TRUE, bool(1=1)} \n" + "END"; compare(expected, module); } diff --git a/src/test/java/de/tla2b/prettyprintb/TupleTest.java b/src/test/java/de/tla2b/prettyprintb/TupleTest.java index 514a145838df3c85f89ca0edbd486ca23837a494..d5e7472295f60b9ca7ff5c715315d523fea64542 100644 --- a/src/test/java/de/tla2b/prettyprintb/TupleTest.java +++ b/src/test/java/de/tla2b/prettyprintb/TupleTest.java @@ -39,7 +39,7 @@ public class TupleTest { + "ASSUME k = BOOLEAN \\X ({1} \\X BOOLEAN) \n" + "================================="; - final String expected = "MACHINE Testing\n"+ "ABSTRACT_CONSTANTS k\n" + final String expected = "MACHINE Testing\n"+ "CONSTANTS k\n" + "PROPERTIES k : POW(BOOL * (INTEGER * BOOL)) & k = BOOL*({1}*BOOL) \n" + "END"; compare(expected, module); } diff --git a/src/test/java/de/tla2b/typechecking/TupleTest.java b/src/test/java/de/tla2b/typechecking/TupleTest.java index 6671f089ace2e6be874f68568d0ba27d6bfdc2ea..2d4fe86ea1ae41e1de92c74b59e6d62925ca18d6 100644 --- a/src/test/java/de/tla2b/typechecking/TupleTest.java +++ b/src/test/java/de/tla2b/typechecking/TupleTest.java @@ -2,6 +2,7 @@ package de.tla2b.typechecking; import static org.junit.Assert.assertEquals; +import org.junit.Ignore; import org.junit.Test; import de.tla2b.exceptions.FrontEndException; @@ -24,6 +25,20 @@ public class TupleTest { TestTypeChecker t = TestUtil.typeCheckString(module); assertEquals("INTEGER*BOOL", t.getConstantType("k").toString()); } + + + @Ignore + @Test + public void testTupleFunctionCall() throws FrontEndException, TLA2BException { + final String module = "-------------- MODULE Testing ----------------\n" + + "EXTENDS Naturals \n" + + "CONSTANTS k \n" + + "ASSUME k = <<1,TRUE,1>>[2] \n" + + "================================="; + + TestTypeChecker t = TestUtil.typeCheckString(module); + assertEquals("ka", t.getConstantType("k").toString()); + } @Test public void testTuple3Components() throws FrontEndException, TLA2BException { diff --git a/src/test/resources/regression/Club/Club.prob b/src/test/resources/regression/Club/Club.prob deleted file mode 100644 index 037f9f3eb6bed1ed6af56bef64e201879f9ad7db..0000000000000000000000000000000000000000 --- a/src/test/resources/regression/Club/Club.prob +++ /dev/null @@ -1,3 +0,0 @@ -parser_version('2014-03-12 22:57:52.564'). -classical_b('Club',['/Users/hansen/git/tla2bAST/src/test/resources/regression/Club/Club.tla']). -machine(abstract_machine(1,machine(2),machine_header(3,'Club',[]),[sets(4,[enumerated_set(5,'ENUM1',[identifier(6,n1),identifier(7,n2),identifier(8,n3)])]),abstract_constants(9,[identifier(info(10,tla_type(integer)),capacity),identifier(info(11,tla_type(set(modelvalue))),'NAME'),identifier(info(12,tla_type(integer)),total)]),properties(13,conjunct(14,conjunct(15,conjunct(16,conjunct(17,conjunct(18,member(19,identifier(20,capacity),integer_set(21)),equal(22,identifier(23,'NAME'),identifier(24,'ENUM1'))),member(25,identifier(26,total),integer_set(27))),conjunct(28,member(29,identifier(30,capacity),natural_set(31)),equal(32,identifier(33,capacity),integer(34,2)))),greater(35,card(36,identifier(37,'NAME')),identifier(38,capacity))),conjunct(39,member(40,identifier(41,total),natural_set(42)),greater(43,identifier(44,total),integer(45,2))))),variables(46,[identifier(info(47,tla_type(set(modelvalue))),member),identifier(info(48,tla_type(set(modelvalue))),waiting)]),invariant(49,conjunct(50,member(51,identifier(52,member),pow_subset(53,identifier(54,'ENUM1'))),member(55,identifier(56,waiting),pow_subset(57,identifier(58,'ENUM1'))))),initialisation(59,becomes_such(60,[identifier(61,member),identifier(62,waiting)],conjunct(63,equal(64,identifier(65,member),empty_set(66)),equal(67,identifier(68,waiting),empty_set(69))))),operations(70,[operation(71,identifier(71,join_queue),[],[identifier(72,nn)],any(73,[identifier(74,member_n)],conjunct(75,conjunct(76,conjunct(77,conjunct(78,conjunct(79,member(80,identifier(81,nn),identifier(82,'NAME')),not_member(83,identifier(84,nn),identifier(85,member))),not_member(86,identifier(87,nn),identifier(88,waiting))),member(89,identifier(90,member_n),pow_subset(91,identifier(92,'ENUM1')))),less(93,card(94,identifier(95,waiting)),identifier(96,total))),equal(97,identifier(98,member_n),identifier(99,member))),assign(100,[identifier(101,waiting),identifier(102,member)],[union(103,identifier(104,waiting),set_extension(105,[identifier(106,nn)])),identifier(107,member_n)]))),operation(108,identifier(108,join),[],[identifier(109,nn)],select(110,conjunct(111,conjunct(112,conjunct(113,member(114,identifier(115,nn),identifier(116,'NAME')),member(117,identifier(118,nn),identifier(119,waiting))),less(120,card(121,identifier(122,member)),identifier(123,capacity))),less(124,card(125,identifier(126,member)),identifier(127,capacity))),assign(128,[identifier(129,member),identifier(130,waiting)],[union(131,identifier(132,member),set_extension(133,[identifier(134,nn)])),minus_or_set_subtract(135,identifier(136,waiting),set_extension(137,[identifier(138,nn)]))]),[])),operation(139,identifier(139,remove),[],[identifier(140,nn)],any(141,[identifier(142,waiting_n)],conjunct(143,conjunct(144,conjunct(145,member(146,identifier(147,nn),identifier(148,'NAME')),member(149,identifier(150,nn),identifier(151,member))),member(152,identifier(153,waiting_n),pow_subset(154,identifier(155,'ENUM1')))),equal(156,identifier(157,waiting_n),identifier(158,waiting))),assign(159,[identifier(160,member),identifier(161,waiting)],[minus_or_set_subtract(162,identifier(163,member),set_extension(164,[identifier(165,nn)])),identifier(166,waiting_n)])))])])).