whatcanGOwrong
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
package asm
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
qt "github.com/frankban/quicktest"
|
||||
)
|
||||
|
||||
func TestGetSetJumpOp(t *testing.T) {
|
||||
test := func(class Class, op JumpOp, valid bool) {
|
||||
t.Run(fmt.Sprintf("%s-%s", class, op), func(t *testing.T) {
|
||||
opcode := OpCode(class).SetJumpOp(op)
|
||||
|
||||
if valid {
|
||||
qt.Assert(t, opcode, qt.Not(qt.Equals), InvalidOpCode)
|
||||
qt.Assert(t, opcode.JumpOp(), qt.Equals, op)
|
||||
} else {
|
||||
qt.Assert(t, opcode, qt.Equals, InvalidOpCode)
|
||||
qt.Assert(t, opcode.JumpOp(), qt.Equals, InvalidJumpOp)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// Exit, call and JA aren't allowed with Jump32
|
||||
test(Jump32Class, Exit, false)
|
||||
test(Jump32Class, Call, false)
|
||||
test(Jump32Class, Ja, false)
|
||||
|
||||
// But are with Jump
|
||||
test(JumpClass, Exit, true)
|
||||
test(JumpClass, Call, true)
|
||||
test(JumpClass, Ja, true)
|
||||
|
||||
// All other ops work
|
||||
for _, op := range []JumpOp{
|
||||
JEq,
|
||||
JGT,
|
||||
JGE,
|
||||
JSet,
|
||||
JNE,
|
||||
JSGT,
|
||||
JSGE,
|
||||
JLT,
|
||||
JLE,
|
||||
JSLT,
|
||||
JSLE,
|
||||
} {
|
||||
test(Jump32Class, op, true)
|
||||
test(JumpClass, op, true)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user