benjamn / immutable-tuple

Immutable finite list objects with constant-time equality testing (===) and no memory leaks.
https://benjamn.github.io/immutable-tuple
MIT License
36 stars 5 forks source link

-0 is not normalized #9

Open acutmore opened 5 months ago

acutmore commented 5 months ago

In JavaScript Map and Set do not distinguish 0 and -0 as different keys, instead -0 is normalized to 0.

This leads to the following 'bug':

const { tuple } = require("immutable-tuple");

if (Math.random() > 0.5) {
    tuple(Object, -0); // sometimes create this first
} else {
    tuple(Object, 0); // other times create this first
}

function isNegativeZero(n) {
  return Object.is(n, -0);
}

console.log(isNegativeZero(tuple(Object, -0)[1])); // sometimes 'true', sometimes 'false'