From f9cf4ade7e88ec48a5408be0e74e4f5200c2906a Mon Sep 17 00:00:00 2001
From: Jan Gruteser <jan.gruteser@hhu.de>
Date: Mon, 13 Jan 2025 21:03:01 +0100
Subject: [PATCH] add missing cases and test for neg

---
 .../de/tla2b/analysis/PredicateVsExpression.java     |  3 ++-
 src/main/java/de/tla2bAst/BAstCreator.java           |  6 ++++--
 .../de/tla2b/typechecking/LogicOperatorsTest.java    | 12 ++++++++++++
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/src/main/java/de/tla2b/analysis/PredicateVsExpression.java b/src/main/java/de/tla2b/analysis/PredicateVsExpression.java
index ea0c647..1427941 100644
--- a/src/main/java/de/tla2b/analysis/PredicateVsExpression.java
+++ b/src/main/java/de/tla2b/analysis/PredicateVsExpression.java
@@ -50,7 +50,8 @@ public class PredicateVsExpression extends BuiltInOPs implements BBuildIns {
 				case OPCODE_lor: // \/
 				case OPCODE_equiv: // \equiv
 				case OPCODE_implies: // =>
-				case OPCODE_lnot: // \lnot
+				case OPCODE_neg: // \neg
+				case OPCODE_lnot: // ~ / \lnot
 				case OPCODE_be: // \E x \in S : P
 				case OPCODE_bf: // \A x \in S : P
 				case OPCODE_in: // \in
diff --git a/src/main/java/de/tla2bAst/BAstCreator.java b/src/main/java/de/tla2bAst/BAstCreator.java
index 906ef12..5681a7e 100644
--- a/src/main/java/de/tla2bAst/BAstCreator.java
+++ b/src/main/java/de/tla2bAst/BAstCreator.java
@@ -996,7 +996,8 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals, BBuil
 						.map(this::visitExprOrOpArgNodePredicate).collect(Collectors.toList()));
 				break;
 
-			case OPCODE_lnot: // \lnot
+			case OPCODE_neg: // \neg
+			case OPCODE_lnot: // ~ / \lnot
 				returnNode = new ANegationPredicate(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
 				break;
 
@@ -1144,7 +1145,8 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals, BBuil
 			case OPCODE_cl: // $ConjList
 			case OPCODE_dl: // $DisjList
 			case OPCODE_lor: // \/
-			case OPCODE_lnot: // \lnot
+			case OPCODE_neg: // \neg
+			case OPCODE_lnot: // ~ / \lnot
 			case OPCODE_in: // \in
 			case OPCODE_notin: // \notin
 			case OPCODE_eq: // =
diff --git a/src/test/java/de/tla2b/typechecking/LogicOperatorsTest.java b/src/test/java/de/tla2b/typechecking/LogicOperatorsTest.java
index 5af94a9..611cecb 100644
--- a/src/test/java/de/tla2b/typechecking/LogicOperatorsTest.java
+++ b/src/test/java/de/tla2b/typechecking/LogicOperatorsTest.java
@@ -58,6 +58,18 @@ public class LogicOperatorsTest {
 		assertEquals("BOOL", t.getConstantType("k3"));
 	}
 
+	@Test
+	public void testNeg() throws TLA2BException {
+		final String module = "-------------- MODULE Testing ----------------\n"
+				+ "CONSTANTS k, k2\n"
+				+ "ASSUME k = \\neg k2 \n"
+				+ "=================================";
+
+		TestTypeChecker t = TestUtil.typeCheckString(module);
+		assertEquals("BOOL", t.getConstantType("k"));
+		assertEquals("BOOL", t.getConstantType("k2"));
+	}
+
 	@Test(expected = TypeErrorException.class)
 	public void testLogicOperatorsError() throws TLA2BException {
 		final String module = "-------------- MODULE Testing ----------------\n"
-- 
GitLab