summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-23 22:31:14 +0200
committerPaul Buetow <paul@buetow.org>2026-03-23 22:31:14 +0200
commit83a6d25623bc6052455fd436c1f02a2e79044b0b (patch)
treeb58bbfb730b4e0a45d587f6fb88730e8171711db
parent6eaa71ba0d7c0b56853860c2f1eb43096dd928e7 (diff)
Fix ireturn issue in internal/rpn/variables.go
-rw-r--r--internal/rpn/operations_test.go50
-rw-r--r--internal/rpn/rpn_test.go82
-rw-r--r--internal/rpn/variables.go2
-rw-r--r--internal/rpn/variables_test.go4
4 files changed, 69 insertions, 69 deletions
diff --git a/internal/rpn/operations_test.go b/internal/rpn/operations_test.go
index f548317..3ea2a5c 100644
--- a/internal/rpn/operations_test.go
+++ b/internal/rpn/operations_test.go
@@ -109,7 +109,7 @@ func TestStackClear(t *testing.T) {
}
func TestOperationsAdd(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
s.Push(3.0)
@@ -130,7 +130,7 @@ func TestOperationsAdd(t *testing.T) {
}
func TestOperationsSubtract(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
s.Push(10.0)
@@ -151,7 +151,7 @@ func TestOperationsSubtract(t *testing.T) {
}
func TestOperationsMultiply(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
s.Push(5.0)
@@ -172,7 +172,7 @@ func TestOperationsMultiply(t *testing.T) {
}
func TestOperationsDivide(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
s.Push(20.0)
@@ -193,7 +193,7 @@ func TestOperationsDivide(t *testing.T) {
}
func TestOperationsDivideByZero(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
s.Push(10.0)
@@ -209,7 +209,7 @@ func TestOperationsDivideByZero(t *testing.T) {
}
func TestOperationsPower(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
s.Push(2.0)
@@ -230,7 +230,7 @@ func TestOperationsPower(t *testing.T) {
}
func TestOperationsModulo(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
s.Push(10.0)
@@ -251,7 +251,7 @@ func TestOperationsModulo(t *testing.T) {
}
func TestOperationsModuloByZero(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
s.Push(10.0)
@@ -264,7 +264,7 @@ func TestOperationsModuloByZero(t *testing.T) {
}
func TestOperationsInsufficientOperands(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
s.Push(5.0)
@@ -277,7 +277,7 @@ func TestOperationsInsufficientOperands(t *testing.T) {
}
func TestOperationsDup(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
s.Push(7.0)
@@ -299,7 +299,7 @@ func TestOperationsDup(t *testing.T) {
}
func TestOperationsSwap(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
s.Push(1.0)
@@ -318,7 +318,7 @@ func TestOperationsSwap(t *testing.T) {
}
func TestOperationsSwapInsufficient(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
s.Push(5.0)
@@ -330,7 +330,7 @@ func TestOperationsSwapInsufficient(t *testing.T) {
}
func TestOperationsPop(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
s.Push(1.0)
@@ -348,7 +348,7 @@ func TestOperationsPop(t *testing.T) {
}
func TestOperationsPopEmpty(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
@@ -359,7 +359,7 @@ func TestOperationsPopEmpty(t *testing.T) {
}
func TestOperationsShow(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
s.Push(1.0)
@@ -377,7 +377,7 @@ func TestOperationsShow(t *testing.T) {
}
func TestOperationsShowEmpty(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
@@ -392,7 +392,7 @@ func TestOperationsShowEmpty(t *testing.T) {
}
func TestOperationsAssignVariable(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
s.Push(5.0)
@@ -417,7 +417,7 @@ func TestOperationsAssignVariable(t *testing.T) {
}
func TestOperationsAssignVariableEmptyName(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
@@ -428,7 +428,7 @@ func TestOperationsAssignVariableEmptyName(t *testing.T) {
}
func TestOperationsUseVariable(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
@@ -449,7 +449,7 @@ func TestOperationsUseVariable(t *testing.T) {
}
func TestOperationsUseVariableUndefined(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
s := NewStack()
@@ -463,7 +463,7 @@ func TestOperationsUseVariableUndefined(t *testing.T) {
}
func TestOperationsDeleteVariable(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
v.SetVariable("temp", 100.0)
@@ -480,7 +480,7 @@ func TestOperationsDeleteVariable(t *testing.T) {
}
func TestOperationsDeleteVariableUndefined(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
err := o.DeleteVariable("nonexistent")
@@ -490,7 +490,7 @@ func TestOperationsDeleteVariableUndefined(t *testing.T) {
}
func TestOperationsListVariables(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
v.SetVariable("x", 1.0)
@@ -510,7 +510,7 @@ func TestOperationsListVariables(t *testing.T) {
}
func TestOperationsClearVariables(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
v.SetVariable("x", 1.0)
@@ -524,7 +524,7 @@ func TestOperationsClearVariables(t *testing.T) {
}
func TestOperationsConcurrent(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
o := NewOperations(v)
// Test concurrent variable access
diff --git a/internal/rpn/rpn_test.go b/internal/rpn/rpn_test.go
index 61cdf5d..3a91702 100644
--- a/internal/rpn/rpn_test.go
+++ b/internal/rpn/rpn_test.go
@@ -7,7 +7,7 @@ import (
)
func TestNewRPN(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
if r == nil {
t.Fatal("NewRPN() returned nil")
@@ -98,7 +98,7 @@ func TestParseAndEvaluateSimple(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
result, err := r.ParseAndEvaluate(tt.input)
if err != nil {
@@ -136,7 +136,7 @@ func TestParseAndEvaluateChain(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
result, err := r.ParseAndEvaluate(tt.input)
if err != nil {
@@ -174,7 +174,7 @@ func TestParseAndEvaluateStackOps(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
result, err := r.ParseAndEvaluate(tt.input)
if err != nil {
@@ -188,7 +188,7 @@ func TestParseAndEvaluateStackOps(t *testing.T) {
}
func TestParseAndEvaluateVariables(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
// Test variable assignment and reuse
@@ -212,7 +212,7 @@ func TestParseAndEvaluateVariables(t *testing.T) {
}
func TestParseAndEvaluateEmpty(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
_, err := r.ParseAndEvaluate("")
@@ -245,7 +245,7 @@ func TestParseAndEvaluateAssignment(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
result, err := r.ParseAndEvaluate(tt.input)
if err != nil {
@@ -259,7 +259,7 @@ func TestParseAndEvaluateAssignment(t *testing.T) {
}
func TestParseAndEvaluateDivisionByZero(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
_, err := r.ParseAndEvaluate("5 0 /")
@@ -272,7 +272,7 @@ func TestParseAndEvaluateDivisionByZero(t *testing.T) {
}
func TestParseAndEvaluateUndefinedVariable(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
_, err := r.ParseAndEvaluate("undefined +")
@@ -286,7 +286,7 @@ func TestParseAndEvaluateUndefinedVariable(t *testing.T) {
}
func TestParseAndEvaluateUnknownToken(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
_, err := r.ParseAndEvaluate("1 2 + hello")
@@ -299,7 +299,7 @@ func TestParseAndEvaluateUnknownToken(t *testing.T) {
}
func TestParseAndEvaluateInsufficientOperands(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
tests := []struct {
@@ -322,7 +322,7 @@ func TestParseAndEvaluateInsufficientOperands(t *testing.T) {
}
func TestParseAndEvaluateShow(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
result, err := r.ParseAndEvaluate("1 2 3 show")
@@ -335,7 +335,7 @@ func TestParseAndEvaluateShow(t *testing.T) {
}
func TestParseAndEvaluateVars(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
// Set some variables using new format: "name = value"
@@ -352,7 +352,7 @@ func TestParseAndEvaluateVars(t *testing.T) {
}
func TestParseAndEvaluateClear(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
// Set and clear
@@ -365,7 +365,7 @@ func TestParseAndEvaluateClear(t *testing.T) {
}
func TestRPNConcurrency(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
done := make(chan bool, 10)
@@ -388,7 +388,7 @@ func TestRPNConcurrency(t *testing.T) {
}
func TestResultStack(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
tokens := []string{"1", "2", "3", "+"}
@@ -402,7 +402,7 @@ func TestResultStack(t *testing.T) {
}
func TestResultStackEmpty(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
tokens := []string{}
@@ -441,7 +441,7 @@ func TestParseAndEvaluateAssignmentExpression(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
result, err := r.ParseAndEvaluate(tt.input)
if err != nil {
@@ -485,7 +485,7 @@ func TestParseAndEvaluateAssignmentErrors(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
_, err := r.ParseAndEvaluate(tt.input)
if err == nil {
@@ -535,7 +535,7 @@ func TestParseAndEvaluateEvaluateErrors(t *testing.T) {
continue
}
t.Run(tt.name, func(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
_, err := r.ParseAndEvaluate(tt.input)
if err == nil {
@@ -550,7 +550,7 @@ func TestParseAndEvaluateEvaluateErrors(t *testing.T) {
}
func TestResultStackErrors(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
// Test error cases in ResultStack function
@@ -601,7 +601,7 @@ func TestResultStackErrors(t *testing.T) {
}
func TestResultStackMultipleValues(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
// Test Case where stack has multiple values at the end
@@ -648,7 +648,7 @@ func TestResultStackMultipleValues(t *testing.T) {
}
func TestRPNIncrementalOperations(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
// Test: 1 2 3 + then +
@@ -672,7 +672,7 @@ func TestRPNIncrementalOperations(t *testing.T) {
}
func TestRPNIncrementalSubtract(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
// First put two values on stack: "10 3" gives stack [10, 3]
@@ -693,7 +693,7 @@ func TestRPNIncrementalSubtract(t *testing.T) {
}
func TestRPNIncrementalDup(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
// First push values (two values so stack is not emptied after evaluation)
@@ -714,7 +714,7 @@ func TestRPNIncrementalDup(t *testing.T) {
}
func TestRPNIncrementalSwap(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
_, err := r.ParseAndEvaluate("1 2")
@@ -732,7 +732,7 @@ func TestRPNIncrementalSwap(t *testing.T) {
}
func TestRPNGetCurrentStack(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
_, err := r.ParseAndEvaluate("1 2 3")
@@ -750,7 +750,7 @@ func TestRPNGetCurrentStack(t *testing.T) {
}
func TestRPNIncrementalUnknownOperator(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
_, err := r.ParseAndEvaluate("1 2")
@@ -765,7 +765,7 @@ func TestRPNIncrementalUnknownOperator(t *testing.T) {
}
func TestRPNClearStack(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
_, err := r.ParseAndEvaluate("1 2 3")
@@ -785,7 +785,7 @@ func TestRPNClearStack(t *testing.T) {
// Hyper operator tests
func TestHyperAdd(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
// Test: 1 2 3 4 5 [+]
@@ -799,7 +799,7 @@ func TestHyperAdd(t *testing.T) {
}
func TestHyperAddEdgeCases(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
// Test with two values: 10 20 [+]
@@ -812,7 +812,7 @@ func TestHyperAddEdgeCases(t *testing.T) {
}
// Test with single value should error - use fresh instance to avoid stack state
- v2 := NewVariables().(*Variables)
+ v2 := NewVariables()
r2 := NewRPN(v2)
_, err = r2.ParseAndEvaluate("5 [+]")
if err == nil {
@@ -821,7 +821,7 @@ func TestHyperAddEdgeCases(t *testing.T) {
}
func TestHyperSubtract(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
// Test: 10 3 2 [-] => 10 - 3 - 2 = 5
@@ -835,7 +835,7 @@ func TestHyperSubtract(t *testing.T) {
}
func TestHyperMultiply(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
// Test: 2 3 4 [*] => 2 * 3 * 4 = 24
@@ -849,7 +849,7 @@ func TestHyperMultiply(t *testing.T) {
}
func TestHyperDivide(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
// Test: 100 5 2 [/] => 100 / 5 / 2 = 10
@@ -863,7 +863,7 @@ func TestHyperDivide(t *testing.T) {
}
func TestHyperDivideByZero(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
_, err := r.ParseAndEvaluate("100 0 [/]")
@@ -873,7 +873,7 @@ func TestHyperDivideByZero(t *testing.T) {
}
func TestHyperPower(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
// Test: 2 3 2 [^] => 2 ^ 3 ^ 2 = (2 ^ 3) ^ 2 = 8 ^ 2 = 64
@@ -887,7 +887,7 @@ func TestHyperPower(t *testing.T) {
}
func TestHyperModulo(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
// Test: 100 7 3 [%%] => 100 %% 7 %% 3 = 2 %% 3 = 2
@@ -901,7 +901,7 @@ func TestHyperModulo(t *testing.T) {
}
func TestHyperModuloByZero(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
_, err := r.ParseAndEvaluate("100 0 [%]")
@@ -925,7 +925,7 @@ func TestHyperOperatorEdgeCases(t *testing.T) {
}
for _, tc := range testCases {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
_, err := r.ParseAndEvaluate(tc.input)
if err == nil {
@@ -936,7 +936,7 @@ func TestHyperOperatorEdgeCases(t *testing.T) {
// TestParseAndEvaluateAssignmentNoExpression tests "name value =" without expression
func TestParseAndEvaluateAssignmentNoExpression(t *testing.T) {
- v := NewVariables().(*Variables)
+ v := NewVariables()
r := NewRPN(v)
// Test "x 5 =" without expression
diff --git a/internal/rpn/variables.go b/internal/rpn/variables.go
index 0f39a92..ce85dfa 100644
--- a/internal/rpn/variables.go
+++ b/internal/rpn/variables.go
@@ -94,7 +94,7 @@ type VariableStore interface {
}
// NewVariables creates and initializes a new Variables instance.
-func NewVariables() VariableStore {
+func NewVariables() *Variables {
return &Variables{
variables: make(map[string]float64),
}
diff --git a/internal/rpn/variables_test.go b/internal/rpn/variables_test.go
index e0b35fe..9dc5882 100644
--- a/internal/rpn/variables_test.go
+++ b/internal/rpn/variables_test.go
@@ -139,7 +139,7 @@ func TestFormatVariables(t *testing.T) {
v.SetVariable("pi", 3.14159)
v.SetVariable("e", 2.71828)
- formatted := v.(*Variables).FormatVariables()
+ formatted := v.FormatVariables()
if strings.Contains(formatted, "No variables defined") {
t.Error("Formatted variables should not show 'No variables defined' when variables exist")
@@ -152,7 +152,7 @@ func TestFormatVariables(t *testing.T) {
func TestFormatVariablesEmpty(t *testing.T) {
v := NewVariables()
- formatted := v.(*Variables).FormatVariables()
+ formatted := v.FormatVariables()
if !strings.Contains(formatted, "No variables defined") {
t.Errorf("Empty variables should show 'No variables defined', got: %s", formatted)