bulk.wast.js (15119B)
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/bulk.wast 17 18 // ./test/core/bulk.wast:2 19 let $0 = instantiate(`(module 20 (memory 1) 21 (data "foo"))`); 22 23 // ./test/core/bulk.wast:6 24 let $1 = instantiate(`(module 25 (table 3 funcref) 26 (elem funcref (ref.func 0) (ref.null func) (ref.func 1)) 27 (func) 28 (func))`); 29 30 // ./test/core/bulk.wast:13 31 let $2 = instantiate(`(module 32 (memory 1) 33 34 (func (export "fill") (param i32 i32 i32) 35 (memory.fill 36 (local.get 0) 37 (local.get 1) 38 (local.get 2))) 39 40 (func (export "load8_u") (param i32) (result i32) 41 (i32.load8_u (local.get 0))) 42 )`); 43 44 // ./test/core/bulk.wast:27 45 invoke($2, `fill`, [1, 255, 3]); 46 47 // ./test/core/bulk.wast:28 48 assert_return(() => invoke($2, `load8_u`, [0]), [value("i32", 0)]); 49 50 // ./test/core/bulk.wast:29 51 assert_return(() => invoke($2, `load8_u`, [1]), [value("i32", 255)]); 52 53 // ./test/core/bulk.wast:30 54 assert_return(() => invoke($2, `load8_u`, [2]), [value("i32", 255)]); 55 56 // ./test/core/bulk.wast:31 57 assert_return(() => invoke($2, `load8_u`, [3]), [value("i32", 255)]); 58 59 // ./test/core/bulk.wast:32 60 assert_return(() => invoke($2, `load8_u`, [4]), [value("i32", 0)]); 61 62 // ./test/core/bulk.wast:35 63 invoke($2, `fill`, [0, 48042, 2]); 64 65 // ./test/core/bulk.wast:36 66 assert_return(() => invoke($2, `load8_u`, [0]), [value("i32", 170)]); 67 68 // ./test/core/bulk.wast:37 69 assert_return(() => invoke($2, `load8_u`, [1]), [value("i32", 170)]); 70 71 // ./test/core/bulk.wast:40 72 invoke($2, `fill`, [0, 0, 65536]); 73 74 // ./test/core/bulk.wast:43 75 assert_trap(() => invoke($2, `fill`, [65280, 1, 257]), `out of bounds memory access`); 76 77 // ./test/core/bulk.wast:45 78 assert_return(() => invoke($2, `load8_u`, [65280]), [value("i32", 0)]); 79 80 // ./test/core/bulk.wast:46 81 assert_return(() => invoke($2, `load8_u`, [65535]), [value("i32", 0)]); 82 83 // ./test/core/bulk.wast:49 84 invoke($2, `fill`, [65536, 0, 0]); 85 86 // ./test/core/bulk.wast:52 87 assert_trap(() => invoke($2, `fill`, [65537, 0, 0]), `out of bounds memory access`); 88 89 // ./test/core/bulk.wast:57 90 let $3 = instantiate(`(module 91 (memory (data "\\aa\\bb\\cc\\dd")) 92 93 (func (export "copy") (param i32 i32 i32) 94 (memory.copy 95 (local.get 0) 96 (local.get 1) 97 (local.get 2))) 98 99 (func (export "load8_u") (param i32) (result i32) 100 (i32.load8_u (local.get 0))) 101 )`); 102 103 // ./test/core/bulk.wast:71 104 invoke($3, `copy`, [10, 0, 4]); 105 106 // ./test/core/bulk.wast:73 107 assert_return(() => invoke($3, `load8_u`, [9]), [value("i32", 0)]); 108 109 // ./test/core/bulk.wast:74 110 assert_return(() => invoke($3, `load8_u`, [10]), [value("i32", 170)]); 111 112 // ./test/core/bulk.wast:75 113 assert_return(() => invoke($3, `load8_u`, [11]), [value("i32", 187)]); 114 115 // ./test/core/bulk.wast:76 116 assert_return(() => invoke($3, `load8_u`, [12]), [value("i32", 204)]); 117 118 // ./test/core/bulk.wast:77 119 assert_return(() => invoke($3, `load8_u`, [13]), [value("i32", 221)]); 120 121 // ./test/core/bulk.wast:78 122 assert_return(() => invoke($3, `load8_u`, [14]), [value("i32", 0)]); 123 124 // ./test/core/bulk.wast:81 125 invoke($3, `copy`, [8, 10, 4]); 126 127 // ./test/core/bulk.wast:82 128 assert_return(() => invoke($3, `load8_u`, [8]), [value("i32", 170)]); 129 130 // ./test/core/bulk.wast:83 131 assert_return(() => invoke($3, `load8_u`, [9]), [value("i32", 187)]); 132 133 // ./test/core/bulk.wast:84 134 assert_return(() => invoke($3, `load8_u`, [10]), [value("i32", 204)]); 135 136 // ./test/core/bulk.wast:85 137 assert_return(() => invoke($3, `load8_u`, [11]), [value("i32", 221)]); 138 139 // ./test/core/bulk.wast:86 140 assert_return(() => invoke($3, `load8_u`, [12]), [value("i32", 204)]); 141 142 // ./test/core/bulk.wast:87 143 assert_return(() => invoke($3, `load8_u`, [13]), [value("i32", 221)]); 144 145 // ./test/core/bulk.wast:90 146 invoke($3, `copy`, [10, 7, 6]); 147 148 // ./test/core/bulk.wast:91 149 assert_return(() => invoke($3, `load8_u`, [10]), [value("i32", 0)]); 150 151 // ./test/core/bulk.wast:92 152 assert_return(() => invoke($3, `load8_u`, [11]), [value("i32", 170)]); 153 154 // ./test/core/bulk.wast:93 155 assert_return(() => invoke($3, `load8_u`, [12]), [value("i32", 187)]); 156 157 // ./test/core/bulk.wast:94 158 assert_return(() => invoke($3, `load8_u`, [13]), [value("i32", 204)]); 159 160 // ./test/core/bulk.wast:95 161 assert_return(() => invoke($3, `load8_u`, [14]), [value("i32", 221)]); 162 163 // ./test/core/bulk.wast:96 164 assert_return(() => invoke($3, `load8_u`, [15]), [value("i32", 204)]); 165 166 // ./test/core/bulk.wast:97 167 assert_return(() => invoke($3, `load8_u`, [16]), [value("i32", 0)]); 168 169 // ./test/core/bulk.wast:100 170 invoke($3, `copy`, [65280, 0, 256]); 171 172 // ./test/core/bulk.wast:101 173 invoke($3, `copy`, [65024, 65280, 256]); 174 175 // ./test/core/bulk.wast:104 176 invoke($3, `copy`, [65536, 0, 0]); 177 178 // ./test/core/bulk.wast:105 179 invoke($3, `copy`, [0, 65536, 0]); 180 181 // ./test/core/bulk.wast:108 182 assert_trap(() => invoke($3, `copy`, [65537, 0, 0]), `out of bounds memory access`); 183 184 // ./test/core/bulk.wast:110 185 assert_trap(() => invoke($3, `copy`, [0, 65537, 0]), `out of bounds memory access`); 186 187 // ./test/core/bulk.wast:115 188 let $4 = instantiate(`(module 189 (memory 1) 190 (data "\\aa\\bb\\cc\\dd") 191 192 (func (export "init") (param i32 i32 i32) 193 (memory.init 0 194 (local.get 0) 195 (local.get 1) 196 (local.get 2))) 197 198 (func (export "load8_u") (param i32) (result i32) 199 (i32.load8_u (local.get 0))) 200 )`); 201 202 // ./test/core/bulk.wast:129 203 invoke($4, `init`, [0, 1, 2]); 204 205 // ./test/core/bulk.wast:130 206 assert_return(() => invoke($4, `load8_u`, [0]), [value("i32", 187)]); 207 208 // ./test/core/bulk.wast:131 209 assert_return(() => invoke($4, `load8_u`, [1]), [value("i32", 204)]); 210 211 // ./test/core/bulk.wast:132 212 assert_return(() => invoke($4, `load8_u`, [2]), [value("i32", 0)]); 213 214 // ./test/core/bulk.wast:135 215 invoke($4, `init`, [65532, 0, 4]); 216 217 // ./test/core/bulk.wast:138 218 assert_trap(() => invoke($4, `init`, [65534, 0, 3]), `out of bounds memory access`); 219 220 // ./test/core/bulk.wast:140 221 assert_return(() => invoke($4, `load8_u`, [65534]), [value("i32", 204)]); 222 223 // ./test/core/bulk.wast:141 224 assert_return(() => invoke($4, `load8_u`, [65535]), [value("i32", 221)]); 225 226 // ./test/core/bulk.wast:144 227 invoke($4, `init`, [65536, 0, 0]); 228 229 // ./test/core/bulk.wast:145 230 invoke($4, `init`, [0, 4, 0]); 231 232 // ./test/core/bulk.wast:148 233 assert_trap(() => invoke($4, `init`, [65537, 0, 0]), `out of bounds memory access`); 234 235 // ./test/core/bulk.wast:150 236 assert_trap(() => invoke($4, `init`, [0, 5, 0]), `out of bounds memory access`); 237 238 // ./test/core/bulk.wast:154 239 let $5 = instantiate(`(module 240 (memory 1) 241 (data \$p "x") 242 (data \$a (memory 0) (i32.const 0) "x") 243 244 (func (export "drop_passive") (data.drop \$p)) 245 (func (export "init_passive") (param \$len i32) 246 (memory.init \$p (i32.const 0) (i32.const 0) (local.get \$len))) 247 248 (func (export "drop_active") (data.drop \$a)) 249 (func (export "init_active") (param \$len i32) 250 (memory.init \$a (i32.const 0) (i32.const 0) (local.get \$len))) 251 )`); 252 253 // ./test/core/bulk.wast:168 254 invoke($5, `init_passive`, [1]); 255 256 // ./test/core/bulk.wast:169 257 invoke($5, `drop_passive`, []); 258 259 // ./test/core/bulk.wast:170 260 invoke($5, `drop_passive`, []); 261 262 // ./test/core/bulk.wast:171 263 assert_return(() => invoke($5, `init_passive`, [0]), []); 264 265 // ./test/core/bulk.wast:172 266 assert_trap(() => invoke($5, `init_passive`, [1]), `out of bounds memory access`); 267 268 // ./test/core/bulk.wast:173 269 invoke($5, `init_passive`, [0]); 270 271 // ./test/core/bulk.wast:174 272 invoke($5, `drop_active`, []); 273 274 // ./test/core/bulk.wast:175 275 assert_return(() => invoke($5, `init_active`, [0]), []); 276 277 // ./test/core/bulk.wast:176 278 assert_trap(() => invoke($5, `init_active`, [1]), `out of bounds memory access`); 279 280 // ./test/core/bulk.wast:177 281 invoke($5, `init_active`, [0]); 282 283 // ./test/core/bulk.wast:181 284 let $6 = instantiate(`(module 285 ;; 65 data segments. 64 is the smallest positive number that is encoded 286 ;; differently as a signed LEB. 287 (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") 288 (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") 289 (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") 290 (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") 291 (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") 292 (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") 293 (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") 294 (data "") (data "") (data "") (data "") (data "") (data "") (data "") (data "") 295 (data "") 296 (func (data.drop 64)))`); 297 298 // ./test/core/bulk.wast:196 299 let $7 = instantiate(`(module (data "goodbye") (func (data.drop 0)))`); 300 301 // ./test/core/bulk.wast:199 302 let $8 = instantiate(`(module 303 (table 3 funcref) 304 (elem funcref 305 (ref.func \$zero) (ref.func \$one) (ref.func \$zero) (ref.func \$one)) 306 307 (func \$zero (result i32) (i32.const 0)) 308 (func \$one (result i32) (i32.const 1)) 309 310 (func (export "init") (param i32 i32 i32) 311 (table.init 0 312 (local.get 0) 313 (local.get 1) 314 (local.get 2))) 315 316 (func (export "call") (param i32) (result i32) 317 (call_indirect (result i32) 318 (local.get 0))) 319 )`); 320 321 // ./test/core/bulk.wast:219 322 assert_trap(() => invoke($8, `init`, [2, 0, 2]), `out of bounds table access`); 323 324 // ./test/core/bulk.wast:221 325 assert_trap(() => invoke($8, `call`, [2]), `uninitialized element 2`); 326 327 // ./test/core/bulk.wast:224 328 invoke($8, `init`, [0, 1, 2]); 329 330 // ./test/core/bulk.wast:225 331 assert_return(() => invoke($8, `call`, [0]), [value("i32", 1)]); 332 333 // ./test/core/bulk.wast:226 334 assert_return(() => invoke($8, `call`, [1]), [value("i32", 0)]); 335 336 // ./test/core/bulk.wast:227 337 assert_trap(() => invoke($8, `call`, [2]), `uninitialized element`); 338 339 // ./test/core/bulk.wast:230 340 invoke($8, `init`, [1, 2, 2]); 341 342 // ./test/core/bulk.wast:233 343 invoke($8, `init`, [3, 0, 0]); 344 345 // ./test/core/bulk.wast:234 346 invoke($8, `init`, [0, 4, 0]); 347 348 // ./test/core/bulk.wast:237 349 assert_trap(() => invoke($8, `init`, [4, 0, 0]), `out of bounds table access`); 350 351 // ./test/core/bulk.wast:239 352 assert_trap(() => invoke($8, `init`, [0, 5, 0]), `out of bounds table access`); 353 354 // ./test/core/bulk.wast:244 355 let $9 = instantiate(`(module 356 (table 1 funcref) 357 (func \$f) 358 (elem \$p funcref (ref.func \$f)) 359 (elem \$a (table 0) (i32.const 0) func \$f) 360 361 (func (export "drop_passive") (elem.drop \$p)) 362 (func (export "init_passive") (param \$len i32) 363 (table.init \$p (i32.const 0) (i32.const 0) (local.get \$len)) 364 ) 365 366 (func (export "drop_active") (elem.drop \$a)) 367 (func (export "init_active") (param \$len i32) 368 (table.init \$a (i32.const 0) (i32.const 0) (local.get \$len)) 369 ) 370 )`); 371 372 // ./test/core/bulk.wast:261 373 invoke($9, `init_passive`, [1]); 374 375 // ./test/core/bulk.wast:262 376 invoke($9, `drop_passive`, []); 377 378 // ./test/core/bulk.wast:263 379 invoke($9, `drop_passive`, []); 380 381 // ./test/core/bulk.wast:264 382 assert_return(() => invoke($9, `init_passive`, [0]), []); 383 384 // ./test/core/bulk.wast:265 385 assert_trap(() => invoke($9, `init_passive`, [1]), `out of bounds table access`); 386 387 // ./test/core/bulk.wast:266 388 invoke($9, `init_passive`, [0]); 389 390 // ./test/core/bulk.wast:267 391 invoke($9, `drop_active`, []); 392 393 // ./test/core/bulk.wast:268 394 assert_return(() => invoke($9, `init_active`, [0]), []); 395 396 // ./test/core/bulk.wast:269 397 assert_trap(() => invoke($9, `init_active`, [1]), `out of bounds table access`); 398 399 // ./test/core/bulk.wast:270 400 invoke($9, `init_active`, [0]); 401 402 // ./test/core/bulk.wast:274 403 let $10 = instantiate(`(module 404 ;; 65 elem segments. 64 is the smallest positive number that is encoded 405 ;; differently as a signed LEB. 406 (elem funcref) (elem funcref) (elem funcref) (elem funcref) 407 (elem funcref) (elem funcref) (elem funcref) (elem funcref) 408 (elem funcref) (elem funcref) (elem funcref) (elem funcref) 409 (elem funcref) (elem funcref) (elem funcref) (elem funcref) 410 (elem funcref) (elem funcref) (elem funcref) (elem funcref) 411 (elem funcref) (elem funcref) (elem funcref) (elem funcref) 412 (elem funcref) (elem funcref) (elem funcref) (elem funcref) 413 (elem funcref) (elem funcref) (elem funcref) (elem funcref) 414 (elem funcref) (elem funcref) (elem funcref) (elem funcref) 415 (elem funcref) (elem funcref) (elem funcref) (elem funcref) 416 (elem funcref) (elem funcref) (elem funcref) (elem funcref) 417 (elem funcref) (elem funcref) (elem funcref) (elem funcref) 418 (elem funcref) (elem funcref) (elem funcref) (elem funcref) 419 (elem funcref) (elem funcref) (elem funcref) (elem funcref) 420 (elem funcref) (elem funcref) (elem funcref) (elem funcref) 421 (elem funcref) (elem funcref) (elem funcref) (elem funcref) 422 (elem funcref) 423 (func (elem.drop 64)))`); 424 425 // ./test/core/bulk.wast:297 426 let $11 = instantiate(`(module (elem funcref (ref.func 0)) (func (elem.drop 0)))`); 427 428 // ./test/core/bulk.wast:300 429 let $12 = instantiate(`(module 430 (table 10 funcref) 431 (elem (i32.const 0) \$zero \$one \$two) 432 (func \$zero (result i32) (i32.const 0)) 433 (func \$one (result i32) (i32.const 1)) 434 (func \$two (result i32) (i32.const 2)) 435 436 (func (export "copy") (param i32 i32 i32) 437 (table.copy 438 (local.get 0) 439 (local.get 1) 440 (local.get 2))) 441 442 (func (export "call") (param i32) (result i32) 443 (call_indirect (result i32) 444 (local.get 0))) 445 )`); 446 447 // ./test/core/bulk.wast:319 448 invoke($12, `copy`, [3, 0, 3]); 449 450 // ./test/core/bulk.wast:321 451 assert_return(() => invoke($12, `call`, [3]), [value("i32", 0)]); 452 453 // ./test/core/bulk.wast:322 454 assert_return(() => invoke($12, `call`, [4]), [value("i32", 1)]); 455 456 // ./test/core/bulk.wast:323 457 assert_return(() => invoke($12, `call`, [5]), [value("i32", 2)]); 458 459 // ./test/core/bulk.wast:326 460 invoke($12, `copy`, [0, 1, 3]); 461 462 // ./test/core/bulk.wast:328 463 assert_return(() => invoke($12, `call`, [0]), [value("i32", 1)]); 464 465 // ./test/core/bulk.wast:329 466 assert_return(() => invoke($12, `call`, [1]), [value("i32", 2)]); 467 468 // ./test/core/bulk.wast:330 469 assert_return(() => invoke($12, `call`, [2]), [value("i32", 0)]); 470 471 // ./test/core/bulk.wast:333 472 invoke($12, `copy`, [2, 0, 3]); 473 474 // ./test/core/bulk.wast:335 475 assert_return(() => invoke($12, `call`, [2]), [value("i32", 1)]); 476 477 // ./test/core/bulk.wast:336 478 assert_return(() => invoke($12, `call`, [3]), [value("i32", 2)]); 479 480 // ./test/core/bulk.wast:337 481 assert_return(() => invoke($12, `call`, [4]), [value("i32", 0)]); 482 483 // ./test/core/bulk.wast:340 484 invoke($12, `copy`, [6, 8, 2]); 485 486 // ./test/core/bulk.wast:341 487 invoke($12, `copy`, [8, 6, 2]); 488 489 // ./test/core/bulk.wast:344 490 invoke($12, `copy`, [10, 0, 0]); 491 492 // ./test/core/bulk.wast:345 493 invoke($12, `copy`, [0, 10, 0]); 494 495 // ./test/core/bulk.wast:348 496 assert_trap(() => invoke($12, `copy`, [11, 0, 0]), `out of bounds table access`); 497 498 // ./test/core/bulk.wast:350 499 assert_trap(() => invoke($12, `copy`, [0, 11, 0]), `out of bounds table access`);