Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/crates/c-api/tests/val.cc
1692 views
1
#include <wasmtime/val.hh>
2
3
#include <gtest/gtest.h>
4
#include <wasmtime.hh>
5
6
using namespace wasmtime;
7
8
TEST(Val, Smoke) {
9
Val val(1);
10
EXPECT_EQ(val.kind(), ValKind::I32);
11
EXPECT_EQ(val.i32(), 1);
12
13
val = (int32_t)3;
14
EXPECT_EQ(val.kind(), ValKind::I32);
15
EXPECT_EQ(val.i32(), 3);
16
17
val = (int64_t)4;
18
EXPECT_EQ(val.kind(), ValKind::I64);
19
EXPECT_EQ(val.i64(), 4);
20
21
val = (float)5;
22
EXPECT_EQ(val.kind(), ValKind::F32);
23
EXPECT_EQ(val.f32(), 5);
24
25
val = (double)6;
26
EXPECT_EQ(val.kind(), ValKind::F64);
27
EXPECT_EQ(val.f64(), 6);
28
29
val = V128();
30
EXPECT_EQ(val.kind(), ValKind::V128);
31
for (int i = 0; i < 16; i++) {
32
EXPECT_EQ(val.v128().v128[i], 0);
33
}
34
35
Engine engine;
36
Store store(engine);
37
val = std::optional<ExternRef>(std::nullopt);
38
EXPECT_EQ(val.kind(), ValKind::ExternRef);
39
EXPECT_EQ(val.externref(store), std::nullopt);
40
41
val = std::optional<ExternRef>(ExternRef(store, 5));
42
EXPECT_EQ(val.kind(), ValKind::ExternRef);
43
EXPECT_EQ(std::any_cast<int>(val.externref(store)->data(store)), 5);
44
45
val = ExternRef(store, 5);
46
EXPECT_EQ(val.kind(), ValKind::ExternRef);
47
EXPECT_EQ(std::any_cast<int>(val.externref(store)->data(store)), 5);
48
49
val = std::optional<AnyRef>(std::nullopt);
50
EXPECT_EQ(val.kind(), ValKind::AnyRef);
51
EXPECT_EQ(val.anyref(store), std::nullopt);
52
53
val = std::optional<AnyRef>(AnyRef::i31(store, 5));
54
EXPECT_EQ(val.kind(), ValKind::AnyRef);
55
EXPECT_EQ(val.anyref(store)->i31(store), 5);
56
EXPECT_EQ(val.anyref(store)->u31(store), 5);
57
58
val = AnyRef::i31(store, -5);
59
EXPECT_EQ(val.kind(), ValKind::AnyRef);
60
EXPECT_EQ(val.anyref(store)->i31(store), -5);
61
EXPECT_EQ(val.anyref(store)->u31(store), 0x7ffffffb);
62
63
val = std::optional<Func>(std::nullopt);
64
EXPECT_EQ(val.kind(), ValKind::FuncRef);
65
EXPECT_EQ(val.funcref(), std::nullopt);
66
67
Func func(store, FuncType({}, {}),
68
[](auto caller, auto params, auto results) -> auto {
69
return std::monostate();
70
});
71
72
val = std::optional<Func>(func);
73
EXPECT_EQ(val.kind(), ValKind::FuncRef);
74
75
val = func;
76
EXPECT_EQ(val.kind(), ValKind::FuncRef);
77
}
78
79