summaryrefslogtreecommitdiff
path: root/internal/rpn/assignment_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/rpn/assignment_test.go')
-rw-r--r--internal/rpn/assignment_test.go53
1 files changed, 53 insertions, 0 deletions
diff --git a/internal/rpn/assignment_test.go b/internal/rpn/assignment_test.go
index 098bef8..1b3cfff 100644
--- a/internal/rpn/assignment_test.go
+++ b/internal/rpn/assignment_test.go
@@ -273,3 +273,56 @@ func TestAssignmentOperatorRegistry(t *testing.T) {
}
}
}
+
+// TestAssignmentNotTriggeredByEqualEqual ensures that == is not misparsed as an assignment.
+func TestAssignmentNotTriggeredByEqualEqual(t *testing.T) {
+ vars := NewVariables()
+ rpn := NewRPN(vars)
+
+ // "a == b" should NOT be treated as an assignment
+ _, err := rpn.ParseAndEvaluate("a == b")
+ // It may error (unknown tokens) or produce a result, but it should NOT assign a variable
+ // The key check: no variable "a" should be created
+ if _, exists := vars.GetVariable("a"); exists {
+ t.Error("'a == b' should not create variable a")
+ }
+ // The error from parsing == as an unknown operator is acceptable
+ if err == nil {
+ // If no error, that's also fine - it just means == was handled somehow
+ t.Logf("'a == b' returned: %v", err)
+ }
+}
+
+// TestAssignmentNotTriggeredByNotEqual ensures that != is not misparsed as an assignment.
+func TestAssignmentNotTriggeredByNotEqual(t *testing.T) {
+ vars := NewVariables()
+ rpn := NewRPN(vars)
+
+ // "a != b" should NOT be treated as an assignment
+ _, err := rpn.ParseAndEvaluate("a != b")
+ // The key check: no variable "a" should be created
+ if _, exists := vars.GetVariable("a"); exists {
+ t.Error("'a != b' should not create variable a")
+ }
+ _ = err // error is acceptable
+}
+
+// TestAssignmentAfterEqualEqual ensures "x 5 =" still works even when == exists in the expression.
+func TestAssignmentAfterEqualEqual(t *testing.T) {
+ vars := NewVariables()
+ rpn := NewRPN(vars)
+
+ // A standalone assignment should work regardless of == elsewhere
+ result, err := rpn.ParseAndEvaluate("x 5 =")
+ if err != nil {
+ t.Fatalf("'x 5 =' returned error: %v", err)
+ }
+ if result != "x = 5" {
+ t.Errorf("result = %q, want 'x = 5'", result)
+ }
+
+ val, exists := vars.GetVariable("x")
+ if !exists || val != 5 {
+ t.Errorf("x = %v (exists=%v), want 5", val, exists)
+ }
+}