Path: blob/main/crates/c-api/tests/component/call_func.cc
3067 views
#include <array>1#include <gtest/gtest.h>2#include <wasmtime/component.hh>3#include <wasmtime/store.hh>45using namespace wasmtime::component;67TEST(component, call_func) {8static constexpr auto component_text = std::string_view{9R"END(10(component11(core module $m12(func (export "f") (param $x i32) (param $y i32) (result i32)13(local.get $x)14(local.get $y)15(i32.add)16)17)18(core instance $i (instantiate $m))19(func $f (param "x" u32) (param "y" u32) (result u32) (canon lift (core func $i "f")))20(export "f" (func $f))21)22)END",23};2425wasmtime::Engine engine;26wasmtime::Store store(engine);27auto context = store.context();28auto component = Component::compile(engine, component_text).unwrap();29auto f = *component.export_index(nullptr, "f");3031Linker linker(engine);3233auto instance = linker.instantiate(context, component).unwrap();34auto func = *instance.get_func(context, f);3536auto params = std::array<Val, 2>{37uint32_t(34),38uint32_t(35),39};4041auto results = std::array<Val, 1>{false};4243func.call(context, params, results).unwrap();4445func.post_return(context).unwrap();4647EXPECT_TRUE(results[0].is_u32());48EXPECT_EQ(results[0].get_u32(), 69);49}505152