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