| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent d73dbb9 commit dd72df0
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -529,6 +529,10 @@ function handleCycles(val1, val2, mode, keys1, keys2, memos, iterationType) { | |||
| 529 | 529 | memos.deep = true; | |
| 530 | 530 | const result = objEquiv(val1, val2, mode, keys1, keys2, memos, iterationType); | |
| 531 | 531 | memos.deep = false; | |
| 532 | + if (memos.set !== undefined) { | ||
| 533 | + memos.set.delete(memos.c); | ||
| 534 | + memos.set.delete(memos.d); | ||
| 535 | + } | ||
| 532 | 536 | return result; | |
| 533 | 537 | } | |
| 534 | 538 | memos.set = new SafeSet(); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -260,6 +260,14 @@ function assertOnlyDeepEqual(a, b, err) { | |||
| 260 | 260 | assert.throws(partial, err || { code: 'ERR_ASSERTION' }); | |
| 261 | 261 | } | |
| 262 | 262 | ||
| 263 | + function activateMemoizedCycleDetection() { | ||
| 264 | + const circA = {}; | ||
| 265 | + circA.self = circA; | ||
| 266 | + const circB = {}; | ||
| 267 | + circB.self = circB; | ||
| 268 | + assert.deepStrictEqual(circA, circB); | ||
| 269 | + } | ||
| 270 | + | ||
| 263 | 271 | test('es6 Maps and Sets', () => { | |
| 264 | 272 | assertDeepAndStrictEqual(new Set(), new Set()); | |
| 265 | 273 | assertDeepAndStrictEqual(new Map(), new Map()); | |
@@ -609,6 +617,36 @@ test('GH-14441. Circular structures should be consistent', () => { | |||
| 609 | 617 | } | |
| 610 | 618 | }); | |
| 611 | 619 | ||
| 620 | + test('deepStrictEqual handles shared expected array elements after cycle detection', () => { | ||
| 621 | + const sharedExpected = { outer: { inner: 0 } }; | ||
| 622 | + const actualValues = [{ outer: { inner: 0 } }, { outer: { inner: 0 } }]; | ||
| 623 | + const expectedValues = [sharedExpected, sharedExpected]; | ||
| 624 | + | ||
| 625 | + activateMemoizedCycleDetection(); | ||
| 626 | + | ||
| 627 | + assertDeepAndStrictEqual(actualValues[0], expectedValues[0]); | ||
| 628 | + assertDeepAndStrictEqual(actualValues[1], expectedValues[1]); | ||
| 629 | + assertDeepAndStrictEqual(actualValues, expectedValues); | ||
| 630 | + }); | ||
| 631 | + | ||
| 632 | + test('deepStrictEqual handles cross-root aliases after cycle detection', () => { | ||
| 633 | + activateMemoizedCycleDetection(); | ||
| 634 | + | ||
| 635 | + const nestedExpected = {}; | ||
| 636 | + nestedExpected.loop = nestedExpected; | ||
| 637 | + nestedExpected.payload = { value: 1 }; | ||
| 638 | + | ||
| 639 | + const expected = {}; | ||
| 640 | + expected.loop = nestedExpected; | ||
| 641 | + expected.payload = { value: 1 }; | ||
| 642 | + | ||
| 643 | + const actual = {}; | ||
| 644 | + actual.loop = expected; | ||
| 645 | + actual.payload = { value: 1 }; | ||
| 646 | + | ||
| 647 | + assertDeepAndStrictEqual(actual, expected); | ||
| 648 | + }); | ||
| 649 | + | ||
| 612 | 650 | // https://github.com/nodejs/node-v0.x-archive/pull/7178 | |
| 613 | 651 | test('Ensure reflexivity of deepEqual with `arguments` objects.', () => { | |
| 614 | 652 | const args = (function() { return arguments; })(); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments