about summary refs log tree commit diff
path: root/pkg/lang/vm/vm_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/lang/vm/vm_test.go')
-rw-r--r--pkg/lang/vm/vm_test.go43
1 files changed, 42 insertions, 1 deletions
diff --git a/pkg/lang/vm/vm_test.go b/pkg/lang/vm/vm_test.go
index ae0b8e6..b25a446 100644
--- a/pkg/lang/vm/vm_test.go
+++ b/pkg/lang/vm/vm_test.go
@@ -440,9 +440,50 @@ func TestPrimes(t *testing.T) {
 	test(t, src, "[2, 3, 5, 7]")
 }
 
+func TestModules(t *testing.T) {
+	mainSrc := `
+	get_global "add_one"
+	get_global "x"
+	call 1
+	halt
+	`
+
+	librarySrc1 := `
+	push_int 41
+	add_global "x"
+	halt
+	`
+
+	librarySrc2 := `
+	push_function @add_one
+	set_arg_count 1
+	add_global "add_one"
+	halt
+
+	@add_one:
+	get_local 0
+	push_int 1
+	add
+	ret
+	`
+
+	main := compile(t, mainSrc)
+	library1 := compile(t, librarySrc1)
+	library2 := compile(t, librarySrc2)
+
+	vm := vm.New(&main, []*code.Code{&library1, &library2})
+	err := vm.Run()
+	require.NoError(t, err)
+
+	res, err := vm.GetResult()
+	require.NoError(t, err)
+
+	require.Equal(t, "42", res)
+}
+
 func test(t *testing.T, src string, expected string) {
 	bc := compile(t, src)
-	vm := vm.New(&bc)
+	vm := vm.New(&bc, nil)
 	err := vm.Run()
 	require.NoError(t, err)