diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-25 23:12:44 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-25 23:12:44 +0200 |
| commit | 24c4dd87fae560c83fe2424476797bbd3ba6247e (patch) | |
| tree | 5924b6c2f94aefa0e4903e9305c5b4c87f066911 /internal | |
| parent | a8bf09cc8f3c8d423e945492f19e15a81489e5c1 (diff) | |
rpn: Add unit test for user scenario with x =: taking value from stack
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/rpn/rpn_test.go | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/internal/rpn/rpn_test.go b/internal/rpn/rpn_test.go index 2e54c95..2fca7ec 100644 --- a/internal/rpn/rpn_test.go +++ b/internal/rpn/rpn_test.go @@ -712,3 +712,65 @@ func TestIncrementalAssignmentRPN(t *testing.T) { t.Errorf("Variable x = %v, want 2", val) } } + +// TestParseAndEvaluateAssignmentLeftRight tests := and =: assignment operators in RPN +func TestParseAndEvaluateAssignmentLeftRight(t *testing.T) { + tests := []struct { + name string + input string + expectedVar string + expectedValue float64 + }{ + { + name: "5 x =: (left assignment)", + input: "5 x =:", + expectedVar: "x", + expectedValue: 5, + }, + { + name: "x 5 := (right assignment)", + input: "x 5 :=", + expectedVar: "x", + expectedValue: 5, + }, + { + name: "3 y =: (left assignment)", + input: "3 y =:", + expectedVar: "y", + expectedValue: 3, + }, + { + name: "y 3 := (right assignment)", + input: "y 3 :=", + expectedVar: "y", + expectedValue: 3, + }, + { + name: "pi 3.14159 =: (assignment with constant)", + input: "pi 3.14159 =:", + expectedVar: "pi", + expectedValue: 3.14159, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + v := NewVariables() + r := NewRPN(v) + + _, err := r.ParseAndEvaluate(tt.input) + if err != nil { + t.Fatalf("ParseAndEvaluate(%q) returned error: %v", tt.input, err) + } + + // Verify variable was set + val, exists := v.GetVariable(tt.expectedVar) + if !exists { + t.Errorf("Variable %q should exist after assignment", tt.expectedVar) + } + if val != tt.expectedValue { + t.Errorf("Variable %q = %v, want %v", tt.expectedVar, val, tt.expectedValue) + } + }) + } +} |
