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