-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathstackmachine_test.go
More file actions
74 lines (65 loc) · 3.44 KB
/
Copy pathstackmachine_test.go
File metadata and controls
74 lines (65 loc) · 3.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package main
import (
"errors"
"testing"
)
func TestStartsWithEmptyStack(t *testing.T) {
_, err := StackMachine("")
if err == nil {
t.Error("expected error due to no results")
}
}
// Write your own TDD tests here as you develop
/*
All these tests must pass for completion
*/
func TestAcceptanceTests(t *testing.T) {
tests := []struct {
name string
commands string
expected int
expectedErr error
}{
{name:"empty error", commands:"", expected:0, expectedErr: errors.New("")},
{name:"add overflow", commands:"50000 DUP +", expected: 0, expectedErr: errors.New("") },
{name:"too few add", commands:"99 +", expected: 0, expectedErr: errors.New("") },
{name:"too few minus", commands:"99 -", expected: 0, expectedErr: errors.New("") },
{name:"too few multiply", commands:"99 *", expected: 0, expectedErr: errors.New("") },
{name:"empty stack", commands:"99 CLEAR", expected: 0, expectedErr: errors.New("") },
{name:"sum single value", commands:"99 SUM", expected: 99, expectedErr: nil },
{name:"sum empty", commands:"SUM", expected: 0, expectedErr: errors.New("") },
{name:"normal +*", commands:"5 6 + 2 *", expected: 22, expectedErr: nil },
{name:"clear too few", commands:"1 2 3 4 + CLEAR 12 +", expected: 0, expectedErr: errors.New("") },
{name:"normal after clear", commands:"1 CLEAR 2 3 +", expected: 5, expectedErr: nil },
{name:"single integer", commands:"9876", expected: 9876, expectedErr: nil },
{name:"invalid command", commands:"DOGBANANA", expected: 0, expectedErr: errors.New("") },
{name:"normal +-*", commands:"5 9 DUP + + 43 - 3 *", expected: 60, expectedErr: nil },
{name:"minus", commands:"2 5 -", expected: 3, expectedErr: nil },
{name:"underflow minus", commands:"5 2 -", expected: 0, expectedErr: errors.New("") },
{name:"at overflow limit", commands:"25000 DUP +", expected: 50000, expectedErr: nil },
{name:"at overflow limit single value", commands:"50000 0 +", expected: 50000, expectedErr: nil },
{name:"overflow plus", commands:"50000 1 +", expected: 0, expectedErr: errors.New("") },
{name:"overflow single value", commands:"50001", expected: 0, expectedErr: errors.New("") },
{name:"times zero at overflow limit", commands:"50000 0 *", expected: 0, expectedErr: nil },
{name:"too few at first", commands:"1 2 3 4 5 + + + + * 999", expected: 0, expectedErr: errors.New("") },
{name:"normal simple", commands:"1 2 - 99 +", expected: 100, expectedErr: nil },
{name:"at overflow minus to zero", commands:"50000 50000 -", expected: 0, expectedErr: nil },
{name:"clear empties stack", commands:"CLEAR", expected: 0, expectedErr: errors.New("") },
{name:"normal sum", commands:"3 4 3 5 5 1 1 1 SUM", expected: 23, expectedErr: nil },
{name:"sum after clear stack", commands:"3 4 3 5 CLEAR 5 1 1 1 SUM", expected: 8, expectedErr: nil },
{name:"sum then too few", commands:"3 4 3 5 5 1 1 1 SUM -", expected: 0, expectedErr: errors.New("") },
{name:"fibonacci", commands:"1 2 3 4 5 * * * *", expected: 120, expectedErr: nil },
}
for _, test := range tests {
got, err := StackMachine(test.commands)
if (test.expectedErr != nil) {
if err == nil {
t.Errorf("%s (%s) Expected error, but received nil", test.name, test.commands)
} else if err.Error() != test.expectedErr.Error() {
t.Errorf("%s (%s) got error %v, want %v", test.name, test.commands, err, test.expectedErr)
}
} else if got != test.expected {
t.Errorf("%s (%s) got %v, want %v", test.name, test.commands, got, test.expected)
}
}
}