diff --git a/creature.go b/creature.go index f080a83..72b2e68 100644 --- a/creature.go +++ b/creature.go @@ -207,7 +207,7 @@ func (machine *Machine) instruction() (instruction int) { // should be called then the stack pointer is really small compared to the // actual stack size, or the stack pointer is bigger than the stack. func (machine *Machine) reallocateStack() { - reallocatedStack := make([]int, machine.pointer*3/2) + reallocatedStack := make([]int, machine.pointer*2) copy(reallocatedStack, machine.stack) machine.stack = reallocatedStack } @@ -219,6 +219,7 @@ func (machine *Machine) Push(word int) { if len(machine.stack) <= machine.pointer { machine.reallocateStack() } + machine.stack[machine.pointer] = word } // Pop pops the last word off of the stack, and returns it, decreasing the stack diff --git a/creature_test.go b/creature_test.go index 617a47b..20f3940 100644 --- a/creature_test.go +++ b/creature_test.go @@ -2,6 +2,28 @@ package creature import "testing" +func TestPush(test *testing.T) { + machine := Machine { + Program: []int { + 0x0, 654, + }, + } + + err := machine.Execute(0) + if err != nil { + test.Log("machine exited with error:", err) + test.Fail() + } + + result := machine.Pop() + test.Log("popped:", result) + + if result != 654 { + test.Log("result should be", 654) + test.Fail() + } +} + func TestArithmetic(test *testing.T) { machine := Machine { Program: []int {