diff options
| author | Mel <einebeere@gmail.com> | 2022-08-11 01:25:47 +0000 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2022-08-11 01:25:47 +0000 |
| commit | 86f31acf6789be116dcc54ed85b069a37c0f7aa8 (patch) | |
| tree | bc7afd6a8c340825996d29c6cfd392ae42b4fbd5 /pkg/lang/vm/vm_test.go | |
| parent | c46b2bc7ce6df1f2c6c9494ef08015ec29992da5 (diff) | |
| download | jinx-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.go | 93 |
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) |
