1;;! multi_memory = true
2;;! threads = true
3;;! memory64 = true
4;;! custom_page_sizes = true
5
6;; generate the cross product of:
7;;
8;; * maximum listed: {no, yes}
9;; * page size: {1<<16, 1}
10;; * shared: {no, yes}
11;; * index type: {i32, i64}
12(module
13  (memory $m1 1)
14  (memory $m2 1 65536)
15  (memory $m3 1 (pagesize 1))
16  (memory $m4 1 0xffff_ffff (pagesize 1))
17
18  ;; (memory $m5 1 shared) - skipped since shared requires max size
19  (memory $m6 1 65536 shared)
20  ;; (memory $m7 1 (pagesize 1)) - skipped since shared requires max size
21  (memory $m8 1 0xffff_ffff shared (pagesize 1))
22
23  (memory $m9 i64 1)
24  (memory $m10 i64 1 65536)
25  (memory $m11 i64 1 (pagesize 1))
26  (memory $m12 i64 1 0xffff_ffff (pagesize 1))
27
28  ;; (memory $m13 1 shared) - skipped since shared requires max size
29  (memory $m14 i64 1 65536 shared)
30  ;; (memory $m16 1 (pagesize 1)) - skipped since shared requires max size
31  (memory $m16 i64 1 0xffff_ffff shared (pagesize 1))
32
33  (func (export "load_m1") (param i32) (result i32) (i32.load8_u $m1 (local.get 0)))
34  (func (export "load_m2") (param i32) (result i32) (i32.load8_u $m2 (local.get 0)))
35  (func (export "load_m3") (param i32) (result i32) (i32.load8_u $m3 (local.get 0)))
36  (func (export "load_m4") (param i32) (result i32) (i32.load8_u $m4 (local.get 0)))
37  (func (export "load_m6") (param i32) (result i32) (i32.load8_u $m6 (local.get 0)))
38  (func (export "load_m8") (param i32) (result i32) (i32.load8_u $m8 (local.get 0)))
39  (func (export "load_m9") (param i64) (result i32) (i32.load8_u $m9 (local.get 0)))
40  (func (export "load_m10") (param i64) (result i32) (i32.load8_u $m10 (local.get 0)))
41  (func (export "load_m11") (param i64) (result i32) (i32.load8_u $m11 (local.get 0)))
42  (func (export "load_m12") (param i64) (result i32) (i32.load8_u $m12 (local.get 0)))
43  (func (export "load_m14") (param i64) (result i32) (i32.load8_u $m14 (local.get 0)))
44  (func (export "load_m16") (param i64) (result i32) (i32.load8_u $m16 (local.get 0)))
45
46  (func (export "store_m1") (param i32 i32) (i32.store8 $m1 (local.get 0) (local.get 1)))
47  (func (export "store_m2") (param i32 i32) (i32.store8 $m2 (local.get 0) (local.get 1)))
48  (func (export "store_m3") (param i32 i32) (i32.store8 $m3 (local.get 0) (local.get 1)))
49  (func (export "store_m4") (param i32 i32) (i32.store8 $m4 (local.get 0) (local.get 1)))
50  (func (export "store_m6") (param i32 i32) (i32.store8 $m6 (local.get 0) (local.get 1)))
51  (func (export "store_m8") (param i32 i32) (i32.store8 $m8 (local.get 0) (local.get 1)))
52  (func (export "store_m9") (param i64 i32) (i32.store8 $m9 (local.get 0) (local.get 1)))
53  (func (export "store_m10") (param i64 i32) (i32.store8 $m10 (local.get 0) (local.get 1)))
54  (func (export "store_m11") (param i64 i32) (i32.store8 $m11 (local.get 0) (local.get 1)))
55  (func (export "store_m12") (param i64 i32) (i32.store8 $m12 (local.get 0) (local.get 1)))
56  (func (export "store_m14") (param i64 i32) (i32.store8 $m14 (local.get 0) (local.get 1)))
57  (func (export "store_m16") (param i64 i32) (i32.store8 $m16 (local.get 0) (local.get 1)))
58
59  (func (export "grow_m1") (param i32) (result i32) (memory.grow $m1 (local.get 0)))
60  (func (export "grow_m2") (param i32) (result i32) (memory.grow $m2 (local.get 0)))
61  (func (export "grow_m3") (param i32) (result i32) (memory.grow $m3 (local.get 0)))
62  (func (export "grow_m4") (param i32) (result i32) (memory.grow $m4 (local.get 0)))
63  (func (export "grow_m6") (param i32) (result i32) (memory.grow $m6 (local.get 0)))
64  (func (export "grow_m8") (param i32) (result i32) (memory.grow $m8 (local.get 0)))
65  (func (export "grow_m9") (param i64) (result i64) (memory.grow $m9 (local.get 0)))
66  (func (export "grow_m10") (param i64) (result i64) (memory.grow $m10 (local.get 0)))
67  (func (export "grow_m11") (param i64) (result i64) (memory.grow $m11 (local.get 0)))
68  (func (export "grow_m12") (param i64) (result i64) (memory.grow $m12 (local.get 0)))
69  (func (export "grow_m14") (param i64) (result i64) (memory.grow $m14 (local.get 0)))
70  (func (export "grow_m16") (param i64) (result i64) (memory.grow $m16 (local.get 0)))
71
72  (func (export "size_m1") (result i32) (memory.size $m1))
73  (func (export "size_m2") (result i32) (memory.size $m2))
74  (func (export "size_m3") (result i32) (memory.size $m3))
75  (func (export "size_m4") (result i32) (memory.size $m4))
76  (func (export "size_m6") (result i32) (memory.size $m6))
77  (func (export "size_m8") (result i32) (memory.size $m8))
78  (func (export "size_m9") (result i64) (memory.size $m9))
79  (func (export "size_m10") (result i64) (memory.size $m10))
80  (func (export "size_m11") (result i64) (memory.size $m11))
81  (func (export "size_m12") (result i64) (memory.size $m12))
82  (func (export "size_m14") (result i64) (memory.size $m14))
83  (func (export "size_m16") (result i64) (memory.size $m16))
84)
85
86(assert_return (invoke "load_m1" (i32.const 0)) (i32.const 0))
87(assert_return (invoke "store_m1" (i32.const 0) (i32.const 1)))
88(assert_return (invoke "load_m1" (i32.const 0)) (i32.const 1))
89(assert_return (invoke "size_m1") (i32.const 1))
90(assert_trap (invoke "load_m1" (i32.const 65536)) "out of bounds memory access")
91(assert_trap (invoke "store_m1" (i32.const 65536) (i32.const 0)) "out of bounds memory access")
92(assert_trap (invoke "load_m1" (i32.const -1)) "out of bounds memory access")
93(assert_trap (invoke "store_m1" (i32.const -1) (i32.const 0)) "out of bounds memory access")
94(assert_return (invoke "grow_m1" (i32.const 1)) (i32.const 1))
95(assert_return (invoke "size_m1") (i32.const 2))
96(assert_return (invoke "grow_m1" (i32.const -1)) (i32.const -1))
97(assert_return (invoke "load_m1" (i32.const 65536)) (i32.const 0))
98(assert_return (invoke "store_m1" (i32.const 65536) (i32.const 1)))
99(assert_return (invoke "load_m1" (i32.const 65536)) (i32.const 1))
100(assert_trap (invoke "load_m1" (i32.const -1)) "out of bounds memory access")
101(assert_trap (invoke "store_m1" (i32.const -1) (i32.const 0)) "out of bounds memory access")
102
103(assert_return (invoke "load_m2" (i32.const 0)) (i32.const 0))
104(assert_return (invoke "store_m2" (i32.const 0) (i32.const 1)))
105(assert_return (invoke "load_m2" (i32.const 0)) (i32.const 1))
106(assert_return (invoke "size_m2") (i32.const 1))
107(assert_trap (invoke "load_m2" (i32.const 65536)) "out of bounds memory access")
108(assert_trap (invoke "store_m2" (i32.const 65536) (i32.const 0)) "out of bounds memory access")
109(assert_trap (invoke "load_m2" (i32.const -1)) "out of bounds memory access")
110(assert_trap (invoke "store_m2" (i32.const -1) (i32.const 0)) "out of bounds memory access")
111(assert_return (invoke "grow_m2" (i32.const 1)) (i32.const 1))
112(assert_return (invoke "size_m2") (i32.const 2))
113(assert_return (invoke "grow_m2" (i32.const -1)) (i32.const -1))
114(assert_return (invoke "load_m2" (i32.const 65536)) (i32.const 0))
115(assert_return (invoke "store_m2" (i32.const 65536) (i32.const 1)))
116(assert_return (invoke "load_m2" (i32.const 65536)) (i32.const 1))
117(assert_trap (invoke "load_m2" (i32.const -1)) "out of bounds memory access")
118(assert_trap (invoke "store_m2" (i32.const -1) (i32.const 0)) "out of bounds memory access")
119
120(assert_return (invoke "load_m3" (i32.const 0)) (i32.const 0))
121(assert_return (invoke "store_m3" (i32.const 0) (i32.const 1)))
122(assert_return (invoke "load_m3" (i32.const 0)) (i32.const 1))
123(assert_return (invoke "size_m3") (i32.const 1))
124(assert_trap (invoke "load_m3" (i32.const 1)) "out of bounds memory access")
125(assert_trap (invoke "store_m3" (i32.const 1) (i32.const 0)) "out of bounds memory access")
126(assert_trap (invoke "load_m3" (i32.const -1)) "out of bounds memory access")
127(assert_trap (invoke "store_m3" (i32.const -1) (i32.const 0)) "out of bounds memory access")
128(assert_return (invoke "grow_m3" (i32.const 1)) (i32.const 1))
129(assert_return (invoke "size_m3") (i32.const 2))
130(assert_return (invoke "grow_m3" (i32.const -1)) (i32.const -1))
131(assert_return (invoke "load_m3" (i32.const 1)) (i32.const 0))
132(assert_return (invoke "store_m3" (i32.const 1) (i32.const 1)))
133(assert_return (invoke "load_m3" (i32.const 1)) (i32.const 1))
134(assert_trap (invoke "load_m3" (i32.const -1)) "out of bounds memory access")
135(assert_trap (invoke "store_m3" (i32.const -1) (i32.const 0)) "out of bounds memory access")
136
137(assert_return (invoke "load_m4" (i32.const 0)) (i32.const 0))
138(assert_return (invoke "store_m4" (i32.const 0) (i32.const 1)))
139(assert_return (invoke "load_m4" (i32.const 0)) (i32.const 1))
140(assert_return (invoke "size_m4") (i32.const 1))
141(assert_trap (invoke "load_m4" (i32.const 1)) "out of bounds memory access")
142(assert_trap (invoke "store_m4" (i32.const 1) (i32.const 0)) "out of bounds memory access")
143(assert_trap (invoke "load_m4" (i32.const -1)) "out of bounds memory access")
144(assert_trap (invoke "store_m4" (i32.const -1) (i32.const 0)) "out of bounds memory access")
145(assert_return (invoke "grow_m4" (i32.const 1)) (i32.const 1))
146(assert_return (invoke "size_m4") (i32.const 2))
147(assert_return (invoke "grow_m4" (i32.const -1)) (i32.const -1))
148(assert_return (invoke "load_m4" (i32.const 1)) (i32.const 0))
149(assert_return (invoke "store_m4" (i32.const 1) (i32.const 1)))
150(assert_return (invoke "load_m4" (i32.const 1)) (i32.const 1))
151(assert_trap (invoke "load_m4" (i32.const -1)) "out of bounds memory access")
152(assert_trap (invoke "store_m4" (i32.const -1) (i32.const 0)) "out of bounds memory access")
153
154(assert_return (invoke "load_m6" (i32.const 0)) (i32.const 0))
155(assert_return (invoke "store_m6" (i32.const 0) (i32.const 1)))
156(assert_return (invoke "load_m6" (i32.const 0)) (i32.const 1))
157(assert_return (invoke "size_m6") (i32.const 1))
158(assert_trap (invoke "load_m6" (i32.const 65536)) "out of bounds memory access")
159(assert_trap (invoke "store_m6" (i32.const 65536) (i32.const 0)) "out of bounds memory access")
160(assert_trap (invoke "load_m6" (i32.const -1)) "out of bounds memory access")
161(assert_trap (invoke "store_m6" (i32.const -1) (i32.const 0)) "out of bounds memory access")
162(assert_return (invoke "grow_m6" (i32.const 1)) (i32.const 1))
163(assert_return (invoke "size_m6") (i32.const 2))
164(assert_return (invoke "grow_m6" (i32.const -1)) (i32.const -1))
165(assert_return (invoke "load_m6" (i32.const 65536)) (i32.const 0))
166(assert_return (invoke "store_m6" (i32.const 65536) (i32.const 1)))
167(assert_return (invoke "load_m6" (i32.const 65536)) (i32.const 1))
168(assert_trap (invoke "load_m6" (i32.const -1)) "out of bounds memory access")
169(assert_trap (invoke "store_m6" (i32.const -1) (i32.const 0)) "out of bounds memory access")
170
171(assert_return (invoke "load_m8" (i32.const 0)) (i32.const 0))
172(assert_return (invoke "store_m8" (i32.const 0) (i32.const 1)))
173(assert_return (invoke "load_m8" (i32.const 0)) (i32.const 1))
174(assert_return (invoke "size_m8") (i32.const 1))
175(assert_trap (invoke "load_m8" (i32.const 1)) "out of bounds memory access")
176(assert_trap (invoke "store_m8" (i32.const 1) (i32.const 0)) "out of bounds memory access")
177(assert_trap (invoke "load_m8" (i32.const -1)) "out of bounds memory access")
178(assert_trap (invoke "store_m8" (i32.const -1) (i32.const 0)) "out of bounds memory access")
179(assert_return (invoke "grow_m8" (i32.const 1)) (i32.const 1))
180(assert_return (invoke "size_m8") (i32.const 2))
181(assert_return (invoke "grow_m8" (i32.const -1)) (i32.const -1))
182(assert_return (invoke "load_m8" (i32.const 1)) (i32.const 0))
183(assert_return (invoke "store_m8" (i32.const 1) (i32.const 1)))
184(assert_return (invoke "load_m8" (i32.const 1)) (i32.const 1))
185(assert_trap (invoke "load_m8" (i32.const -1)) "out of bounds memory access")
186(assert_trap (invoke "store_m8" (i32.const -1) (i32.const 0)) "out of bounds memory access")
187
188(assert_return (invoke "load_m9" (i64.const 0)) (i32.const 0))
189(assert_return (invoke "store_m9" (i64.const 0) (i32.const 1)))
190(assert_return (invoke "load_m9" (i64.const 0)) (i32.const 1))
191(assert_return (invoke "size_m9") (i64.const 1))
192(assert_trap (invoke "load_m9" (i64.const 65536)) "out of bounds memory access")
193(assert_trap (invoke "store_m9" (i64.const 65536) (i32.const 0)) "out of bounds memory access")
194(assert_trap (invoke "load_m9" (i64.const -1)) "out of bounds memory access")
195(assert_trap (invoke "store_m9" (i64.const -1) (i32.const 0)) "out of bounds memory access")
196(assert_return (invoke "grow_m9" (i64.const 1)) (i64.const 1))
197(assert_return (invoke "size_m9") (i64.const 2))
198(assert_return (invoke "grow_m9" (i64.const -1)) (i64.const -1))
199(assert_return (invoke "load_m9" (i64.const 65536)) (i32.const 0))
200(assert_return (invoke "store_m9" (i64.const 65536) (i32.const 1)))
201(assert_return (invoke "load_m9" (i64.const 65536)) (i32.const 1))
202(assert_trap (invoke "load_m9" (i64.const -1)) "out of bounds memory access")
203(assert_trap (invoke "store_m9" (i64.const -1) (i32.const 0)) "out of bounds memory access")
204
205(assert_return (invoke "load_m10" (i64.const 0)) (i32.const 0))
206(assert_return (invoke "store_m10" (i64.const 0) (i32.const 1)))
207(assert_return (invoke "load_m10" (i64.const 0)) (i32.const 1))
208(assert_return (invoke "size_m10") (i64.const 1))
209(assert_trap (invoke "load_m10" (i64.const 65536)) "out of bounds memory access")
210(assert_trap (invoke "store_m10" (i64.const 65536) (i32.const 0)) "out of bounds memory access")
211(assert_trap (invoke "load_m10" (i64.const -1)) "out of bounds memory access")
212(assert_trap (invoke "store_m10" (i64.const -1) (i32.const 0)) "out of bounds memory access")
213(assert_return (invoke "grow_m10" (i64.const 1)) (i64.const 1))
214(assert_return (invoke "size_m10") (i64.const 2))
215(assert_return (invoke "grow_m10" (i64.const -1)) (i64.const -1))
216(assert_return (invoke "load_m10" (i64.const 65536)) (i32.const 0))
217(assert_return (invoke "store_m10" (i64.const 65536) (i32.const 1)))
218(assert_return (invoke "load_m10" (i64.const 65536)) (i32.const 1))
219(assert_trap (invoke "load_m10" (i64.const -1)) "out of bounds memory access")
220(assert_trap (invoke "store_m10" (i64.const -1) (i32.const 0)) "out of bounds memory access")
221
222(assert_return (invoke "load_m11" (i64.const 0)) (i32.const 0))
223(assert_return (invoke "store_m11" (i64.const 0) (i32.const 1)))
224(assert_return (invoke "load_m11" (i64.const 0)) (i32.const 1))
225(assert_return (invoke "size_m11") (i64.const 1))
226(assert_trap (invoke "load_m11" (i64.const 1)) "out of bounds memory access")
227(assert_trap (invoke "store_m11" (i64.const 1) (i32.const 0)) "out of bounds memory access")
228(assert_trap (invoke "load_m11" (i64.const -1)) "out of bounds memory access")
229(assert_trap (invoke "store_m11" (i64.const -1) (i32.const 0)) "out of bounds memory access")
230(assert_return (invoke "grow_m11" (i64.const 1)) (i64.const 1))
231(assert_return (invoke "size_m11") (i64.const 2))
232(assert_return (invoke "grow_m11" (i64.const -1)) (i64.const -1))
233(assert_return (invoke "load_m11" (i64.const 1)) (i32.const 0))
234(assert_return (invoke "store_m11" (i64.const 1) (i32.const 1)))
235(assert_return (invoke "load_m11" (i64.const 1)) (i32.const 1))
236(assert_trap (invoke "load_m11" (i64.const -1)) "out of bounds memory access")
237(assert_trap (invoke "store_m11" (i64.const -1) (i32.const 0)) "out of bounds memory access")
238
239(assert_return (invoke "load_m12" (i64.const 0)) (i32.const 0))
240(assert_return (invoke "store_m12" (i64.const 0) (i32.const 1)))
241(assert_return (invoke "load_m12" (i64.const 0)) (i32.const 1))
242(assert_return (invoke "size_m12") (i64.const 1))
243(assert_trap (invoke "load_m12" (i64.const 1)) "out of bounds memory access")
244(assert_trap (invoke "store_m12" (i64.const 1) (i32.const 0)) "out of bounds memory access")
245(assert_trap (invoke "load_m12" (i64.const -1)) "out of bounds memory access")
246(assert_trap (invoke "store_m12" (i64.const -1) (i32.const 0)) "out of bounds memory access")
247(assert_return (invoke "grow_m12" (i64.const 1)) (i64.const 1))
248(assert_return (invoke "size_m12") (i64.const 2))
249(assert_return (invoke "grow_m12" (i64.const -1)) (i64.const -1))
250(assert_return (invoke "load_m12" (i64.const 1)) (i32.const 0))
251(assert_return (invoke "store_m12" (i64.const 1) (i32.const 1)))
252(assert_return (invoke "load_m12" (i64.const 1)) (i32.const 1))
253(assert_trap (invoke "load_m12" (i64.const -1)) "out of bounds memory access")
254(assert_trap (invoke "store_m12" (i64.const -1) (i32.const 0)) "out of bounds memory access")
255
256(assert_return (invoke "load_m14" (i64.const 0)) (i32.const 0))
257(assert_return (invoke "store_m14" (i64.const 0) (i32.const 1)))
258(assert_return (invoke "load_m14" (i64.const 0)) (i32.const 1))
259(assert_return (invoke "size_m14") (i64.const 1))
260(assert_trap (invoke "load_m14" (i64.const 65536)) "out of bounds memory access")
261(assert_trap (invoke "store_m14" (i64.const 65536) (i32.const 0)) "out of bounds memory access")
262(assert_trap (invoke "load_m14" (i64.const -1)) "out of bounds memory access")
263(assert_trap (invoke "store_m14" (i64.const -1) (i32.const 0)) "out of bounds memory access")
264(assert_return (invoke "grow_m14" (i64.const 1)) (i64.const 1))
265(assert_return (invoke "size_m14") (i64.const 2))
266(assert_return (invoke "grow_m14" (i64.const -1)) (i64.const -1))
267(assert_return (invoke "load_m14" (i64.const 65536)) (i32.const 0))
268(assert_return (invoke "store_m14" (i64.const 65536) (i32.const 1)))
269(assert_return (invoke "load_m14" (i64.const 65536)) (i32.const 1))
270(assert_trap (invoke "load_m14" (i64.const -1)) "out of bounds memory access")
271(assert_trap (invoke "store_m14" (i64.const -1) (i32.const 0)) "out of bounds memory access")
272
273(assert_return (invoke "load_m16" (i64.const 0)) (i32.const 0))
274(assert_return (invoke "store_m16" (i64.const 0) (i32.const 1)))
275(assert_return (invoke "load_m16" (i64.const 0)) (i32.const 1))
276(assert_return (invoke "size_m16") (i64.const 1))
277(assert_trap (invoke "load_m16" (i64.const 1)) "out of bounds memory access")
278(assert_trap (invoke "store_m16" (i64.const 1) (i32.const 0)) "out of bounds memory access")
279(assert_trap (invoke "load_m16" (i64.const -1)) "out of bounds memory access")
280(assert_trap (invoke "store_m16" (i64.const -1) (i32.const 0)) "out of bounds memory access")
281(assert_return (invoke "grow_m16" (i64.const 1)) (i64.const 1))
282(assert_return (invoke "size_m16") (i64.const 2))
283(assert_return (invoke "grow_m16" (i64.const -1)) (i64.const -1))
284(assert_return (invoke "load_m16" (i64.const 1)) (i32.const 0))
285(assert_return (invoke "store_m16" (i64.const 1) (i32.const 1)))
286(assert_return (invoke "load_m16" (i64.const 1)) (i32.const 1))
287(assert_trap (invoke "load_m16" (i64.const -1)) "out of bounds memory access")
288(assert_trap (invoke "store_m16" (i64.const -1) (i32.const 0)) "out of bounds memory access")
289