q/src/arm/Jump_test.go

68 lines
1.2 KiB
Go

package arm_test
import (
"testing"
"git.urbach.dev/cli/q/src/arm"
"git.urbach.dev/go/assert"
)
func TestJump(t *testing.T) {
usagePatterns := []struct {
Type byte
Offset int
Code uint32
}{
{0, 0, 0x14000000},
{0, 1, 0x14000001},
{0, -1, 0x17FFFFFF},
{1, 0, 0x54000000},
{1, 1, 0x54000020},
{1, -1, 0x54FFFFE0},
{2, 0, 0x54000001},
{2, 1, 0x54000021},
{2, -1, 0x54FFFFE1},
{3, 0, 0x5400000C},
{3, 1, 0x5400002C},
{3, -1, 0x54FFFFEC},
{4, 0, 0x5400000A},
{4, 1, 0x5400002A},
{4, -1, 0x54FFFFEA},
{5, 0, 0x54000009},
{5, 1, 0x54000029},
{5, -1, 0x54FFFFE9},
{6, 0, 0x5400000D},
{6, 1, 0x5400002D},
{6, -1, 0x54FFFFED},
}
for _, pattern := range usagePatterns {
t.Logf("b %d", pattern.Offset)
var code uint32
switch pattern.Type {
case 0:
code = arm.Jump(pattern.Offset)
case 1:
code = arm.JumpIfEqual(pattern.Offset)
case 2:
code = arm.JumpIfNotEqual(pattern.Offset)
case 3:
code = arm.JumpIfGreater(pattern.Offset)
case 4:
code = arm.JumpIfGreaterOrEqual(pattern.Offset)
case 5:
code = arm.JumpIfLess(pattern.Offset)
case 6:
code = arm.JumpIfLessOrEqual(pattern.Offset)
}
assert.Equal(t, code, pattern.Code)
}
}