Skip to content

Commit 82830a8

Browse files
BridgeARtargos
authored andcommitted
assert: fix loose assert with map and set
There was an oversight when checking the possible loose comparisons. This is now fixed by also accepting `''` instead of `0` or `false`. PR-URL: #22145 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Trivikram Kamat <[email protected]>
1 parent bc6905b commit 82830a8

File tree

2 files changed

+29
-16
lines changed

2 files changed

+29
-16
lines changed

‎lib/internal/util/comparisons.js‎

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -354,29 +354,38 @@ function setEquiv(a, b, strict, memo){
354354
returntrue;
355355
}
356356

357+
// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using
357358
functionfindLooseMatchingPrimitives(prim){
358-
varvalues,number;
359359
switch(typeofprim){
360360
case'number':
361-
values=[''+prim];
362-
if(prim===1||prim===0)
363-
values.push(Boolean(prim));
364-
returnvalues;
361+
if(prim===0){
362+
return['','0',false];
363+
}
364+
if(prim===1){
365+
return['1',true];
366+
}
367+
return[''+prim];
365368
case'string':
366-
number=+prim;
369+
if(prim===''||prim==='0'){
370+
return[0,false];
371+
}
372+
if(prim==='1'){
373+
return[1,true];
374+
}
375+
constnumber=+prim;
367376
if(''+number===prim){
368-
values=[number];
369-
if(number===1||number===0)
370-
values.push(Boolean(number));
377+
return[number];
371378
}
372-
returnvalues;
379+
return;
373380
case'undefined':
374381
return[null];
375382
case'object': // Only pass in null as object!
376383
return[undefined];
377384
case'boolean':
378-
number=+prim;
379-
return[number,''+number];
385+
if(prim===false){
386+
return['','0',0];
387+
}
388+
return['1',1];
380389
}
381390
}
382391

‎test/parallel/test-assert-deep.js‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -350,8 +350,8 @@ assertDeepAndStrictEqual(
350350
newMap([[1,undefined]])
351351
);
352352
assertOnlyDeepEqual(
353-
newMap([[1,null]]),
354-
newMap([['1',undefined]])
353+
newMap([[1,null],['','0']]),
354+
newMap([['1',undefined],[false,0]])
355355
);
356356
assertNotDeepOrStrict(
357357
newMap([[1,undefined]]),
@@ -368,8 +368,12 @@ assertOnlyDeepEqual(
368368
newMap([[undefined,null]])
369369
);
370370
assertOnlyDeepEqual(
371-
newSet([null]),
372-
newSet([undefined])
371+
newSet([null,'']),
372+
newSet([undefined,0])
373+
);
374+
assertNotDeepOrStrict(
375+
newSet(['']),
376+
newSet(['0'])
373377
);
374378

375379
// GH-6416. Make sure circular refs don't throw.

0 commit comments

Comments
(0)