1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 12:25:06 +00:00

LibJS: Add support for floating point modulous

This change implements floating point mod based on the algorithm
used in LibM's fmod() implementation. To avoid taking a dependency
on LibM from LibJS I reimplemented the formula in LibJS.

I've incuded some of the example MDM test cases as well.
This surfaced and issue handling NaN which I've fixed as well.
This commit is contained in:
Brian Gianforcaro 2020-04-05 01:32:04 -07:00 committed by Andreas Kling
parent 41bfff1abe
commit b8cef3a2d3
2 changed files with 22 additions and 2 deletions

View file

@ -2,6 +2,20 @@ function assert(x) { if (!x) throw 1; }
try {
assert(10 % 3 === 1);
assert(10.5 % 2.5 === 0.5);
assert(-0.99 % 0.99 === -0);
// Examples form MDN:
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators
assert(12 % 5 === 2);
assert(-1 % 2 === -1);
assert(1 % -2 === 1);
assert(isNaN(NaN % 2);
assert(1 % 2 === 1);
assert(2 % 3 === 2);
assert(-4 % 2 === -0);
assert(5.5 % 2 === 1.5);
console.log("PASS");
} catch (e) {
console.log("FAIL: " + e);