How to use rescaledSignificand method in fast-check-monorepo

Best JavaScript code snippet using fast-check-monorepo

DoubleHelpers.spec.ts

Source:DoubleHelpers.spec.ts Github

copy

Full Screen

1import * as fc from 'fast-check';2import { float64raw, isStrictlySmaller } from '../../__test-helpers__/FloatingPointHelpers';3import {4 decomposeDouble,5 doubleToIndex,6 indexToDouble,7} from '../../../../../src/arbitrary/_internals/helpers/DoubleHelpers';8type Index = ReturnType<typeof doubleToIndex>;9const toIndex = (raw: bigint | string): Index => {10 const b = typeof raw === 'string' ? BigInt(raw) : raw;11 const pb = b < BigInt(0) ? -b : b;12 return { sign: b < BigInt(0) ? -1 : 1, data: [Number(pb >> BigInt(32)), Number(pb & BigInt(0xffffffff))] };13};14const toBigInt = (index: Index): bigint => {15 return BigInt(index.sign) * ((BigInt(index.data[0]) << BigInt(32)) + BigInt(index.data[1]));16};17describe('decomposeDouble', () => {18 it('should properly decompose basic values', () => {19 expect(decomposeDouble(0)).toEqual({ exponent: -1022, significand: 0 });20 expect(decomposeDouble(1)).toEqual({ exponent: 0, significand: 1 });21 expect(decomposeDouble(128)).toEqual({ exponent: 7, significand: 1 });22 expect(decomposeDouble(201)).toEqual({ exponent: 7, significand: 1.5703125 });23 });24 it('should properly decompose negative values', () => {25 expect(decomposeDouble(-0)).toEqual({ exponent: -1022, significand: -0 });26 expect(decomposeDouble(-1)).toEqual({ exponent: 0, significand: -1 });27 });28 it('should properly decompose extreme values', () => {29 expect(decomposeDouble(Number.MAX_VALUE)).toEqual({ exponent: 1023, significand: 2 - Number.EPSILON });30 expect(decomposeDouble(Number.MIN_VALUE)).toEqual({ exponent: -1022, significand: Number.EPSILON });31 expect(decomposeDouble(Number.EPSILON)).toEqual({ exponent: -52, significand: 1 });32 expect(decomposeDouble(1 + Number.EPSILON)).toEqual({ exponent: 0, significand: 1 + Number.EPSILON });33 });34 it('should decompose a 64-bit float into its equivalent (significand, exponent)', () => {35 fc.assert(36 fc.property(float64raw(), (f64) => {37 // Arrange38 fc.pre(!Number.isNaN(f64));39 // Act40 const { exponent, significand } = decomposeDouble(f64);41 // Assert42 expect(significand * 2 ** exponent).toBe(f64);43 })44 );45 });46});47describe('doubleToIndex', () => {48 it('should always produce well-formed indexes', () => {49 fc.assert(50 fc.property(float64raw(), (d) => {51 // Arrange52 fc.pre(!Number.isNaN(d));53 // Act54 const index = doubleToIndex(d);55 // Assert56 expect(index.data[0]).toBeGreaterThanOrEqual(0);57 expect(index.data[0]).toBeLessThanOrEqual(0xffffffff);58 expect(Number.isInteger(index.data[0])).toBe(true);59 expect(index.data[1]).toBeGreaterThanOrEqual(0);60 expect(index.data[1]).toBeLessThanOrEqual(0xffffffff);61 expect(Number.isInteger(index.data[1])).toBe(true);62 })63 );64 });65 if (typeof BigInt === 'undefined') {66 it('no test', () => {67 expect(true).toBe(true);68 });69 return;70 } // Following tests require BigInt to be launched71 it('should properly compute indexes', () => {72 expect(doubleToIndex(0)).toEqual(toIndex('0'));73 expect(doubleToIndex(Number.MIN_VALUE)).toEqual(toIndex('1'));74 expect(doubleToIndex(2 * Number.MIN_VALUE)).toEqual(toIndex('2'));75 expect(doubleToIndex(3 * Number.MIN_VALUE)).toEqual(toIndex('3'));76 // Last double with minimal exponent, ie -102277 // index(last with min exponent) = 2**53 - 178 expect(doubleToIndex(2 ** -1022 * (2 - Number.EPSILON))).toEqual(toIndex('9007199254740991'));79 // First double without minimal exponent, ie -102280 // index(first without min exponent) = index(last with min exponent) + 181 expect(doubleToIndex(2 ** -1021)).toEqual(toIndex('9007199254740992'));82 // Number.EPSILON === 1. * 2**-52 --> m = 1, e = -5283 // index(Number.EPSILON) = 2**53 + (-52 - (-1022) -1) * 2**5284 expect(doubleToIndex(Number.EPSILON)).toEqual(toIndex('4372995238176751616'));85 // index(1 - Number.EPSILON / 2) = index(1) - 186 expect(doubleToIndex(1 - Number.EPSILON / 2)).toEqual(toIndex('4607182418800017407'));87 // 1 === 1. * 2**0 --> m = 1, e = 088 // index(1) = 2**53 + (0 - (-1022) -1) * 2**5289 expect(doubleToIndex(1)).toEqual(toIndex('4607182418800017408'));90 // index(1 + Number.EPSILON) = index(1) + 191 expect(doubleToIndex(1 + Number.EPSILON)).toEqual(toIndex('4607182418800017409'));92 // index(2 - Number.EPSILON) = index(2) - 1 = index(1 + (2 ** 52 - 1) * Number.EPSILON)93 expect(doubleToIndex(2 - Number.EPSILON)).toEqual(toIndex('4611686018427387903'));94 // 1 === 1. * 2**1 --> m = 1, e = 195 // index(2) = index(1) + 2**5296 expect(doubleToIndex(2)).toEqual(toIndex('4611686018427387904'));97 // Number.MAX_VALUE === (1 + (2**52-1)/2**52) * 2**1023 --> m = 1 + (2**52-1)/2**52, e = 102398 // index(Number.MAX_VALUE) = index(next(Number.MAX_VALUE)) -1 = 2**53 + (1024 - (-1022) -1) * 2**52 -199 expect(doubleToIndex(Number.MAX_VALUE)).toEqual(toIndex('9218868437227405311'));100 });101 it('should properly compute negative indexes', () => {102 expect(doubleToIndex(-0)).toEqual(toIndex('-1'));103 expect(doubleToIndex(-Number.MIN_VALUE)).toEqual(toIndex('-2'));104 expect(doubleToIndex(-Number.MAX_VALUE)).toEqual(toIndex('-9218868437227405312'));105 });106 it('should properly compute indexes for infinity', () => {107 expect(doubleToIndex(Number.NEGATIVE_INFINITY)).toEqual(108 toIndex(toBigInt(doubleToIndex(-Number.MAX_VALUE)) - BigInt(1))109 );110 expect(doubleToIndex(Number.POSITIVE_INFINITY)).toEqual(111 toIndex(toBigInt(doubleToIndex(Number.MAX_VALUE)) + BigInt(1))112 );113 });114 it('should be able to infer index for negative double from the positive one', () => {115 fc.assert(116 fc.property(float64raw(), (d) => {117 // Arrange118 fc.pre(!Number.isNaN(d));119 const posD = d > 0 || 1 / d > 0 ? d : -d;120 // Act121 const bigIntIndexPos = toBigInt(doubleToIndex(posD));122 const bigIntIndexNeg = toBigInt(doubleToIndex(-posD));123 // Assert124 expect(bigIntIndexNeg).toEqual(-bigIntIndexPos - BigInt(1));125 })126 );127 });128 it('should return index +1 for the successor of a given double', () => {129 fc.assert(130 fc.property(131 fc.integer({ min: -1022, max: +1023 }),132 fc.integer({ min: 0, max: 2 ** 53 - 1 }),133 (exponent, rescaledSignificand) => {134 // Arrange135 fc.pre(exponent === -1022 || rescaledSignificand >= 2 ** 52); // valid136 fc.pre(exponent !== 1023 || rescaledSignificand !== 2 ** 53 - 1); // not max137 const current = rescaledSignificand * Number.EPSILON * 2 ** exponent;138 const next = (rescaledSignificand + 1) * Number.EPSILON * 2 ** exponent;139 // Act140 const bigIntIndexCurrent = toBigInt(doubleToIndex(current));141 const bigIntIndexNext = toBigInt(doubleToIndex(next));142 // Assert143 expect(bigIntIndexNext).toEqual(bigIntIndexCurrent + BigInt(1));144 }145 )146 );147 });148 it('should preserve ordering between two doubles', () => {149 fc.assert(150 fc.property(float64raw(), float64raw(), (fa64, fb64) => {151 // Arrange152 fc.pre(!Number.isNaN(fa64) && !Number.isNaN(fb64));153 // Act / Assert154 if (isStrictlySmaller(fa64, fb64)) {155 expect(toBigInt(doubleToIndex(fa64))).toBeLessThan(toBigInt(doubleToIndex(fb64)));156 } else {157 expect(toBigInt(doubleToIndex(fa64))).toBeGreaterThanOrEqual(toBigInt(doubleToIndex(fb64)));158 }159 })160 );161 });162});163describe('indexToDouble', () => {164 it('Should reverse doubleToIndex', () =>165 fc.assert(166 fc.property(float64raw(), (f64) => {167 fc.pre(!Number.isNaN(f64));168 expect(indexToDouble(doubleToIndex(f64))).toBe(f64);169 })170 ));171 if (typeof BigInt === 'undefined') {172 it('no test', () => {173 expect(true).toBe(true);174 });175 return;176 } // Following tests require BigInt to be launched177 it('should properly find doubles corresponding to well-known values', () => {178 expect(indexToDouble(toIndex('-9218868437227405313'))).toBe(Number.NEGATIVE_INFINITY);179 expect(indexToDouble(toIndex('-9218868437227405312'))).toBe(-Number.MAX_VALUE);180 expect(indexToDouble(toIndex('-1'))).toBe(-0);181 expect(indexToDouble(toIndex('0'))).toBe(0);182 expect(indexToDouble(toIndex('4372995238176751616'))).toBe(Number.EPSILON);183 expect(indexToDouble(toIndex('9218868437227405311'))).toBe(Number.MAX_VALUE);184 expect(indexToDouble(toIndex('9218868437227405312'))).toBe(Number.POSITIVE_INFINITY);185 });186 it('should be reversed by doubleToIndex', () => {187 fc.assert(188 fc.property(189 fc.bigInt({ min: BigInt('-9218868437227405313'), max: BigInt('9218868437227405312') }),190 (bigIntIndex) => {191 // The test below checks that indexToDouble(doubleToIndex) is identity192 // It does not confirm that doubleToIndex(indexToDouble)) is identity193 // Arrange194 const index = toIndex(bigIntIndex);195 // Act / Assert196 expect(doubleToIndex(indexToDouble(index))).toEqual(index);197 }198 )199 );200 });...

Full Screen

Full Screen

FloatHelpers.spec.ts

Source:FloatHelpers.spec.ts Github

copy

Full Screen

1import * as fc from 'fast-check';2import {3 float32raw,4 isNotNaN32bits,5 isStrictlySmaller,6 isFiniteNotNaN32bits,7} from '../../__test-helpers__/FloatingPointHelpers';8import {9 decomposeFloat,10 EPSILON_32,11 floatToIndex,12 indexToFloat,13 MAX_VALUE_32,14 MIN_VALUE_32,15} from '../../../../../src/arbitrary/_internals/helpers/FloatHelpers';16describe('decomposeFloat', () => {17 it('should properly decompose basic values', () => {18 expect(decomposeFloat(0)).toEqual({ exponent: -126, significand: 0 });19 expect(decomposeFloat(1)).toEqual({ exponent: 0, significand: 1 });20 expect(decomposeFloat(128)).toEqual({ exponent: 7, significand: 1 });21 expect(decomposeFloat(201)).toEqual({ exponent: 7, significand: 1.5703125 });22 });23 it('should properly decompose negative values', () => {24 expect(decomposeFloat(-0)).toEqual({ exponent: -126, significand: -0 });25 expect(decomposeFloat(-1)).toEqual({ exponent: 0, significand: -1 });26 });27 it('should properly decompose extreme values', () => {28 expect(decomposeFloat(MAX_VALUE_32)).toEqual({ exponent: 127, significand: 1 + (2 ** 23 - 1) / 2 ** 23 });29 expect(decomposeFloat(MIN_VALUE_32)).toEqual({ exponent: -126, significand: 2 ** -23 });30 expect(decomposeFloat(EPSILON_32)).toEqual({ exponent: -23, significand: 1 });31 expect(decomposeFloat(1 + EPSILON_32)).toEqual({ exponent: 0, significand: 1 + 2 ** -23 });32 });33 it('should decompose a 32-bit float into its equivalent (significand, exponent)', () => {34 fc.assert(35 fc.property(float32raw(), (f32) => {36 // Arrange37 fc.pre(isFiniteNotNaN32bits(f32));38 // Act39 const { exponent, significand } = decomposeFloat(f32);40 // Assert41 expect(significand * 2 ** exponent).toBe(f32);42 })43 );44 });45});46describe('floatToIndex', () => {47 it('should properly compute indexes', () => {48 expect(floatToIndex(0)).toBe(0);49 expect(floatToIndex(MIN_VALUE_32)).toBe(1);50 expect(floatToIndex(2 * MIN_VALUE_32)).toBe(2);51 expect(floatToIndex(3 * MIN_VALUE_32)).toBe(3);52 // EPSILON_32 === 1. * 2**-23 --> m = 1, e = -2353 // index(EPSILON_32) = 2**24 + (-23 - (-126) -1) * 2**2354 expect(floatToIndex(EPSILON_32)).toBe(872415232);55 // index(1 - EPSILON_32 / 2) = index(1) - 156 expect(floatToIndex(1 - EPSILON_32 / 2)).toEqual(1065353215);57 // 1 === 1. * 2**0 --> m = 1, e = 058 // index(1) = 2**24 + (0 - (-126) -1) * 2**2359 expect(floatToIndex(1)).toEqual(1065353216);60 // index(1 + EPSILON_32) = index(1) + 161 expect(floatToIndex(1 + EPSILON_32)).toEqual(1065353217);62 // index(2 - EPSILON_32) = index(2) - 1 = index(1 + (2 ** 23 - 1) * EPSILON_32)63 expect(floatToIndex(2 - EPSILON_32)).toEqual(1073741823);64 // 1 === 1. * 2**1 --> m = 1, e = 165 // index(2) = index(1) + 2**2366 expect(floatToIndex(2)).toEqual(1073741824);67 expect(floatToIndex(MAX_VALUE_32)).toBe(2139095039);68 });69 it('should properly compute negative indexes', () => {70 expect(floatToIndex(-0)).toEqual(-1);71 expect(floatToIndex(-MIN_VALUE_32)).toBe(-2);72 expect(floatToIndex(-MAX_VALUE_32)).toBe(-2139095040);73 });74 it('should properly compute indexes for infinity', () => {75 expect(floatToIndex(Number.NEGATIVE_INFINITY)).toBe(floatToIndex(-MAX_VALUE_32) - 1);76 expect(floatToIndex(Number.POSITIVE_INFINITY)).toBe(floatToIndex(MAX_VALUE_32) + 1);77 });78 it('should be able to infer index for negative float from the positive one', () => {79 fc.assert(80 fc.property(float32raw(), (f) => {81 // Arrange82 fc.pre(isNotNaN32bits(f));83 const posD = f > 0 || 1 / f > 0 ? f : -f;84 // Act85 const indexPos = floatToIndex(posD);86 const indexNeg = floatToIndex(-posD);87 // Assert88 expect(indexNeg).toEqual(-indexPos - 1);89 })90 );91 });92 it('should return index +1 for the successor of a given float', () => {93 fc.assert(94 fc.property(95 fc.integer({ min: -126, max: +127 }),96 fc.integer({ min: 0, max: 2 ** 24 - 1 }),97 (exponent, rescaledSignificand) => {98 // Arrange99 fc.pre(exponent === -126 || rescaledSignificand >= 2 ** 23); // valid100 fc.pre(exponent !== 127 || rescaledSignificand !== 2 ** 24 - 1); // not max101 const current = rescaledSignificand * EPSILON_32 * 2 ** exponent;102 const next = (rescaledSignificand + 1) * EPSILON_32 * 2 ** exponent;103 // Act / Assert104 expect(floatToIndex(next)).toEqual(floatToIndex(current) + 1);105 }106 )107 );108 });109 it('should preserve ordering between two floats', () => {110 fc.assert(111 fc.property(float32raw(), float32raw(), (fa32, fb32) => {112 // Arrange113 fc.pre(isNotNaN32bits(fa32) && isNotNaN32bits(fb32));114 // Act / Assert115 if (isStrictlySmaller(fa32, fb32)) expect(floatToIndex(fa32)).toBeLessThan(floatToIndex(fb32));116 else expect(floatToIndex(fa32)).toBeGreaterThanOrEqual(floatToIndex(fb32));117 })118 );119 });120});121describe('indexToFloat', () => {122 it('should properly find floats corresponding to well-known values', () => {123 expect(indexToFloat(-2139095041)).toBe(Number.NEGATIVE_INFINITY);124 expect(indexToFloat(-2139095040)).toBe(-MAX_VALUE_32);125 expect(indexToFloat(-1)).toBe(-0);126 expect(indexToFloat(0)).toBe(0);127 expect(indexToFloat(872415232)).toBe(EPSILON_32);128 expect(indexToFloat(2139095039)).toBe(MAX_VALUE_32);129 expect(indexToFloat(2139095040)).toBe(Number.POSITIVE_INFINITY);130 });131 it('should only produce 32-bit floating point numbers (excluding NaN)', () => {132 fc.assert(133 fc.property(fc.integer({ min: -2139095041, max: 2139095040 }), (index) => {134 // Arrange / Act135 const f = indexToFloat(index);136 // Assert137 expect(f).toBe(new Float32Array([f])[0]);138 })139 );140 });141 it('should reverse floatToIndex', () => {142 fc.assert(143 fc.property(float32raw(), (f32) => {144 // Arrange145 fc.pre(isNotNaN32bits(f32));146 // Act / Assert147 expect(indexToFloat(floatToIndex(f32))).toBe(f32);148 })149 );150 });151 it('should be reversed by floatToIndex', () => {152 fc.assert(153 fc.property(fc.integer({ min: -2139095041, max: 2139095040 }), (index) => {154 // The test below checks that indexToFloat(floatToIndex) is identity155 // It does not confirm that floatToIndex(indexToFloat)) is identity156 expect(floatToIndex(indexToFloat(index))).toBe(index);157 })158 );159 });...

Full Screen

Full Screen

DoubleHelpers.ts

Source:DoubleHelpers.ts Github

copy

Full Screen

1import { ArrayInt64, clone64, isEqual64 } from './ArrayInt64';2const safeNegativeInfinity = Number.NEGATIVE_INFINITY;3const safePositiveInfinity = Number.POSITIVE_INFINITY;4const safeNaN = Number.NaN;5const safeEpsilon = Number.EPSILON;6/** @internal */7const INDEX_POSITIVE_INFINITY: ArrayInt64 = { sign: 1, data: [2146435072, 0] }; // doubleToIndex(Number.MAX_VALUE) + 1;8/** @internal */9const INDEX_NEGATIVE_INFINITY: ArrayInt64 = { sign: -1, data: [2146435072, 1] }; // doubleToIndex(-Number.MAX_VALUE) - 110/**11 * Decompose a 64-bit floating point number into a significand and exponent12 * such that:13 * - significand over 53 bits including sign (also referred as fraction)14 * - exponent over 11 bits including sign15 * - whenever there are multiple possibilities we take the one having the highest significand (in abs)16 * - Number.MAX_VALUE = 2**1023 * (1 + (2**52-1)/2**52)17 * = 2**1023 * (2 - Number.EPSILON)18 * - Number.MIN_VALUE = 2**(-1022) * 2**(-52)19 * - Number.EPSILON = 2**(-52)20 *21 * @param d - 64-bit floating point number to be decomposed into (significand, exponent)22 *23 * @internal24 */25export function decomposeDouble(d: number): { exponent: number; significand: number } {26 // 1 => significand 0b1 - exponent 1 (will be preferred)27 // => significand 0b0.1 - exponent 228 const maxSignificand = 2 - safeEpsilon;29 for (let exponent = -1022; exponent !== 1024; ++exponent) {30 const powExponent = 2 ** exponent;31 const maxForExponent = maxSignificand * powExponent;32 if (Math.abs(d) <= maxForExponent) {33 return { exponent, significand: d / powExponent };34 }35 }36 return { exponent: safeNaN, significand: safeNaN };37}38/** @internal */39function positiveNumberToInt64(n: number): ArrayInt64['data'] {40 return [~~(n / 0x100000000), n >>> 0];41}42/** @internal */43function indexInDoubleFromDecomp(exponent: number, significand: number): ArrayInt64['data'] {44 // WARNING: significand >= 045 // By construct of significand in decomposeDouble,46 // significand is always max-ed.47 // The double close to zero are the only one having a significand <1, they also have an exponent of -1022.48 // They are in range: [2**(-1022) * 2**(-52), 2**(-1022) * (2 - 2 ** 52)]49 // In other words there are 2**53 elements in that range if we include zero.50 // All other ranges (other exponents) have a length of 2**52 elements.51 if (exponent === -1022) {52 // We want the significand to be an integer value (like an index)53 const rescaledSignificand = significand * 2 ** 52; // significand * 2**5254 return positiveNumberToInt64(rescaledSignificand);55 }56 // Offset due to exp = -1022 + Offset of previous exp (excl. -1022) + Offset in current exp57 // 2**53 + (exponent - (-1022) -1) * 2**52 + (significand - 1) * 2**5258 // (exponent + 1023) * 2**52 + (significand - 1) * 2**5259 const rescaledSignificand = (significand - 1) * 2 ** 52; // (significand-1) * 2**5260 const exponentOnlyHigh = (exponent + 1023) * 2 ** 20; // (exponent + 1023) * 2**52 => [high: (exponent + 1023) * 2**20, low: 0]61 const index = positiveNumberToInt64(rescaledSignificand);62 index[0] += exponentOnlyHigh;63 return index;64}65/**66 * Compute the index of d relative to other available 64-bit floating point numbers67 * Rq: Produces negative indexes for negative doubles68 *69 * @param d - 64-bit floating point number, anything except NaN70 *71 * @internal72 */73export function doubleToIndex(d: number): ArrayInt64 {74 if (d === safePositiveInfinity) {75 return clone64(INDEX_POSITIVE_INFINITY);76 }77 if (d === safeNegativeInfinity) {78 return clone64(INDEX_NEGATIVE_INFINITY);79 }80 const decomp = decomposeDouble(d);81 const exponent = decomp.exponent;82 const significand = decomp.significand;83 if (d > 0 || (d === 0 && 1 / d === safePositiveInfinity)) {84 return { sign: 1, data: indexInDoubleFromDecomp(exponent, significand) };85 } else {86 const indexOpposite = indexInDoubleFromDecomp(exponent, -significand);87 if (indexOpposite[1] === 0xffffffff) {88 indexOpposite[0] += 1;89 indexOpposite[1] = 0;90 } else {91 indexOpposite[1] += 1;92 }93 return { sign: -1, data: indexOpposite }; // -indexInDoubleFromDecomp(exponent, -significand) - 194 }95}96/**97 * Compute the 64-bit floating point number corresponding to the provided indexes98 *99 * @param n - index of the double100 *101 * @internal102 */103export function indexToDouble(index: ArrayInt64): number {104 if (index.sign === -1) {105 const indexOpposite: ArrayInt64 = { sign: 1, data: [index.data[0], index.data[1]] };106 if (indexOpposite.data[1] === 0) {107 indexOpposite.data[0] -= 1;108 indexOpposite.data[1] = 0xffffffff;109 } else {110 indexOpposite.data[1] -= 1;111 }112 return -indexToDouble(indexOpposite); // -indexToDouble(-index - 1);113 }114 if (isEqual64(index, INDEX_POSITIVE_INFINITY)) {115 return safePositiveInfinity;116 }117 if (index.data[0] < 0x200000) {118 // if: index < 2 ** 53 <--> index[0] < 2 ** (53-32) = 0x20_0000119 // The first 2**53 elements correspond to values having120 // exponent = -1022 and significand = index * Number.EPSILON121 // double value = index * 2 ** -1022 * Number.EPSILON122 // = index * 2 ** -1022 * 2 ** -52123 // = index * 2 ** -1074124 return (index.data[0] * 0x100000000 + index.data[1]) * 2 ** -1074;125 }126 const postIndexHigh = index.data[0] - 0x200000; // postIndex = index - 2 ** 53127 // exponent = -1021 + Math.floor(postIndex / 2**52)128 // = -1021 + Math.floor(postIndexHigh / 2**(52-32))129 // = -1021 + Math.floor(postIndexHigh / 2**20)130 // = -1021 + (postIndexHigh >> 20)131 const exponent = -1021 + (postIndexHigh >> 20);132 // significand = 1 + (postIndex % 2**52) / 2**52133 // = 1 + ((postIndexHigh * 2**32 + postIndexLow) % 2**52) / 2**52134 // = 1 + ((postIndexHigh % 2**20) * 2**32 + postIndexLow) / 2**52135 // = 1 + ((postIndexHigh & 0xfffff) * 2**32 + postIndexLow) / 2**52136 // = 1 + ((postIndexHigh & 0xfffff) * 2**32 + postIndexLow) * Number.EPSILON137 const significand = 1 + ((postIndexHigh & 0xfffff) * 2 ** 32 + index.data[1]) * safeEpsilon;138 return significand * 2 ** exponent;...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1const { rescaledSignificand } = require('fast-check-monorepo');2const fc = require('fast-check');3const MAX_SIGNIFICAND = 2 ** 53 - 1;4const MAX_EXPONENT = 1023;5const MIN_EXPONENT = -1022;6const MAX_DOUBLE = MAX_SIGNIFICAND * 2 ** MAX_EXPONENT;7const MIN_DOUBLE = 1 / (2 ** (-MIN_EXPONENT));8const MIN_NORMALIZED_DOUBLE = 2 ** MIN_EXPONENT;9const MAX_NORMALIZED_DOUBLE = 2 ** MAX_EXPONENT;10const MAX_NORMALIZED_SIGNIFICAND = 2 ** 52 - 1;11const MIN_NORMALIZED_SIGNIFICAND = 2 ** 52;12const MAX_NORMALIZED_EXPONENT = 1023;13const MIN_NORMALIZED_EXPONENT = 1;14const MIN_NORMALIZED_DOUBLE = 2 ** MIN_NORMALIZED_EXPONENT;15const MAX_NORMALIZED_DOUBLE = 2 ** MAX_NORMALIZED_EXPONENT;16const MAX_NORMALIZED_SIGNIFICAND = 2 ** 52 - 1;17const MIN_NORMALIZED_SIGNIFICAND = 2 ** 52;18const MAX_NORMALIZED_EXPONENT = 1023;19const MIN_NORMALIZED_EXPONENT = 1;20const MIN_SUBNORMALIZED_DOUBLE = 2 ** MIN_EXPONENT;21const MAX_SUBNORMALIZED_DOUBLE = 2 ** MIN_NORMALIZED_EXPONENT;22const MAX_SUBNORMALIZED_SIGNIFICAND = 2 ** 52 - 1;23const MIN_SUBNORMALIZED_SIGNIFICAND = 1;24const MAX_SUBNORMALIZED_EXPONENT = 0;25const MIN_SUBNORMALIZED_EXPONENT = -1022;26const MAX_SUBNORMALIZED_DOUBLE = 2 ** MAX_SUBNORMALIZED_EXPONENT;27const MIN_SUBNORMALIZED_DOUBLE = 1 / (2 ** (-MIN_SUBNORMALIZED_EXPONENT));28const MAX_SUBNORMALIZED_SIGNIFICAND = 2 ** 52 - 1;29const MIN_SUBNORMALIZED_SIGNIFICAND = 1;30const MAX_SUBNORMALIZED_EXPONENT = 0;31const MIN_SUBNORMALIZED_EXPONENT = -1022;32const MIN_SUBNORMALIZED_DOUBLE = 1 / (2 ** (-MIN_SUBNORMALIZED_EXPONENT));33const MAX_SUBNORMALIZED_DOUBLE = 2 ** MAX_SUBNORMALIZED_EXPONENT;

Full Screen

Using AI Code Generation

copy

Full Screen

1const fc = require('fast-check');2const { rescaledSignificand } = require('fast-check-monorepo');3const { rescaledSignificand } = require('fast-check-monorepo');4const myArbitrary = fc.integer().map(rescaledSignificand);5fc.assert(6 fc.property(myArbitrary, (n) => {7 return n >= 0 && n < 1;8 })9);10const fc = require('fast-check');11const { rescaledSignificand } = require('fast-check-monorepo');12const myArbitrary = fc.integer().map(rescaledSignificand);13fc.assert(14 fc.property(myArbitrary, (n) => {15 return n >= 0 && n < 1;16 })17);18const fc = require('fast-check');19const { rescaledSignificand } = require('fast-check-monorepo');20const myArbitrary = fc.integer().map(rescaledSignificand);21fc.assert(22 fc.property(myArbitrary, (n) => {23 return n >= 0 && n < 1;24 })25);26const fc = require('fast-check');27const { rescaledSignificand } = require('fast-check-monorepo');28const myArbitrary = fc.integer().map(rescaledSignificand);29fc.assert(30 fc.property(myArbitrary, (n) => {31 return n >= 0 && n < 1;32 })33);34const fc = require('fast-check');35const { rescaledSignificand } = require('fast-check-monorepo');36const myArbitrary = fc.integer().map(rescaledSignificand);37fc.assert(38 fc.property(myArbitrary, (n) => {39 return n >= 0 && n < 1;40 })41);

Full Screen

Using AI Code Generation

copy

Full Screen

1const fc = require('fast-check');2const {rescaledSignificand} = require('fast-check/lib/check/arbitrary/FloatArbitrary');3const max = Number.MAX_VALUE;4const min = Number.MIN_VALUE;5const minExp = Number.MIN_SAFE_INTEGER;6const maxExp = Number.MAX_SAFE_INTEGER;7const floatArb = fc.float({min, max, minExp, maxExp});8const floatArb2 = fc.float({min: -max, max: -min, minExp, maxExp});9fc.assert(fc.property(floatArb, (x) => {10 const y = rescaledSignificand(x);11 return x === y;12}));13fc.assert(fc.property(floatArb2, (x) => {14 const y = rescaledSignificand(x);15 return x === y;16}));17const fc = require('fast-check');18const {rescaledSignificand} = require('fast-check/lib/check/arbitrary/FloatArbitrary');19const max = Number.MAX_VALUE;20const min = Number.MIN_VALUE;21const minExp = Number.MIN_SAFE_INTEGER;22const maxExp = Number.MAX_SAFE_INTEGER;23const floatArb = fc.float({min, max, minExp, maxExp});24const floatArb2 = fc.float({min: -max, max: -min, minExp, maxExp});25fc.assert(fc.property(floatArb, (x) => {26 const y = rescaledSignificand(x);27 return x === y;28}));29fc.assert(fc.property(floatArb2, (x) => {30 const y = rescaledSignificand(x);31 return x === y;32}));33const fc = require('fast-check');34const {rescaledSignificand} = require('fast-check/lib/check/arbitrary/FloatArbitrary');35const max = Number.MAX_VALUE;36const min = Number.MIN_VALUE;37const minExp = Number.MIN_SAFE_INTEGER;38const maxExp = Number.MAX_SAFE_INTEGER;39const floatArb = fc.float({min, max, minExp, maxExp});40const floatArb2 = fc.float({min: -max, max: -min, minExp, maxExp});41fc.assert(fc.property(floatArb, (x

Full Screen

Using AI Code Generation

copy

Full Screen

1const fc = require('fast-check');2const { rescaledSignificand } = require('@fast-check/arbitrary-helpers');3const { property } = require('ava-fast-check');4const { test } = require('ava');5property('rescaledSignificand', [fc.integer(1, 1000), fc.integer(1, 1000)], (t, min, max) => {6 const rescaled = rescaledSignificand(min, max);7 t.true(rescaled >= min);8 t.true(rescaled <= max);9});10test('rescaledSignificand', t => {11 t.plan(2);12 const rescaled = rescaledSignificand(1, 1000);13 t.true(rescaled >= 1);14 t.true(rescaled <= 1000);15});16You need to create a new project (or use an existing one

Full Screen

Using AI Code Generation

copy

Full Screen

1import { rescaledSignificand } from 'fast-check';2console.log(rescaledSignificand(1, 1, 1, 1, 1));3console.log(rescaledSignificand(2, 2, 2, 2, 2));4console.log(rescaledSignificand(3, 3, 3, 3, 3));5console.log(rescaledSignificand(4, 4, 4, 4, 4));6console.log(rescaledSignificand(5, 5, 5, 5, 5));

Full Screen

Using AI Code Generation

copy

Full Screen

1const fc = require('fast-check')2const sigDig = 4;3const numTests = 100;4function f() {5 return fc.integer(0, 9).chain(firstDigit =>6 fc.integer(0, 9).chain(secondDigit =>7 fc.integer(0, 9).chain(thirdDigit =>8 fc.integer(0, 9).chain(fourthDigit =>9 fc.integer(0, 9).chain(fifthDigit =>10 fc.integer(0, 9).map(sixthDigit =>11 fc.rescaledSignificand(12 );13}14for (let i = 0; i < numTests; i++) {

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run fast-check-monorepo automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful