11cb0ef41Sopenharmony_ci// Flags: --expose-internals 21cb0ef41Sopenharmony_ci'use strict'; 31cb0ef41Sopenharmony_ci 41cb0ef41Sopenharmony_cirequire('../common'); 51cb0ef41Sopenharmony_ciconst assert = require('assert'); 61cb0ef41Sopenharmony_ciconst { convertToInt, evenRound } = require('internal/webidl'); 71cb0ef41Sopenharmony_ci 81cb0ef41Sopenharmony_ciassert.strictEqual(evenRound(-0.5), 0); 91cb0ef41Sopenharmony_ciassert.strictEqual(evenRound(0.5), 0); 101cb0ef41Sopenharmony_ciassert.strictEqual(evenRound(-1.5), -2); 111cb0ef41Sopenharmony_ciassert.strictEqual(evenRound(1.5), 2); 121cb0ef41Sopenharmony_ciassert.strictEqual(evenRound(3.4), 3); 131cb0ef41Sopenharmony_ciassert.strictEqual(evenRound(4.6), 5); 141cb0ef41Sopenharmony_ciassert.strictEqual(evenRound(5), 5); 151cb0ef41Sopenharmony_ciassert.strictEqual(evenRound(6), 6); 161cb0ef41Sopenharmony_ci 171cb0ef41Sopenharmony_ci// https://webidl.spec.whatwg.org/#abstract-opdef-converttoint 181cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', 0, 64), 0); 191cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', 1, 64), 1); 201cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', -0.5, 64), 0); 211cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', -0.5, 64, { signed: true }), 0); 221cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', -1.5, 64, { signed: true }), -1); 231cb0ef41Sopenharmony_ci 241cb0ef41Sopenharmony_ci// EnforceRange 251cb0ef41Sopenharmony_ciconst OutOfRangeValues = [ NaN, Infinity, -Infinity, 2 ** 53, -(2 ** 53) ]; 261cb0ef41Sopenharmony_cifor (const value of OutOfRangeValues) { 271cb0ef41Sopenharmony_ci assert.throws(() => convertToInt('x', value, 64, { enforceRange: true }), { 281cb0ef41Sopenharmony_ci name: 'TypeError', 291cb0ef41Sopenharmony_ci code: 'ERR_INVALID_ARG_VALUE', 301cb0ef41Sopenharmony_ci }); 311cb0ef41Sopenharmony_ci} 321cb0ef41Sopenharmony_ci 331cb0ef41Sopenharmony_ci// Out of range: clamp 341cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', NaN, 64, { clamp: true }), 0); 351cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', Infinity, 64, { clamp: true }), Number.MAX_SAFE_INTEGER); 361cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', -Infinity, 64, { clamp: true }), 0); 371cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', -Infinity, 64, { signed: true, clamp: true }), Number.MIN_SAFE_INTEGER); 381cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', 0x1_0000_0000, 32, { clamp: true }), 0xFFFF_FFFF); 391cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', 0xFFFF_FFFF, 32, { clamp: true }), 0xFFFF_FFFF); 401cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', 0x8000_0000, 32, { clamp: true, signed: true }), 0x7FFF_FFFF); 411cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', 0xFFFF_FFFF, 32, { clamp: true, signed: true }), 0x7FFF_FFFF); 421cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', 0.5, 64, { clamp: true }), 0); 431cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', 1.5, 64, { clamp: true }), 2); 441cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', -0.5, 64, { clamp: true }), 0); 451cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', -0.5, 64, { signed: true, clamp: true }), 0); 461cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', -1.5, 64, { signed: true, clamp: true }), -2); 471cb0ef41Sopenharmony_ci 481cb0ef41Sopenharmony_ci// Out of range, step 8. 491cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', NaN, 64), 0); 501cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', Infinity, 64), 0); 511cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', -Infinity, 64), 0); 521cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', 0x1_0000_0000, 32), 0); 531cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', 0x1_0000_0001, 32), 1); 541cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', 0xFFFF_FFFF, 32), 0xFFFF_FFFF); 551cb0ef41Sopenharmony_ci 561cb0ef41Sopenharmony_ci// Out of range, step 11. 571cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', 0x8000_0000, 32, { signed: true }), -0x8000_0000); 581cb0ef41Sopenharmony_ciassert.strictEqual(convertToInt('x', 0xFFF_FFFF, 32, { signed: true }), 0xFFF_FFFF); 59