Skip to content

Commit 9782639

Browse files
ishon19marco-ippolito
authored andcommitted
doc: WeakSet and WeakMap comparison details
PR-URL: #56648 Reviewed-By: Luigi Pinca <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent 4c24ef8 commit 9782639

File tree

1 file changed

+60
-24
lines changed

1 file changed

+60
-24
lines changed

doc/api/assert.md

+60-24
Original file line numberDiff line numberDiff line change
@@ -799,8 +799,10 @@ are recursively evaluated also by the following rules.
799799
* [`Map`][] keys and [`Set`][] items are compared unordered.
800800
* Recursion stops when both sides differ or both sides encounter a circular
801801
reference.
802-
* [`WeakMap`][] and [`WeakSet`][] comparison does not rely on their values. See
803-
below for further details.
802+
* [`WeakMap`][] and [`WeakSet`][] instances are **not** compared structurally.
803+
They are only equal if they reference the same object. Any comparison between
804+
different `WeakMap` or `WeakSet` instances will result in inequality,
805+
even if they contain the same entries.
804806
* [`RegExp`][] lastIndex, flags, and source are always compared, even if these
805807
are not enumerable properties.
806808

@@ -877,23 +879,40 @@ assert.deepStrictEqual({ [symbol1]: 1 }, { [symbol2]: 1 });
877879
// }
878880

879881
const weakMap1 = new WeakMap();
880-
const weakMap2 = new WeakMap([[{}, {}]]);
881-
const weakMap3 = new WeakMap();
882-
weakMap3.unequal = true;
882+
const weakMap2 = new WeakMap();
883+
const obj = {};
883884

885+
weakMap1.set(obj, 'value');
886+
weakMap2.set(obj, 'value');
887+
888+
// Comparing different instances fails, even with same contents
884889
assert.deepStrictEqual(weakMap1, weakMap2);
885-
// OK, because it is impossible to compare the entries
890+
// AssertionError: Values have same structure but are not reference-equal:
891+
//
892+
// WeakMap {
893+
// <items unknown>
894+
// }
895+
896+
// Comparing the same instance to itself succeeds
897+
assert.deepStrictEqual(weakMap1, weakMap1);
898+
// OK
886899

887-
// Fails because weakMap3 has a property that weakMap1 does not contain:
888-
assert.deepStrictEqual(weakMap1, weakMap3);
900+
const weakSet1 = new WeakSet();
901+
const weakSet2 = new WeakSet();
902+
weakSet1.add(obj);
903+
weakSet2.add(obj);
904+
905+
// Comparing different instances fails, even with same contents
906+
assert.deepStrictEqual(weakSet1, weakSet2);
889907
// AssertionError: Expected inputs to be strictly deep-equal:
890908
// + actual - expected
891909
//
892-
// WeakMap {
893-
// + [items unknown]
894-
// - [items unknown],
895-
// - unequal: true
896-
// }
910+
// + WeakSet { <items unknown> }
911+
// - WeakSet { <items unknown> }
912+
913+
// Comparing the same instance to itself succeeds
914+
assert.deepStrictEqual(weakSet1, weakSet1);
915+
// OK
897916
```
898917

899918
```cjs
@@ -969,23 +988,40 @@ assert.deepStrictEqual({ [symbol1]: 1 }, { [symbol2]: 1 });
969988
// }
970989

971990
const weakMap1 = new WeakMap();
972-
const weakMap2 = new WeakMap([[{}, {}]]);
973-
const weakMap3 = new WeakMap();
974-
weakMap3.unequal = true;
991+
const weakMap2 = new WeakMap();
992+
const obj = {};
975993

994+
weakMap1.set(obj, 'value');
995+
weakMap2.set(obj, 'value');
996+
997+
// Comparing different instances fails, even with same contents
976998
assert.deepStrictEqual(weakMap1, weakMap2);
977-
// OK, because it is impossible to compare the entries
999+
// AssertionError: Values have same structure but are not reference-equal:
1000+
//
1001+
// WeakMap {
1002+
// <items unknown>
1003+
// }
1004+
1005+
// Comparing the same instance to itself succeeds
1006+
assert.deepStrictEqual(weakMap1, weakMap1);
1007+
// OK
9781008

979-
// Fails because weakMap3 has a property that weakMap1 does not contain:
980-
assert.deepStrictEqual(weakMap1, weakMap3);
1009+
const weakSet1 = new WeakSet();
1010+
const weakSet2 = new WeakSet();
1011+
weakSet1.add(obj);
1012+
weakSet2.add(obj);
1013+
1014+
// Comparing different instances fails, even with same contents
1015+
assert.deepStrictEqual(weakSet1, weakSet2);
9811016
// AssertionError: Expected inputs to be strictly deep-equal:
9821017
// + actual - expected
9831018
//
984-
// WeakMap {
985-
// + [items unknown]
986-
// - [items unknown],
987-
// - unequal: true
988-
// }
1019+
// + WeakSet { <items unknown> }
1020+
// - WeakSet { <items unknown> }
1021+
1022+
// Comparing the same instance to itself succeeds
1023+
assert.deepStrictEqual(weakSet1, weakSet1);
1024+
// OK
9891025
```
9901026

9911027
If the values are not equal, an [`AssertionError`][] is thrown with a `message`

0 commit comments

Comments
 (0)