about summary refs log tree commit diff
path: root/pkg/lang/vm/vm_test.go
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-08-11 01:25:47 +0000
committerMel <einebeere@gmail.com>2022-08-11 01:25:47 +0000
commit86f31acf6789be116dcc54ed85b069a37c0f7aa8 (patch)
treebc7afd6a8c340825996d29c6cfd392ae42b4fbd5 /pkg/lang/vm/vm_test.go
parentc46b2bc7ce6df1f2c6c9494ef08015ec29992da5 (diff)
downloadjinx-86f31acf6789be116dcc54ed85b069a37c0f7aa8.tar.zst
jinx-86f31acf6789be116dcc54ed85b069a37c0f7aa8.zip
Actual modules and core
Diffstat (limited to 'pkg/lang/vm/vm_test.go')
-rw-r--r--pkg/lang/vm/vm_test.go93
1 files changed, 61 insertions, 32 deletions
diff --git a/pkg/lang/vm/vm_test.go b/pkg/lang/vm/vm_test.go
index b25a446..17edb2e 100644
--- a/pkg/lang/vm/vm_test.go
+++ b/pkg/lang/vm/vm_test.go
@@ -1,9 +1,11 @@
 package vm_test
 
 import (
+	"jinx/pkg/lang/modules"
 	"jinx/pkg/lang/vm"
 	"jinx/pkg/lang/vm/code"
 	"jinx/pkg/lang/vm/text"
+	"os"
 	"strings"
 	"testing"
 
@@ -294,6 +296,7 @@ func TestTypeConstruct(t *testing.T) {
 	set_arg_count 2
 	
 	call 2
+	drop 1
 
 	get_local 0
 	get_member "$add_method"
@@ -302,6 +305,7 @@ func TestTypeConstruct(t *testing.T) {
 	push_function @Cat:meow
 
 	call 2
+	drop 1
 	
 	# Create a new instance of Cat
 	get_local 0
@@ -441,49 +445,74 @@ func TestPrimes(t *testing.T) {
 }
 
 func TestModules(t *testing.T) {
-	mainSrc := `
-	get_global "add_one"
-	get_global "x"
-	call 1
-	halt
-	`
-
-	librarySrc1 := `
-	push_int 41
-	add_global "x"
-	halt
-	`
+	t.Skip("We can't pass in random modules anymore, they have to go through the resolver")
+
+	// 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)
+}
 
-	librarySrc2 := `
-	push_function @add_one
-	set_arg_count 1
-	add_global "add_one"
+func TestCoreSay(t *testing.T) {
+	src := `
+	get_global ":core:say"
+	push_string "Meow!!"
+	call 1
+	push_int 0
 	halt
-
-	@add_one:
-	get_local 0
-	push_int 1
-	add
-	ret
 	`
 
-	main := compile(t, mainSrc)
-	library1 := compile(t, librarySrc1)
-	library2 := compile(t, librarySrc2)
+	previous := os.Stdout
+	r, w, _ := os.Pipe()
+	defer w.Close()
+	os.Stdout = w
+	test(t, src, "0")
+	os.Stdout = previous
 
-	vm := vm.New(&main, []*code.Code{&library1, &library2})
-	err := vm.Run()
-	require.NoError(t, err)
-
-	res, err := vm.GetResult()
+	result := make([]byte, 8)
+	_, err := r.Read(result)
 	require.NoError(t, err)
 
-	require.Equal(t, "42", res)
+	require.Equal(t, "\"Meow!!\"", string(result))
 }
 
 func test(t *testing.T, src string, expected string) {
 	bc := compile(t, src)
-	vm := vm.New(&bc, nil)
+	vm := vm.New(modules.NewUnknownModule(&bc))
 	err := vm.Run()
 	require.NoError(t, err)