Mercurial > thymian
view tests/code_exec.cpp @ 0:a4671277546c tip
created the repository for the thymian project
| author | ferencd |
|---|---|
| date | Tue, 17 Aug 2021 11:19:54 +0200 |
| parents | |
| children |
line wrap: on
line source
#include "tests.h" #include "gtest/gtest.h" /* * This file has the tests that are related to code execution in a * virtual machine as triggered by the "outsisde" world (ie: C runtime) */ /* Have some code in a VM. * Execute some other code in the VM. */ TEST(CodeExecution, ExecuteSomeCodeInAVm) { nap_runtime* runtime = nap_runtime_create(0); int found_indicator = 0; ASSERT_FALSE(runtime == NULL); nap_bytecode_chunk* bytecode = nap_runtime_compile(runtime, "int c = 0; \ int a = 1; \ int b = 2; \ " ,0); ASSERT_FALSE(bytecode == NULL); nap_runtime_execute(runtime, bytecode); nap_execute_code(runtime, "c = a + b"); ASSERT_EQ(3, VAR_INT(c)); nap_runtime_shutdown(&runtime); ASSERT_TRUE(runtime == NULL); } /* Define a function. Call it via the runtime API * Use the function, see that it returns the default return value (0). */ TEST(CodeExecution, ExternalCallingOfInternalMethod) { nap_runtime* runtime = nap_runtime_create(0); int found_indicator = 0; ASSERT_FALSE(runtime == NULL); nap_bytecode_chunk* bytecode = nap_runtime_compile(runtime, "int c = 0; \ int some_fun(int a , int b) \ { \ c = a + b; \ }" ,0); ASSERT_FALSE(bytecode == NULL); nap_runtime_execute(runtime, bytecode); nap_int_t p1 = 1; nap_int_t p2 = 2; nap_execute_method(runtime, 0, "some_fun", p1, p2); ASSERT_EQ(3, VAR_INT(c)); nap_runtime_shutdown(&runtime); ASSERT_TRUE(runtime == NULL); } /* Define a function. Call it via the runtime API * Use the function, see that it returns the default return value (0). */ TEST(CodeExecution, ExternalCallingOfInternalMethodWithIntReturnType) { nap_runtime* runtime = nap_runtime_create(0); int found_indicator = 0; ASSERT_FALSE(runtime == NULL); nap_bytecode_chunk* bytecode = nap_runtime_compile(runtime, "int c = 0; \ int some_fun(int a , int b) \ { \ c = a + b; \ return c; \ }" ,0); ASSERT_FALSE(bytecode == NULL); nap_runtime_execute(runtime, bytecode); nap_int_t p1 = 1; nap_int_t p2 = 2; nap_int_t ret = 0; nap_execute_method(runtime, &ret, "some_fun", p1, p2); ASSERT_EQ(3, VAR_INT(c)); ASSERT_EQ(3, ret); nap_runtime_shutdown(&runtime); ASSERT_TRUE(runtime == NULL); } /* Define a function. Call it via the runtime API * Use the function, see that it returns the default return value (0). */ TEST(CodeExecution, ExternalCallingOfInternalMethodWithStringReturnType) { nap_runtime* runtime = nap_runtime_create(0); int found_indicator = 0; ASSERT_FALSE(runtime == NULL); nap_bytecode_chunk* bytecode = nap_runtime_compile(runtime, "string c = \"ABC\"; \ string some_fun(string a, string b) \ { \ c = a + b; \ return c; \ }" ,0); ASSERT_FALSE(bytecode == NULL); nap_runtime_execute(runtime, bytecode); nap_string_t p1 = (nap_string_t)"DEF"; nap_string_t p2 = (nap_string_t)"GHI"; nap_string_t ret = 0; nap_execute_method(runtime, &ret, "some_fun", p1, p2); char *c = VAR_STRING(c); ASSERT_STREQ("DEFGHI", c); ASSERT_STREQ("DEFGHI", ret); free(ret); free(c); nap_runtime_shutdown(&runtime); ASSERT_TRUE(runtime == NULL); }
