refactor with table driven tests

This commit is contained in:
Andrea Manzini
2020-05-16 11:34:41 +02:00
parent 6bd36975e5
commit a76b47b7ba

View File

@@ -1,40 +1,44 @@
package wasm
import (
"fmt"
"testing"
"github.com/stretchr/testify/assert"
)
func buildvm() *VirtualMachine {
return &VirtualMachine{
OperandStack: NewVirtualMachineOperandStack(),
func TestNumOps(t *testing.T) {
var testTable = []struct {
input [2]int // numbers to push on the stack
op func(*VirtualMachine) // operation to apply
desc string // string description of the operation
want uint32 // result should obtain
}{
{input: [2]int{0, 0}, op: i32eqz, desc: "i32eqz", want: 1},
{input: [2]int{3, 3}, op: i32eq, desc: "i32eq", want: 1},
{input: [2]int{3, 4}, op: i32ne, desc: "i32ne", want: 1},
{input: [2]int{3, 3}, op: i32ne, desc: "i32ne", want: 0},
{input: [2]int{-4, 1}, op: i32lts, desc: "i32lts", want: 1},
{input: [2]int{4, -1}, op: i32lts, desc: "i32lts", want: 0},
{input: [2]int{1, 4}, op: i32ltu, desc: "i32ltu", want: 1},
{input: [2]int{4, 1}, op: i32ltu, desc: "i32ltu", want: 0},
{input: [2]int{1, -4}, op: i32gts, desc: "i32gts", want: 1},
{input: [2]int{-4, 1}, op: i32gts, desc: "i32gts", want: 0},
}
}
func Test_i32eqz(t *testing.T) {
vm := buildvm()
vm.OperandStack.Push(uint64(0))
i32eqz(vm)
assert.Equal(t, uint32(1), uint32(vm.OperandStack.Pop()))
}
var vm VirtualMachine
for id, tt := range testTable {
vm = VirtualMachine{
OperandStack: NewVirtualMachineOperandStack(),
}
func Test_i32eq(t *testing.T) {
vm := buildvm()
vm.OperandStack.Push(uint64(3))
vm.OperandStack.Push(uint64(3))
i32eq(vm)
assert.Equal(t, uint32(1), uint32(vm.OperandStack.Pop()))
}
vm.OperandStack.Push(uint64(tt.input[0]))
vm.OperandStack.Push(uint64(tt.input[1]))
tt.op(&vm)
assert.Equal(t, tt.want, uint32(vm.OperandStack.Pop()),
fmt.Sprintf("test #%d : %d %s %d should eq %d", id, tt.input[0], tt.desc, tt.input[1], tt.want))
}
func Test_i32ne(t *testing.T) {
vm := buildvm()
vm.OperandStack.Push(uint64(3))
vm.OperandStack.Push(uint64(4))
i32ne(vm)
assert.Equal(t, uint32(1), uint32(vm.OperandStack.Pop()))
vm.OperandStack.Push(uint64(3))
vm.OperandStack.Push(uint64(3))
i32ne(vm)
assert.Equal(t, uint32(0), uint32(vm.OperandStack.Pop()))
}