Parent directory

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}