43 lines
1 KiB
Go
43 lines
1 KiB
Go
package scopes_test
|
|
|
|
import (
|
|
tbase "testing"
|
|
|
|
"git.sr.ht/~cco/go-scopes/common/testing"
|
|
"git.sr.ht/~cco/go-scopes/forge"
|
|
"git.sr.ht/~cco/go-scopes/forge/builtins"
|
|
)
|
|
|
|
var fe = forge.NewFE()
|
|
var b = builtins.Get(fe)
|
|
|
|
func TestForge(tb *tbase.T) {
|
|
t := testing.SetUp(tb)
|
|
t.Run("exec", ExecTest)
|
|
t.Run("core", CoreTest)
|
|
}
|
|
|
|
func ExecTest(t *testing.T) {
|
|
c1 := fe.Code(b.Lit, 4, b.Lit, 2, b.Add)
|
|
fe.Call(c1)
|
|
t.AssertEqual(fe.Pop(), 6)
|
|
sq := fe.Def("square", b.Dup, b.Mult)
|
|
fe.Exec(b.Lit, 3, sq, b.Lit, 2, b.Add)
|
|
t.AssertEqual(fe.Pop(), 11)
|
|
seven := fe.Create("seven", 7, fe.Code(b.Get))
|
|
//fe.Exec(b.Lit, 7, seven, b.Put)
|
|
fe.Exec(b.Lit, 3, seven, sq, b.Add)
|
|
t.AssertEqual(fe.Pop(), 52)
|
|
}
|
|
|
|
func CoreTest(t *testing.T) {
|
|
//sq := fe.Def("square", b.Dup, b.Mult)
|
|
fe.Exec(b.New, b.Here)
|
|
fe.Exec(b.Lit, b.Dup, b.Comp, b.Lit, b.Mult, b.Comp, b.Lit, "square", b.Reg)
|
|
sq := fe.Pop()
|
|
fe.Exec(b.New, b.Here)
|
|
fe.Exec(b.Lit, b.Lit, b.Comp, b.Lit, 7, b.Comp, b.Lit, "x", b.Reg)
|
|
seven := fe.Pop()
|
|
fe.Exec(b.Lit, 3, seven, sq, b.Add)
|
|
t.AssertEqual(fe.Pop(), 52)
|
|
}
|