diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-23 22:31:14 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-23 22:31:14 +0200 |
| commit | 83a6d25623bc6052455fd436c1f02a2e79044b0b (patch) | |
| tree | b58bbfb730b4e0a45d587f6fb88730e8171711db | |
| parent | 6eaa71ba0d7c0b56853860c2f1eb43096dd928e7 (diff) | |
Fix ireturn issue in internal/rpn/variables.go
| -rw-r--r-- | internal/rpn/operations_test.go | 50 | ||||
| -rw-r--r-- | internal/rpn/rpn_test.go | 82 | ||||
| -rw-r--r-- | internal/rpn/variables.go | 2 | ||||
| -rw-r--r-- | internal/rpn/variables_test.go | 4 |
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) |
