1 #include <gtest/gtest.h>
2 #include <wasmtime/types/memory.hh>
3
4 using namespace wasmtime;
5
TEST(MemoryType,Simple)6 TEST(MemoryType, Simple) {
7 MemoryType ty(1);
8 EXPECT_EQ(ty->min(), 1);
9 EXPECT_EQ(ty->max(), std::nullopt);
10 EXPECT_FALSE(ty->is_64());
11 EXPECT_FALSE(ty->is_shared());
12 EXPECT_EQ(ty->page_size_log2(), 16);
13 EXPECT_EQ(ty->page_size(), 1 << 16);
14 }
15
TEST(MemoryType,WithMax)16 TEST(MemoryType, WithMax) {
17 MemoryType ty(1, 2);
18 EXPECT_EQ(ty->min(), 1);
19 EXPECT_EQ(ty->max(), 2);
20 EXPECT_FALSE(ty->is_64());
21 EXPECT_FALSE(ty->is_shared());
22 EXPECT_EQ(ty->page_size_log2(), 16);
23 EXPECT_EQ(ty->page_size(), 1 << 16);
24 }
25
TEST(MemoryType,Mem64)26 TEST(MemoryType, Mem64) {
27 MemoryType ty = MemoryType::New64(1);
28 EXPECT_EQ(ty->min(), 1);
29 EXPECT_EQ(ty->max(), std::nullopt);
30 EXPECT_TRUE(ty->is_64());
31 EXPECT_FALSE(ty->is_shared());
32 EXPECT_EQ(ty->page_size_log2(), 16);
33 EXPECT_EQ(ty->page_size(), 1 << 16);
34
35 ty = MemoryType::New64(1, 2);
36 EXPECT_EQ(ty->min(), 1);
37 EXPECT_EQ(ty->max(), 2);
38 EXPECT_TRUE(ty->is_64());
39 EXPECT_FALSE(ty->is_shared());
40 EXPECT_EQ(ty->page_size_log2(), 16);
41 EXPECT_EQ(ty->page_size(), 1 << 16);
42 }
43
TEST(MemoryType,Builder)44 TEST(MemoryType, Builder) {
45 MemoryType ty = MemoryType::Builder().build().unwrap();
46 EXPECT_EQ(ty->min(), 0);
47 EXPECT_EQ(ty->max(), std::nullopt);
48 EXPECT_FALSE(ty->is_64());
49 EXPECT_FALSE(ty->is_shared());
50 EXPECT_EQ(ty->page_size_log2(), 16);
51 EXPECT_EQ(ty->page_size(), 1 << 16);
52
53 ty =
54 MemoryType::Builder().max(4).shared(true).memory64(true).build().unwrap();
55 EXPECT_EQ(ty->min(), 0);
56 EXPECT_EQ(ty->max(), 4);
57 EXPECT_TRUE(ty->is_64());
58 EXPECT_TRUE(ty->is_shared());
59 EXPECT_EQ(ty->page_size_log2(), 16);
60 EXPECT_EQ(ty->page_size(), 1 << 16);
61
62 ty = MemoryType::Builder()
63 .min(5)
64 .max(500)
65 .shared(true)
66 .memory64(false)
67 .build()
68 .unwrap();
69 EXPECT_EQ(ty->min(), 5);
70 EXPECT_EQ(ty->max(), 500);
71 EXPECT_FALSE(ty->is_64());
72 EXPECT_TRUE(ty->is_shared());
73 EXPECT_EQ(ty->page_size_log2(), 16);
74 EXPECT_EQ(ty->page_size(), 1 << 16);
75
76 // 1-byte custom page size.
77 ty = MemoryType::Builder()
78 .min(1 << 16)
79 .max(1 << 17)
80 .page_size_log2(0)
81 .build()
82 .unwrap();
83 EXPECT_EQ(ty->min(), 1 << 16);
84 EXPECT_EQ(ty->max(), 1 << 17);
85 EXPECT_FALSE(ty->is_64());
86 EXPECT_FALSE(ty->is_shared());
87 EXPECT_EQ(ty->page_size_log2(), 0);
88 EXPECT_EQ(ty->page_size(), 1);
89
90 // Invalid custom page size.
91 EXPECT_FALSE(MemoryType::Builder().min(1).page_size_log2(4).build());
92 }
93