Files
subcoding/test/opcode_test.go
2021-11-19 15:38:28 -10:00

282 lines
4.4 KiB
Go

package test
import "testing"
func TestNop(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [nop]
`)
expectGlobalMemory(t, state, 0, 0)
}
func TestCal(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [cal, +1]
- [add, g0, 1]
- - [mov, g0, 5]
`)
expectGlobalMemory(t, state, 0, 6)
}
func TestRet(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [cal, +1]
- [add, g0, 1]
- [ret]
- - [mov, g0, 5]
- [ret]
- [add, g0, 2]
`)
expectGlobalMemory(t, state, 0, 6)
}
func TestMov(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [mov, g0, 1]
- [mov, g1, g0]
- [mov, f0, 5]
- [mov, g2, f0]
`)
expectGlobalMemory(t, state, 0, 1)
expectGlobalMemory(t, state, 1, 1)
expectGlobalMemory(t, state, 2, 5)
}
func TestAdd(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [add, g0, 5]
- [add, g0, 2]
- [add, g0, g0]
- [add, f0, 3]
- [add, f0, -2]
- [add, g0, f0]
`)
expectGlobalMemory(t, state, 0, 15)
}
func TestSub(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [sub, g0, 2]
- [sub, g0, -5]
- [sub, f0, 4]
- [sub, g0, f0]
`)
expectGlobalMemory(t, state, 0, 7)
}
func TestMul(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [mov, g0, 5]
- [mul, g0, 3]
- [mul, g0, g0]
- [mov, g1, 5]
- [mul, g1, -3]
`)
expectGlobalMemory(t, state, 0, 225)
expectGlobalMemorySigned(t, state, 1, -15)
}
func TestDivU(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [mov, g0, 15]
- [divu, g0, 3]
- [mov, g1, 4]
- [divu, g1, g1]
`)
expectGlobalMemory(t, state, 0, 5)
expectGlobalMemory(t, state, 1, 1)
}
func TestDivS(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [mov, g0, 15]
- [divs, g0, -3]
- [mov, g1, -15]
- [divs, g1, -3]
- [mov, g2, -4]
- [divs, g2, g2]
`)
expectGlobalMemorySigned(t, state, 0, -5)
expectGlobalMemorySigned(t, state, 1, 5)
expectGlobalMemorySigned(t, state, 2, 1)
}
func TestEq(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [mov, g0, 5]
- [eq, g0, 5]
- [jmpt, +2]
- [add, g1, 1]
- [eq, g0, 6]
- [jmpt, +2]
- [add, g1, 2]
`)
expectGlobalMemory(t, state, 1, 2)
}
func TestLTU(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [mov, g0, 5]
- [ltu, g0, 4]
- [jmpt, +2]
- [add, g1, 1]
- [ltu, g0, 5]
- [jmpt, +2]
- [add, g1, 2]
- [ltu, g0, 6]
- [jmpt, +2]
- [add, g1, 4]
`)
expectGlobalMemory(t, state, 1, 3)
}
func TestLTS(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [mov, g0, 0]
- [lts, g0, -1]
- [jmpt, +2]
- [add, g1, 1]
- [lts, g0, 0]
- [jmpt, +2]
- [add, g1, 2]
- [lts, g0, 1]
- [jmpt, +2]
- [add, g1, 4]
`)
expectGlobalMemory(t, state, 1, 3)
}
func TestGTU(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [mov, g0, 5]
- [gtu, g0, 4]
- [jmpt, +2]
- [add, g1, 1]
- [gtu, g0, 5]
- [jmpt, +2]
- [add, g1, 2]
- [gtu, g0, 6]
- [jmpt, +2]
- [add, g1, 4]
`)
expectGlobalMemory(t, state, 1, 6)
}
func TestGTS(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [mov, g0, 0]
- [gts, g0, -1]
- [jmpt, +2]
- [add, g1, 1]
- [gts, g0, 0]
- [jmpt, +2]
- [add, g1, 2]
- [gts, g0, 1]
- [jmpt, +2]
- [add, g1, 4]
`)
expectGlobalMemory(t, state, 1, 6)
}
func TestLTEU(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [mov, g0, 5]
- [lteu, g0, 4]
- [jmpt, +2]
- [add, g1, 1]
- [lteu, g0, 5]
- [jmpt, +2]
- [add, g1, 2]
- [lteu, g0, 6]
- [jmpt, +2]
- [add, g1, 4]
`)
expectGlobalMemory(t, state, 1, 1)
}
func TestLTES(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [mov, g0, 0]
- [ltes, g0, -1]
- [jmpt, +2]
- [add, g1, 1]
- [ltes, g0, 0]
- [jmpt, +2]
- [add, g1, 2]
- [ltes, g0, 1]
- [jmpt, +2]
- [add, g1, 4]
`)
expectGlobalMemory(t, state, 1, 1)
}
func TestGTEU(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [mov, g0, 5]
- [gteu, g0, 4]
- [jmpt, +2]
- [add, g1, 1]
- [gteu, g0, 5]
- [jmpt, +2]
- [add, g1, 2]
- [gteu, g0, 6]
- [jmpt, +2]
- [add, g1, 4]
`)
expectGlobalMemory(t, state, 1, 4)
}
func TestGTES(t *testing.T) {
state := assembleAndExecute(t, `
functions:
- - [mov, g0, 0]
- [gtes, g0, -1]
- [jmpt, +2]
- [add, g1, 1]
- [gtes, g0, 0]
- [jmpt, +2]
- [add, g1, 2]
- [gtes, g0, 1]
- [jmpt, +2]
- [add, g1, 4]
`)
expectGlobalMemory(t, state, 1, 4)
}