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