68 lines
1.2 KiB
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)
|
|
}
|
|
}
|