From a76b47b7bab7c4da6a99d4c19703d3603bf8ef14 Mon Sep 17 00:00:00 2001 From: Andrea Manzini Date: Sat, 16 May 2020 11:34:41 +0200 Subject: [PATCH] refactor with table driven tests --- wasm/vm_num_test.go | 58 ++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/wasm/vm_num_test.go b/wasm/vm_num_test.go index 9bd53527..d09fdf99 100644 --- a/wasm/vm_num_test.go +++ b/wasm/vm_num_test.go @@ -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())) }