bitfield/gmachine/gmachine_test.go
2022-02-23 01:31:53 +01:00

109 lines
1.8 KiB
Go

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)
}
}