46 lines
745 B
Go
46 lines
745 B
Go
package test
|
|
|
|
import "testing"
|
|
|
|
import "github.com/firestuff/subcoding/asm"
|
|
import "github.com/firestuff/subcoding/vm"
|
|
|
|
func TestRoundTrip(t *testing.T) {
|
|
src := `functions:
|
|
- - [nop]
|
|
- [mov, g0, 1]
|
|
- [add, f0, 5]
|
|
- [mov, g1, -5]
|
|
- [eq, 2, f0]
|
|
- [jmpt, -3]
|
|
- - [add, g0, -1]
|
|
- [cal, +5]
|
|
`
|
|
prog, err := asm.AssembleString(src)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
state, err := vm.NewState(prog)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
err = state.Execute()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
expectGlobalMemory(t, state, 0, 1)
|
|
expectGlobalMemorySigned(t, state, 1, -5)
|
|
|
|
dis, err := asm.Disassemble(prog)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if dis != src {
|
|
t.Fatalf("Disassembly mismatch: expected=%v actual=%v", src, dis)
|
|
}
|
|
}
|