| // Copyright 2024 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Flags: --turbofan --no-always-turbofan --js-float16array |
| |
| load("./resources/v8-mjsunit.js", "caller relative"); |
| |
| function storeAndLoad (x) { |
| var a = new Float16Array(1) |
| a[0] = x |
| return a[0] |
| } |
| function assertAlmostEquals (expected, actual, epsilon = 1e-4) { |
| assertTrue( |
| Math.abs(expected - actual) < epsilon, |
| `value difference bigger than ${epsilon} got ${actual} expected ${expected}` |
| ) |
| } |
| |
| assertAlmostEquals(0, storeAndLoad(0)) |
| |
| assertAlmostEquals(0.1, storeAndLoad(0.1)) |
| assertAlmostEquals(0.01, storeAndLoad(0.01)) |
| assertAlmostEquals(0.001, storeAndLoad(0.001)) |
| assertAlmostEquals(0.0001, storeAndLoad(0.0001)) |
| assertAlmostEquals(0.00001, storeAndLoad(0.00001)) |
| |
| assertAlmostEquals(12, storeAndLoad(12)) |
| assertAlmostEquals(32, storeAndLoad(32)) |
| assertAlmostEquals(123, storeAndLoad(123)) |
| |
| assertAlmostEquals(12.12, storeAndLoad(12.12), 0.01) |
| assertAlmostEquals(32.333, storeAndLoad(32.333), 0.015) |
| assertAlmostEquals(123.11, storeAndLoad(123.11), 0.0151) |
| |
| assertEquals(NaN, storeAndLoad(NaN)) |
| assertEquals(Infinity, storeAndLoad(Infinity)) |
| assertEquals(-Infinity, storeAndLoad(-Infinity)) |
| |
| const source = new Float16Array([0.1, 0.2, 0.3]) |
| const copied = new Float32Array(source) |
| |
| for (let i = 0; i < source.length; i++) { |
| assertAlmostEquals(source[i], copied[i]) |
| } |