@@ -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
879881const  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
884889assert .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
971990const  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
976998assert .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
9911027If the values are not equal, an [ ` AssertionError ` ] [ ]  is thrown with a ` message ` 
0 commit comments