binary-arith-fold-nan.js (1169B)
1 const values = [ 2 -Infinity, 3 -Number.MAX_VALUE, 4 -Number.MIN_VALUE, 5 -0, 6 7 +0, 8 +Number.MIN_VALUE, 9 +Number.MAX_VALUE 10 +Infinity, 11 12 -123, 13 -0.5, 14 +123, 15 +0.5, 16 ]; 17 18 for (let i = 0; i < 200; ++i) { 19 let val = values[i % values.length]; 20 21 // rhs is NaN 22 assertEq(val + NaN, NaN); 23 assertEq(val - NaN, NaN); 24 assertEq(val * NaN, NaN); 25 assertEq(val / NaN, NaN); 26 assertEq(val % NaN, NaN); 27 assertEq(val ** NaN, NaN); 28 29 // rhs is undefined, ToNumber(undefined) is NaN 30 assertEq(val + undefined, NaN); 31 assertEq(val - undefined, NaN); 32 assertEq(val * undefined, NaN); 33 assertEq(val / undefined, NaN); 34 assertEq(val % undefined, NaN); 35 assertEq(val ** undefined, NaN); 36 37 // lhs is NaN 38 assertEq(NaN + val, NaN); 39 assertEq(NaN - val, NaN); 40 assertEq(NaN * val, NaN); 41 assertEq(NaN / val, NaN); 42 assertEq(NaN % val, NaN); 43 assertEq(NaN ** val, (val === 0 ? 1 : NaN)); 44 45 // lhs is undefined, ToNumber(undefined) is NaN 46 assertEq(undefined + val, NaN); 47 assertEq(undefined - val, NaN); 48 assertEq(undefined * val, NaN); 49 assertEq(undefined / val, NaN); 50 assertEq(undefined % val, NaN); 51 assertEq(undefined ** val, (val === 0 ? 1 : NaN)); 52 }