refactor with table driven tests
This commit is contained in:
@@ -1,40 +1,44 @@
|
|||||||
package wasm
|
package wasm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func buildvm() *VirtualMachine {
|
func TestNumOps(t *testing.T) {
|
||||||
return &VirtualMachine{
|
|
||||||
OperandStack: NewVirtualMachineOperandStack(),
|
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) {
|
var vm VirtualMachine
|
||||||
vm := buildvm()
|
for id, tt := range testTable {
|
||||||
vm.OperandStack.Push(uint64(0))
|
vm = VirtualMachine{
|
||||||
i32eqz(vm)
|
OperandStack: NewVirtualMachineOperandStack(),
|
||||||
assert.Equal(t, uint32(1), uint32(vm.OperandStack.Pop()))
|
}
|
||||||
}
|
|
||||||
|
|
||||||
func Test_i32eq(t *testing.T) {
|
vm.OperandStack.Push(uint64(tt.input[0]))
|
||||||
vm := buildvm()
|
vm.OperandStack.Push(uint64(tt.input[1]))
|
||||||
vm.OperandStack.Push(uint64(3))
|
tt.op(&vm)
|
||||||
vm.OperandStack.Push(uint64(3))
|
|
||||||
i32eq(vm)
|
assert.Equal(t, tt.want, uint32(vm.OperandStack.Pop()),
|
||||||
assert.Equal(t, uint32(1), 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()))
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user