-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdcpu_test.go
More file actions
64 lines (53 loc) · 1.77 KB
/
dcpu_test.go
File metadata and controls
64 lines (53 loc) · 1.77 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
package dcpu
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestInitialState(t *testing.T) {
dcpu := DCPU{}
assert.EqualValues(t, 0, dcpu.RegisterA)
assert.EqualValues(t, 0, dcpu.RegisterB)
assert.EqualValues(t, 0, dcpu.RegisterC)
assert.EqualValues(t, 0, dcpu.RegisterX)
assert.EqualValues(t, 0, dcpu.RegisterY)
assert.EqualValues(t, 0, dcpu.RegisterZ)
assert.EqualValues(t, 0, dcpu.RegisterI)
assert.EqualValues(t, 0, dcpu.RegisterJ)
assert.EqualValues(t, 0, dcpu.ProgramCounter)
assert.EqualValues(t, 0, dcpu.StackPointer)
assert.EqualValues(t, 0, dcpu.Extra)
assert.EqualValues(t, 0, dcpu.InterruptAddress)
assert.EqualValues(t, 0, dcpu.Memory[1000])
}
func TestInterrupts(t *testing.T) {
dcpu := DCPU{}
dcpu.Load(0, []uint16{
Special(InterruptAddressSet, Literal), 0x1000,
Basic(Set, RegisterA, Literal13),
Special(InterruptTrigger, Literal14),
Basic(Set, RegisterB, RegisterA),
})
dcpu.Load(0x1000, []uint16{
Basic(Set, RegisterA, LiteralNegative1),
Basic(Set, RegisterB, LiteralNegative1),
Special(ReturnFromInterrupt, Literal0),
})
dcpu.ExecuteInstructions(3)
assert.EqualValues(t, 0x1000, dcpu.InterruptAddress)
assert.EqualValues(t, 0x1000, dcpu.ProgramCounter)
assert.True(t, dcpu.QueueInterrupts)
assert.Len(t, dcpu.InterruptQueue, 0)
dcpu.ExecuteInstructions(2)
assert.EqualValues(t, 0xffff, dcpu.RegisterA)
assert.EqualValues(t, 0xffff, dcpu.RegisterB)
assert.True(t, dcpu.QueueInterrupts)
assert.Len(t, dcpu.InterruptQueue, 0)
dcpu.Interrupt(10)
assert.Len(t, dcpu.InterruptQueue, 1)
dcpu.ExecuteInstructions(5)
assert.EqualValues(t, 13, dcpu.RegisterA)
assert.EqualValues(t, 13, dcpu.RegisterB)
assert.EqualValues(t, 5, dcpu.ProgramCounter)
assert.False(t, dcpu.QueueInterrupts)
assert.Len(t, dcpu.InterruptQueue, 0)
}