Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/crates/c-api/tests/component/call_func.cc
3067 views
1
#include <array>
2
#include <gtest/gtest.h>
3
#include <wasmtime/component.hh>
4
#include <wasmtime/store.hh>
5
6
using namespace wasmtime::component;
7
8
TEST(component, call_func) {
9
static constexpr auto component_text = std::string_view{
10
R"END(
11
(component
12
(core module $m
13
(func (export "f") (param $x i32) (param $y i32) (result i32)
14
(local.get $x)
15
(local.get $y)
16
(i32.add)
17
)
18
)
19
(core instance $i (instantiate $m))
20
(func $f (param "x" u32) (param "y" u32) (result u32) (canon lift (core func $i "f")))
21
(export "f" (func $f))
22
)
23
)END",
24
};
25
26
wasmtime::Engine engine;
27
wasmtime::Store store(engine);
28
auto context = store.context();
29
auto component = Component::compile(engine, component_text).unwrap();
30
auto f = *component.export_index(nullptr, "f");
31
32
Linker linker(engine);
33
34
auto instance = linker.instantiate(context, component).unwrap();
35
auto func = *instance.get_func(context, f);
36
37
auto params = std::array<Val, 2>{
38
uint32_t(34),
39
uint32_t(35),
40
};
41
42
auto results = std::array<Val, 1>{false};
43
44
func.call(context, params, results).unwrap();
45
46
func.post_return(context).unwrap();
47
48
EXPECT_TRUE(results[0].is_u32());
49
EXPECT_EQ(results[0].get_u32(), 69);
50
}
51
52