memory_grow64.wast.js (7616B)
1 /* Copyright 2021 Mozilla Foundation 2 * 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 // ./test/core/memory64/memory_grow64.wast 17 18 // ./test/core/memory64/memory_grow64.wast:1 19 let $0 = instantiate(`(module 20 (memory i64 0) 21 22 (func (export "load_at_zero") (result i32) (i32.load (i64.const 0))) 23 (func (export "store_at_zero") (i32.store (i64.const 0) (i32.const 2))) 24 25 (func (export "load_at_page_size") (result i32) (i32.load (i64.const 0x10000))) 26 (func (export "store_at_page_size") (i32.store (i64.const 0x10000) (i32.const 3))) 27 28 (func (export "grow") (param \$sz i64) (result i64) (memory.grow (local.get \$sz))) 29 (func (export "size") (result i64) (memory.size)) 30 )`); 31 32 // ./test/core/memory64/memory_grow64.wast:14 33 assert_return(() => invoke($0, `size`, []), [value("i64", 0n)]); 34 35 // ./test/core/memory64/memory_grow64.wast:15 36 assert_trap(() => invoke($0, `store_at_zero`, []), `out of bounds memory access`); 37 38 // ./test/core/memory64/memory_grow64.wast:16 39 assert_trap(() => invoke($0, `load_at_zero`, []), `out of bounds memory access`); 40 41 // ./test/core/memory64/memory_grow64.wast:17 42 assert_trap(() => invoke($0, `store_at_page_size`, []), `out of bounds memory access`); 43 44 // ./test/core/memory64/memory_grow64.wast:18 45 assert_trap(() => invoke($0, `load_at_page_size`, []), `out of bounds memory access`); 46 47 // ./test/core/memory64/memory_grow64.wast:19 48 assert_return(() => invoke($0, `grow`, [1n]), [value("i64", 0n)]); 49 50 // ./test/core/memory64/memory_grow64.wast:20 51 assert_return(() => invoke($0, `size`, []), [value("i64", 1n)]); 52 53 // ./test/core/memory64/memory_grow64.wast:21 54 assert_return(() => invoke($0, `load_at_zero`, []), [value("i32", 0)]); 55 56 // ./test/core/memory64/memory_grow64.wast:22 57 assert_return(() => invoke($0, `store_at_zero`, []), []); 58 59 // ./test/core/memory64/memory_grow64.wast:23 60 assert_return(() => invoke($0, `load_at_zero`, []), [value("i32", 2)]); 61 62 // ./test/core/memory64/memory_grow64.wast:24 63 assert_trap(() => invoke($0, `store_at_page_size`, []), `out of bounds memory access`); 64 65 // ./test/core/memory64/memory_grow64.wast:25 66 assert_trap(() => invoke($0, `load_at_page_size`, []), `out of bounds memory access`); 67 68 // ./test/core/memory64/memory_grow64.wast:26 69 assert_return(() => invoke($0, `grow`, [4n]), [value("i64", 1n)]); 70 71 // ./test/core/memory64/memory_grow64.wast:27 72 assert_return(() => invoke($0, `size`, []), [value("i64", 5n)]); 73 74 // ./test/core/memory64/memory_grow64.wast:28 75 assert_return(() => invoke($0, `load_at_zero`, []), [value("i32", 2)]); 76 77 // ./test/core/memory64/memory_grow64.wast:29 78 assert_return(() => invoke($0, `store_at_zero`, []), []); 79 80 // ./test/core/memory64/memory_grow64.wast:30 81 assert_return(() => invoke($0, `load_at_zero`, []), [value("i32", 2)]); 82 83 // ./test/core/memory64/memory_grow64.wast:31 84 assert_return(() => invoke($0, `load_at_page_size`, []), [value("i32", 0)]); 85 86 // ./test/core/memory64/memory_grow64.wast:32 87 assert_return(() => invoke($0, `store_at_page_size`, []), []); 88 89 // ./test/core/memory64/memory_grow64.wast:33 90 assert_return(() => invoke($0, `load_at_page_size`, []), [value("i32", 3)]); 91 92 // ./test/core/memory64/memory_grow64.wast:36 93 let $1 = instantiate(`(module 94 (memory i64 0) 95 (func (export "grow") (param i64) (result i64) (memory.grow (local.get 0))) 96 )`); 97 98 // ./test/core/memory64/memory_grow64.wast:41 99 assert_return(() => invoke($1, `grow`, [0n]), [value("i64", 0n)]); 100 101 // ./test/core/memory64/memory_grow64.wast:42 102 assert_return(() => invoke($1, `grow`, [1n]), [value("i64", 0n)]); 103 104 // ./test/core/memory64/memory_grow64.wast:43 105 assert_return(() => invoke($1, `grow`, [0n]), [value("i64", 1n)]); 106 107 // ./test/core/memory64/memory_grow64.wast:44 108 assert_return(() => invoke($1, `grow`, [2n]), [value("i64", 1n)]); 109 110 // ./test/core/memory64/memory_grow64.wast:45 111 assert_return(() => invoke($1, `grow`, [800n]), [value("i64", 3n)]); 112 113 // ./test/core/memory64/memory_grow64.wast:46 114 assert_return(() => invoke($1, `grow`, [1n]), [value("i64", 803n)]); 115 116 // ./test/core/memory64/memory_grow64.wast:48 117 let $2 = instantiate(`(module 118 (memory i64 0 10) 119 (func (export "grow") (param i64) (result i64) (memory.grow (local.get 0))) 120 )`); 121 122 // ./test/core/memory64/memory_grow64.wast:53 123 assert_return(() => invoke($2, `grow`, [0n]), [value("i64", 0n)]); 124 125 // ./test/core/memory64/memory_grow64.wast:54 126 assert_return(() => invoke($2, `grow`, [1n]), [value("i64", 0n)]); 127 128 // ./test/core/memory64/memory_grow64.wast:55 129 assert_return(() => invoke($2, `grow`, [1n]), [value("i64", 1n)]); 130 131 // ./test/core/memory64/memory_grow64.wast:56 132 assert_return(() => invoke($2, `grow`, [2n]), [value("i64", 2n)]); 133 134 // ./test/core/memory64/memory_grow64.wast:57 135 assert_return(() => invoke($2, `grow`, [6n]), [value("i64", 4n)]); 136 137 // ./test/core/memory64/memory_grow64.wast:58 138 assert_return(() => invoke($2, `grow`, [0n]), [value("i64", 10n)]); 139 140 // ./test/core/memory64/memory_grow64.wast:59 141 assert_return(() => invoke($2, `grow`, [1n]), [value("i64", -1n)]); 142 143 // ./test/core/memory64/memory_grow64.wast:60 144 assert_return(() => invoke($2, `grow`, [65536n]), [value("i64", -1n)]); 145 146 // ./test/core/memory64/memory_grow64.wast:64 147 let $3 = instantiate(`(module 148 (memory i64 1) 149 (func (export "grow") (param i64) (result i64) 150 (memory.grow (local.get 0)) 151 ) 152 (func (export "check-memory-zero") (param i64 i64) (result i32) 153 (local i32) 154 (local.set 2 (i32.const 1)) 155 (block 156 (loop 157 (local.set 2 (i32.load8_u (local.get 0))) 158 (br_if 1 (i32.ne (local.get 2) (i32.const 0))) 159 (br_if 1 (i64.ge_u (local.get 0) (local.get 1))) 160 (local.set 0 (i64.add (local.get 0) (i64.const 1))) 161 (br_if 0 (i64.le_u (local.get 0) (local.get 1))) 162 ) 163 ) 164 (local.get 2) 165 ) 166 )`); 167 168 // ./test/core/memory64/memory_grow64.wast:85 169 assert_return(() => invoke($3, `check-memory-zero`, [0n, 65535n]), [value("i32", 0)]); 170 171 // ./test/core/memory64/memory_grow64.wast:86 172 assert_return(() => invoke($3, `grow`, [1n]), [value("i64", 1n)]); 173 174 // ./test/core/memory64/memory_grow64.wast:87 175 assert_return(() => invoke($3, `check-memory-zero`, [65536n, 131071n]), [value("i32", 0)]); 176 177 // ./test/core/memory64/memory_grow64.wast:88 178 assert_return(() => invoke($3, `grow`, [1n]), [value("i64", 2n)]); 179 180 // ./test/core/memory64/memory_grow64.wast:89 181 assert_return(() => invoke($3, `check-memory-zero`, [131072n, 196607n]), [value("i32", 0)]); 182 183 // ./test/core/memory64/memory_grow64.wast:90 184 assert_return(() => invoke($3, `grow`, [1n]), [value("i64", 3n)]); 185 186 // ./test/core/memory64/memory_grow64.wast:91 187 assert_return(() => invoke($3, `check-memory-zero`, [196608n, 262143n]), [value("i32", 0)]); 188 189 // ./test/core/memory64/memory_grow64.wast:92 190 assert_return(() => invoke($3, `grow`, [1n]), [value("i64", 4n)]); 191 192 // ./test/core/memory64/memory_grow64.wast:93 193 assert_return(() => invoke($3, `check-memory-zero`, [262144n, 327679n]), [value("i32", 0)]); 194 195 // ./test/core/memory64/memory_grow64.wast:94 196 assert_return(() => invoke($3, `grow`, [1n]), [value("i64", 5n)]); 197 198 // ./test/core/memory64/memory_grow64.wast:95 199 assert_return(() => invoke($3, `check-memory-zero`, [327680n, 393215n]), [value("i32", 0)]);