| import { instantiate } from "../wabt-wrapper.js"; |
| import * as assert from "../assert.js"; |
| |
| async function test() { |
| const instance = await instantiate(` |
| (module |
| (func (export "truncS") (param f64) (result i32) (local $l0 f64) |
| (i32.trunc_f64_s (local.get 0)) |
| ) |
| (func (export "truncU") (param f64) (result i32) (local $l0 f64) |
| (i32.trunc_f64_u (local.get 0)) |
| ) |
| ) |
| `) |
| const {truncS, truncU} = instance.exports; |
| |
| assert.eq(truncS(-2147483648.1), -2147483648); |
| assert.eq(truncS(-2147483648.9), -2147483648); |
| assert.eq(truncS(2147483647.9), 2147483647); |
| assert.throws(() => truncS(-2147483649), WebAssembly.RuntimeError, `Out of bounds Trunc operation (evaluating 'func(...args)')`); |
| assert.throws(() => truncS(2147483648), WebAssembly.RuntimeError, `Out of bounds Trunc operation (evaluating 'func(...args)')`); |
| assert.throws(() => truncS(NaN), WebAssembly.RuntimeError, `Out of bounds Trunc operation (evaluating 'func(...args)')`); |
| |
| assert.eq(truncU(-0.9), 0); |
| assert.eq(truncU(4294967295.9), -1); |
| assert.throws(() => truncU(-1), WebAssembly.RuntimeError, `Out of bounds Trunc operation (evaluating 'func(...args)')`); |
| assert.throws(() => truncU(4294967296), WebAssembly.RuntimeError, `Out of bounds Trunc operation (evaluating 'func(...args)')`); |
| assert.throws(() => truncU(NaN), WebAssembly.RuntimeError, `Out of bounds Trunc operation (evaluating 'func(...args)')`); |
| } |
| |
| assert.asyncTest(test()); |