From 2a3d5c7a47420438450f4f12a908d0429f726e00 Mon Sep 17 00:00:00 2001 From: Andrei Maiboroda Date: Mon, 5 Oct 2020 13:17:00 +0200 Subject: [PATCH] test: compilation of fizzy_parse, fizzy_instantiate, fizzy_execute --- test/compilation/compilation_test.c | 83 +++++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 3 deletions(-) diff --git a/test/compilation/compilation_test.c b/test/compilation/compilation_test.c index 7e5a84601..7f1fa1329 100644 --- a/test/compilation/compilation_test.c +++ b/test/compilation/compilation_test.c @@ -4,9 +4,86 @@ #include -bool dummy(void); +bool validate(const uint8_t* binary, size_t size); +bool parse(const uint8_t* binary, size_t size); +bool instantiate(const uint8_t* binary, size_t size); +struct FizzyExecutionResult dummy_host_func(void* context, struct FizzyInstance* instance, + const union FizzyValue* args, size_t args_size, int depth); +bool instantiate_with_host_func(const uint8_t* binary, size_t size); +bool execute(const uint8_t* binary, size_t size); -bool dummy() +bool validate(const uint8_t* binary, size_t size) { - return fizzy_validate(NULL, 0); + return fizzy_validate(binary, size); +} + +bool parse(const uint8_t* binary, size_t size) +{ + struct FizzyModule* module = fizzy_parse(binary, size); + if (!module) + return false; + + fizzy_free_module(module); + return true; +} + +bool instantiate(const uint8_t* binary, size_t size) +{ + struct FizzyModule* module = fizzy_parse(binary, size); + if (!module) + return false; + + struct FizzyInstance* instance = fizzy_instantiate(module, NULL, 0); + if (!instance) + return false; + + fizzy_free_instance(instance); + return true; +} + +struct FizzyExecutionResult dummy_host_func(void* context, struct FizzyInstance* instance, + const union FizzyValue* args, size_t args_size, int depth) +{ + (void)context; + (void)instance; + (void)args; + (void)args_size; + (void)depth; + struct FizzyExecutionResult res = {true, false, {0}}; + return res; +} + +bool instantiate_with_host_func(const uint8_t* binary, size_t size) +{ + struct FizzyModule* module = fizzy_parse(binary, size); + if (!module) + return false; + + FizzyExternalFunction host_funcs[] = {{dummy_host_func, NULL}}; + + struct FizzyInstance* instance = fizzy_instantiate(module, host_funcs, 1); + if (!instance) + return false; + + fizzy_free_instance(instance); + return true; +} + +bool execute(const uint8_t* binary, size_t size) +{ + struct FizzyModule* module = fizzy_parse(binary, size); + if (!module) + return false; + + struct FizzyInstance* instance = fizzy_instantiate(module, NULL, 0); + if (!instance) + return false; + + fizzy_execute(instance, 0, NULL, 0); + + union FizzyValue args[] = {{1}, {2}}; + fizzy_execute(instance, 1, args, 0); + + fizzy_free_instance(instance); + return true; }