Add gmachine
This commit is contained in:
108
gmachine/gmachine_test.go
Normal file
108
gmachine/gmachine_test.go
Normal file
@@ -0,0 +1,108 @@
|
||||
package gmachine_test
|
||||
|
||||
import (
|
||||
"gmachine"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestNew(t *testing.T) {
|
||||
t.Parallel()
|
||||
g := gmachine.New()
|
||||
wantMemSize := gmachine.DefaultMemSize
|
||||
gotMemSize := len(g.Memory)
|
||||
if wantMemSize != gotMemSize {
|
||||
t.Errorf("want %d words of memory, got %d", wantMemSize, gotMemSize)
|
||||
}
|
||||
var wantP uint64 = 0
|
||||
if wantP != g.P {
|
||||
t.Errorf("want initial P value %d, got %d", wantP, g.P)
|
||||
}
|
||||
var wantMemValue uint64 = 0
|
||||
gotMemValue := g.Memory[gmachine.DefaultMemSize-1]
|
||||
if wantMemValue != gotMemValue {
|
||||
t.Errorf("want last memory location to contain %d, got %d", wantMemValue, gotMemValue)
|
||||
}
|
||||
var wantRegisterA uint64 = 0
|
||||
gotRegisterA := g.A
|
||||
if wantRegisterA != gotRegisterA {
|
||||
t.Errorf("want registerA with data %d, got %d", wantRegisterA, gotRegisterA)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestHalt(t *testing.T) {
|
||||
t.Parallel()
|
||||
var wants uint64 = 1
|
||||
|
||||
g := gmachine.New()
|
||||
g.Run()
|
||||
got := g.P
|
||||
|
||||
if wants != got {
|
||||
t.Errorf("want P == %d, got %d", wants, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNOOP(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var wants uint64 = 2
|
||||
|
||||
g := gmachine.New()
|
||||
g.NewProgram([]uint64{
|
||||
gmachine.OpNOOP,
|
||||
gmachine.OpHALT,
|
||||
})
|
||||
got := g.P
|
||||
|
||||
if wants != got {
|
||||
t.Errorf("want P == %d, got %d", wants, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestINCA(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var wants uint64 = 1
|
||||
|
||||
g := gmachine.New()
|
||||
g.Memory[0] = gmachine.OpINCA
|
||||
g.Run()
|
||||
got := g.A
|
||||
|
||||
if wants != got {
|
||||
t.Errorf("want A == %d, got %d", wants, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDECA(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var wants uint64 = 1
|
||||
|
||||
g := gmachine.New()
|
||||
g.A = 2
|
||||
g.Memory[0] = gmachine.OpDECA
|
||||
g.Run()
|
||||
got := g.A
|
||||
|
||||
if wants != got {
|
||||
t.Errorf("want A == %d, got %d", wants, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSETA(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var wants uint64 = 3
|
||||
|
||||
g := gmachine.New()
|
||||
g.Memory[0] = gmachine.OpSETA
|
||||
g.Memory[1] = wants
|
||||
g.Run()
|
||||
got := g.A
|
||||
|
||||
if wants != got {
|
||||
t.Errorf("want A == %d, got %d", wants, got)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user