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