| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 6ad176e commit ff01087
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -520,6 +520,10 @@ function handleCycles(val1, val2, mode, keys1, keys2, memos, iterationType) { | |||
| 520 | 520 | memos.deep = true; | |
| 521 | 521 | const result = objEquiv(val1, val2, mode, keys1, keys2, memos, iterationType); | |
| 522 | 522 | memos.deep = false; | |
| 523 | + if (memos.set !== undefined) { | ||
| 524 | + memos.set.delete(memos.c); | ||
| 525 | + memos.set.delete(memos.d); | ||
| 526 | + } | ||
| 523 | 527 | return result; | |
| 524 | 528 | } | |
| 525 | 529 | memos.set = new SafeSet(); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -248,6 +248,14 @@ function assertOnlyDeepEqual(a, b, err) { | |||
| 248 | 248 | ); | |
| 249 | 249 | } | |
| 250 | 250 | ||
| 251 | + function activateMemoizedCycleDetection() { | ||
| 252 | + const circA = {}; | ||
| 253 | + circA.self = circA; | ||
| 254 | + const circB = {}; | ||
| 255 | + circB.self = circB; | ||
| 256 | + assert.deepStrictEqual(circA, circB); | ||
| 257 | + } | ||
| 258 | + | ||
| 251 | 259 | test('es6 Maps and Sets', () => { | |
| 252 | 260 | assertDeepAndStrictEqual(new Set(), new Set()); | |
| 253 | 261 | assertDeepAndStrictEqual(new Map(), new Map()); | |
@@ -597,6 +605,36 @@ test('GH-14441. Circular structures should be consistent', () => { | |||
| 597 | 605 | } | |
| 598 | 606 | }); | |
| 599 | 607 | ||
| 608 | + test('deepStrictEqual handles shared expected array elements after cycle detection', () => { | ||
| 609 | + const sharedExpected = { outer: { inner: 0 } }; | ||
| 610 | + const actualValues = [{ outer: { inner: 0 } }, { outer: { inner: 0 } }]; | ||
| 611 | + const expectedValues = [sharedExpected, sharedExpected]; | ||
| 612 | + | ||
| 613 | + activateMemoizedCycleDetection(); | ||
| 614 | + | ||
| 615 | + assertDeepAndStrictEqual(actualValues[0], expectedValues[0]); | ||
| 616 | + assertDeepAndStrictEqual(actualValues[1], expectedValues[1]); | ||
| 617 | + assertDeepAndStrictEqual(actualValues, expectedValues); | ||
| 618 | + }); | ||
| 619 | + | ||
| 620 | + test('deepStrictEqual handles cross-root aliases after cycle detection', () => { | ||
| 621 | + activateMemoizedCycleDetection(); | ||
| 622 | + | ||
| 623 | + const nestedExpected = {}; | ||
| 624 | + nestedExpected.loop = nestedExpected; | ||
| 625 | + nestedExpected.payload = { value: 1 }; | ||
| 626 | + | ||
| 627 | + const expected = {}; | ||
| 628 | + expected.loop = nestedExpected; | ||
| 629 | + expected.payload = { value: 1 }; | ||
| 630 | + | ||
| 631 | + const actual = {}; | ||
| 632 | + actual.loop = expected; | ||
| 633 | + actual.payload = { value: 1 }; | ||
| 634 | + | ||
| 635 | + assertDeepAndStrictEqual(actual, expected); | ||
| 636 | + }); | ||
| 637 | + | ||
| 600 | 638 | // https://github.com/nodejs/node-v0.x-archive/pull/7178 | |
| 601 | 639 | test('Ensure reflexivity of deepEqual with `arguments` objects.', () => { | |
| 602 | 640 | const args = (function() { return arguments; })(); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments