rpn_test.go
1217 bytes
1package rpn
2
3import (
4 "slices"
5 "testing"
6)
7
8func TestEvalUpdatesStack(t *testing.T) {
9 calculator := NewRPN()
10
11 event, err := calculator.Eval("2 3 +")
12 if err != nil {
13 t.Fatalf("Eval() error = %v", err)
14 }
15 if event != EventNone {
16 t.Fatalf("Eval() event = %v, want %v", event, EventNone)
17 }
18
19 if got, want := calculator.Values(), []float64{5}; !slices.Equal(got, want) {
20 t.Errorf("Values() = %v, want %v", got, want)
21 }
22}
23
24func TestEvalReturnsEvents(t *testing.T) {
25 tests := []struct {
26 input string
27 want Event
28 }{
29 {input: "", want: EventNone},
30 {input: "help", want: EventHelp},
31 {input: "exit", want: EventExit},
32 }
33
34 for _, test := range tests {
35 t.Run(test.input, func(t *testing.T) {
36 event, err := NewRPN().Eval(test.input)
37 if err != nil {
38 t.Fatalf("Eval() error = %v", err)
39 }
40 if event != test.want {
41 t.Errorf("Eval() event = %v, want %v", event, test.want)
42 }
43 })
44 }
45}
46
47func TestValuesReturnsCopy(t *testing.T) {
48 calculator := NewRPN()
49 _, err := calculator.Eval("5")
50 if err != nil {
51 t.Fatalf("Eval() error = %v", err)
52 }
53
54 values := calculator.Values()
55 values[0] = 10
56
57 if got := calculator.Values()[0]; got != 5 {
58 t.Errorf("Values()[0] = %v, want 5", got)
59 }
60}