| 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(), 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()->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()->data(store)), 5); |
| 48 | |
| 49 | val = std::optional<AnyRef>(std::nullopt); |
| 50 | EXPECT_EQ(val.kind(), ValKind::AnyRef); |
| 51 | EXPECT_EQ(val.anyref(), std::nullopt); |
| 52 | |
| 53 | val = std::optional<AnyRef>(AnyRef::i31(store, 5)); |
| 54 | EXPECT_EQ(val.kind(), ValKind::AnyRef); |
| 55 | EXPECT_EQ(val.anyref()->i31(store), 5); |
| 56 | EXPECT_EQ(val.anyref()->u31(store), 5); |
| 57 | |
| 58 | val = AnyRef::i31(store, -5); |
| 59 | EXPECT_EQ(val.kind(), ValKind::AnyRef); |
| 60 | EXPECT_EQ(val.anyref()->i31(store), -5); |
| 61 | EXPECT_EQ(val.anyref()->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); |