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