...

Text file src/github.com/tetratelabs/wazero/internal/integration_test/spectest/v2/testdata/memory.wast

Documentation: github.com/tetratelabs/wazero/internal/integration_test/spectest/v2/testdata

     1;; Test memory section structure
     2
     3(module (memory 0))
     4(module (memory 1))
     5(module (memory 0 0))
     6(module (memory 0 1))
     7(module (memory 1 256))
     8(module (memory 0 65536))
     9
    10(assert_invalid (module (memory 0) (memory 0)) "multiple memories")
    11(assert_invalid (module (memory (import "spectest" "memory") 0) (memory 0)) "multiple memories")
    12
    13(module (memory (data)) (func (export "memsize") (result i32) (memory.size)))
    14(assert_return (invoke "memsize") (i32.const 0))
    15(module (memory (data "")) (func (export "memsize") (result i32) (memory.size)))
    16(assert_return (invoke "memsize") (i32.const 0))
    17(module (memory (data "x")) (func (export "memsize") (result i32) (memory.size)))
    18(assert_return (invoke "memsize") (i32.const 1))
    19
    20(assert_invalid (module (data (i32.const 0))) "unknown memory")
    21(assert_invalid (module (data (i32.const 0) "")) "unknown memory")
    22(assert_invalid (module (data (i32.const 0) "x")) "unknown memory")
    23
    24(assert_invalid
    25  (module (func (drop (f32.load (i32.const 0)))))
    26  "unknown memory"
    27)
    28(assert_invalid
    29  (module (func (f32.store (i32.const 0) (f32.const 0))))
    30  "unknown memory"
    31)
    32(assert_invalid
    33  (module (func (drop (i32.load8_s (i32.const 0)))))
    34  "unknown memory"
    35)
    36(assert_invalid
    37  (module (func (i32.store8 (i32.const 0) (i32.const 0))))
    38  "unknown memory"
    39)
    40(assert_invalid
    41  (module (func (drop (memory.size))))
    42  "unknown memory"
    43)
    44(assert_invalid
    45  (module (func (drop (memory.grow (i32.const 0)))))
    46  "unknown memory"
    47)
    48
    49
    50(assert_invalid
    51  (module (memory 1 0))
    52  "size minimum must not be greater than maximum"
    53)
    54(assert_invalid
    55  (module (memory 65537))
    56  "memory size must be at most 65536 pages (4GiB)"
    57)
    58(assert_invalid
    59  (module (memory 2147483648))
    60  "memory size must be at most 65536 pages (4GiB)"
    61)
    62(assert_invalid
    63  (module (memory 4294967295))
    64  "memory size must be at most 65536 pages (4GiB)"
    65)
    66(assert_invalid
    67  (module (memory 0 65537))
    68  "memory size must be at most 65536 pages (4GiB)"
    69)
    70(assert_invalid
    71  (module (memory 0 2147483648))
    72  "memory size must be at most 65536 pages (4GiB)"
    73)
    74(assert_invalid
    75  (module (memory 0 4294967295))
    76  "memory size must be at most 65536 pages (4GiB)"
    77)
    78
    79(assert_malformed
    80  (module quote "(memory 0x1_0000_0000)")
    81  "i32 constant out of range"
    82)
    83(assert_malformed
    84  (module quote "(memory 0x1_0000_0000 0x1_0000_0000)")
    85  "i32 constant out of range"
    86)
    87(assert_malformed
    88  (module quote "(memory 0 0x1_0000_0000)")
    89  "i32 constant out of range"
    90)
    91
    92(module
    93  (memory 1)
    94  (data (i32.const 0) "ABC\a7D") (data (i32.const 20) "WASM")
    95
    96  ;; Data section
    97  (func (export "data") (result i32)
    98    (i32.and
    99      (i32.and
   100        (i32.and
   101          (i32.eq (i32.load8_u (i32.const 0)) (i32.const 65))
   102          (i32.eq (i32.load8_u (i32.const 3)) (i32.const 167))
   103        )
   104        (i32.and
   105          (i32.eq (i32.load8_u (i32.const 6)) (i32.const 0))
   106          (i32.eq (i32.load8_u (i32.const 19)) (i32.const 0))
   107        )
   108      )
   109      (i32.and
   110        (i32.and
   111          (i32.eq (i32.load8_u (i32.const 20)) (i32.const 87))
   112          (i32.eq (i32.load8_u (i32.const 23)) (i32.const 77))
   113        )
   114        (i32.and
   115          (i32.eq (i32.load8_u (i32.const 24)) (i32.const 0))
   116          (i32.eq (i32.load8_u (i32.const 1023)) (i32.const 0))
   117        )
   118      )
   119    )
   120  )
   121
   122  ;; Memory cast
   123  (func (export "cast") (result f64)
   124    (i64.store (i32.const 8) (i64.const -12345))
   125    (if
   126      (f64.eq
   127        (f64.load (i32.const 8))
   128        (f64.reinterpret_i64 (i64.const -12345))
   129      )
   130      (then (return (f64.const 0)))
   131    )
   132    (i64.store align=1 (i32.const 9) (i64.const 0))
   133    (i32.store16 align=1 (i32.const 15) (i32.const 16453))
   134    (f64.load align=1 (i32.const 9))
   135  )
   136
   137  ;; Sign and zero extending memory loads
   138  (func (export "i32_load8_s") (param $i i32) (result i32)
   139	(i32.store8 (i32.const 8) (local.get $i))
   140	(i32.load8_s (i32.const 8))
   141  )
   142  (func (export "i32_load8_u") (param $i i32) (result i32)
   143	(i32.store8 (i32.const 8) (local.get $i))
   144	(i32.load8_u (i32.const 8))
   145  )
   146  (func (export "i32_load16_s") (param $i i32) (result i32)
   147	(i32.store16 (i32.const 8) (local.get $i))
   148	(i32.load16_s (i32.const 8))
   149  )
   150  (func (export "i32_load16_u") (param $i i32) (result i32)
   151	(i32.store16 (i32.const 8) (local.get $i))
   152	(i32.load16_u (i32.const 8))
   153  )
   154  (func (export "i64_load8_s") (param $i i64) (result i64)
   155	(i64.store8 (i32.const 8) (local.get $i))
   156	(i64.load8_s (i32.const 8))
   157  )
   158  (func (export "i64_load8_u") (param $i i64) (result i64)
   159	(i64.store8 (i32.const 8) (local.get $i))
   160	(i64.load8_u (i32.const 8))
   161  )
   162  (func (export "i64_load16_s") (param $i i64) (result i64)
   163	(i64.store16 (i32.const 8) (local.get $i))
   164	(i64.load16_s (i32.const 8))
   165  )
   166  (func (export "i64_load16_u") (param $i i64) (result i64)
   167	(i64.store16 (i32.const 8) (local.get $i))
   168	(i64.load16_u (i32.const 8))
   169  )
   170  (func (export "i64_load32_s") (param $i i64) (result i64)
   171	(i64.store32 (i32.const 8) (local.get $i))
   172	(i64.load32_s (i32.const 8))
   173  )
   174  (func (export "i64_load32_u") (param $i i64) (result i64)
   175	(i64.store32 (i32.const 8) (local.get $i))
   176	(i64.load32_u (i32.const 8))
   177  )
   178)
   179
   180(assert_return (invoke "data") (i32.const 1))
   181(assert_return (invoke "cast") (f64.const 42.0))
   182
   183(assert_return (invoke "i32_load8_s" (i32.const -1)) (i32.const -1))
   184(assert_return (invoke "i32_load8_u" (i32.const -1)) (i32.const 255))
   185(assert_return (invoke "i32_load16_s" (i32.const -1)) (i32.const -1))
   186(assert_return (invoke "i32_load16_u" (i32.const -1)) (i32.const 65535))
   187
   188(assert_return (invoke "i32_load8_s" (i32.const 100)) (i32.const 100))
   189(assert_return (invoke "i32_load8_u" (i32.const 200)) (i32.const 200))
   190(assert_return (invoke "i32_load16_s" (i32.const 20000)) (i32.const 20000))
   191(assert_return (invoke "i32_load16_u" (i32.const 40000)) (i32.const 40000))
   192
   193(assert_return (invoke "i32_load8_s" (i32.const 0xfedc6543)) (i32.const 0x43))
   194(assert_return (invoke "i32_load8_s" (i32.const 0x3456cdef)) (i32.const 0xffffffef))
   195(assert_return (invoke "i32_load8_u" (i32.const 0xfedc6543)) (i32.const 0x43))
   196(assert_return (invoke "i32_load8_u" (i32.const 0x3456cdef)) (i32.const 0xef))
   197(assert_return (invoke "i32_load16_s" (i32.const 0xfedc6543)) (i32.const 0x6543))
   198(assert_return (invoke "i32_load16_s" (i32.const 0x3456cdef)) (i32.const 0xffffcdef))
   199(assert_return (invoke "i32_load16_u" (i32.const 0xfedc6543)) (i32.const 0x6543))
   200(assert_return (invoke "i32_load16_u" (i32.const 0x3456cdef)) (i32.const 0xcdef))
   201
   202(assert_return (invoke "i64_load8_s" (i64.const -1)) (i64.const -1))
   203(assert_return (invoke "i64_load8_u" (i64.const -1)) (i64.const 255))
   204(assert_return (invoke "i64_load16_s" (i64.const -1)) (i64.const -1))
   205(assert_return (invoke "i64_load16_u" (i64.const -1)) (i64.const 65535))
   206(assert_return (invoke "i64_load32_s" (i64.const -1)) (i64.const -1))
   207(assert_return (invoke "i64_load32_u" (i64.const -1)) (i64.const 4294967295))
   208
   209(assert_return (invoke "i64_load8_s" (i64.const 100)) (i64.const 100))
   210(assert_return (invoke "i64_load8_u" (i64.const 200)) (i64.const 200))
   211(assert_return (invoke "i64_load16_s" (i64.const 20000)) (i64.const 20000))
   212(assert_return (invoke "i64_load16_u" (i64.const 40000)) (i64.const 40000))
   213(assert_return (invoke "i64_load32_s" (i64.const 20000)) (i64.const 20000))
   214(assert_return (invoke "i64_load32_u" (i64.const 40000)) (i64.const 40000))
   215
   216(assert_return (invoke "i64_load8_s" (i64.const 0xfedcba9856346543)) (i64.const 0x43))
   217(assert_return (invoke "i64_load8_s" (i64.const 0x3456436598bacdef)) (i64.const 0xffffffffffffffef))
   218(assert_return (invoke "i64_load8_u" (i64.const 0xfedcba9856346543)) (i64.const 0x43))
   219(assert_return (invoke "i64_load8_u" (i64.const 0x3456436598bacdef)) (i64.const 0xef))
   220(assert_return (invoke "i64_load16_s" (i64.const 0xfedcba9856346543)) (i64.const 0x6543))
   221(assert_return (invoke "i64_load16_s" (i64.const 0x3456436598bacdef)) (i64.const 0xffffffffffffcdef))
   222(assert_return (invoke "i64_load16_u" (i64.const 0xfedcba9856346543)) (i64.const 0x6543))
   223(assert_return (invoke "i64_load16_u" (i64.const 0x3456436598bacdef)) (i64.const 0xcdef))
   224(assert_return (invoke "i64_load32_s" (i64.const 0xfedcba9856346543)) (i64.const 0x56346543))
   225(assert_return (invoke "i64_load32_s" (i64.const 0x3456436598bacdef)) (i64.const 0xffffffff98bacdef))
   226(assert_return (invoke "i64_load32_u" (i64.const 0xfedcba9856346543)) (i64.const 0x56346543))
   227(assert_return (invoke "i64_load32_u" (i64.const 0x3456436598bacdef)) (i64.const 0x98bacdef))
   228
   229;; Duplicate identifier errors
   230
   231(assert_malformed (module quote
   232  "(memory $foo 1)"
   233  "(memory $foo 1)")
   234  "duplicate memory")
   235(assert_malformed (module quote
   236  "(import \"\" \"\" (memory $foo 1))"
   237  "(memory $foo 1)")
   238  "duplicate memory")
   239(assert_malformed (module quote
   240  "(import \"\" \"\" (memory $foo 1))"
   241  "(import \"\" \"\" (memory $foo 1))")
   242  "duplicate memory")

View as plain text