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(4, 2, b.Add) fe.Call(c1) t.AssertEqual(fe.Pop(), 6) } func CoreTest(t *testing.T) { sq := fe.Exec(fe.Code(b.Dup, b.Mult), "square", b.Reg).Pop() seven := fe.Exec(fe.Code(7), "seven", b.Reg).Pop() fe.Exec(3, seven, sq, b.Add) t.AssertEqual(fe.Pop(), 52) myvar := fe.Exec(fe.Code(fe.NewVar()), "myvar", b.Reg).Pop() fe.Exec(5, myvar, b.Put) fe.Exec(seven, myvar, b.Get, b.Mult) t.AssertEqual(fe.Pop(), 35) fe.Exec(9, b.Lit, seven, b.Body, b.Put) t.AssertEqual(fe.Exec(seven).Pop(), 9) }