i31.wast 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. (module
  2. (func (export "new") (param $i i32) (result (ref i31))
  3. (ref.i31 (local.get $i))
  4. )
  5. (func (export "get_u") (param $i i32) (result i32)
  6. (i31.get_u (ref.i31 (local.get $i)))
  7. )
  8. (func (export "get_s") (param $i i32) (result i32)
  9. (i31.get_s (ref.i31 (local.get $i)))
  10. )
  11. (func (export "get_u-null") (result i32)
  12. (i31.get_u (ref.null i31))
  13. )
  14. (func (export "get_s-null") (result i32)
  15. (i31.get_u (ref.null i31))
  16. )
  17. (global $i (ref i31) (ref.i31 (i32.const 2)))
  18. (global $m (mut (ref i31)) (ref.i31 (i32.const 3)))
  19. (func (export "get_globals") (result i32 i32)
  20. (i31.get_u (global.get $i))
  21. (i31.get_u (global.get $m))
  22. )
  23. )
  24. (assert_return (invoke "new" (i32.const 1)) (ref.i31))
  25. (assert_return (invoke "get_u" (i32.const 0)) (i32.const 0))
  26. (assert_return (invoke "get_u" (i32.const 100)) (i32.const 100))
  27. (assert_return (invoke "get_u" (i32.const -1)) (i32.const 0x7fff_ffff))
  28. (assert_return (invoke "get_u" (i32.const 0x3fff_ffff)) (i32.const 0x3fff_ffff))
  29. (assert_return (invoke "get_u" (i32.const 0x4000_0000)) (i32.const 0x4000_0000))
  30. (assert_return (invoke "get_u" (i32.const 0x7fff_ffff)) (i32.const 0x7fff_ffff))
  31. (assert_return (invoke "get_u" (i32.const 0xaaaa_aaaa)) (i32.const 0x2aaa_aaaa))
  32. (assert_return (invoke "get_u" (i32.const 0xcaaa_aaaa)) (i32.const 0x4aaa_aaaa))
  33. (assert_return (invoke "get_s" (i32.const 0)) (i32.const 0))
  34. (assert_return (invoke "get_s" (i32.const 100)) (i32.const 100))
  35. (assert_return (invoke "get_s" (i32.const -1)) (i32.const -1))
  36. (assert_return (invoke "get_s" (i32.const 0x3fff_ffff)) (i32.const 0x3fff_ffff))
  37. (assert_return (invoke "get_s" (i32.const 0x4000_0000)) (i32.const -0x4000_0000))
  38. (assert_return (invoke "get_s" (i32.const 0x7fff_ffff)) (i32.const -1))
  39. (assert_return (invoke "get_s" (i32.const 0xaaaa_aaaa)) (i32.const 0x2aaa_aaaa))
  40. (assert_return (invoke "get_s" (i32.const 0xcaaa_aaaa)) (i32.const 0xcaaa_aaaa))
  41. (assert_trap (invoke "get_u-null") "null i31 reference")
  42. (assert_trap (invoke "get_s-null") "null i31 reference")
  43. (assert_return (invoke "get_globals") (i32.const 2) (i32.const 3))