diff --git a/packages/svelte/src/reactivity/map.test.ts b/packages/svelte/src/reactivity/map.test.ts index 7777392cf9..f35b1a399a 100644 --- a/packages/svelte/src/reactivity/map.test.ts +++ b/packages/svelte/src/reactivity/map.test.ts @@ -183,3 +183,31 @@ test('map handling of undefined values', () => { cleanup(); }); + +test('not invoking reactivity when value is not in the map after changes', () => { + const map = new ReactiveMap([[1, 1]]); + + const log: any = []; + + const cleanup = effect_root(() => { + render_effect(() => { + log.push(map.get(1)); + }); + + render_effect(() => { + log.push(map.get(2)); + }); + + flushSync(() => { + map.delete(1); + }); + + flushSync(() => { + map.set(1, 1); + }); + }); + + assert.deepEqual(log, [1, undefined, undefined, 1]); + + cleanup(); +}); diff --git a/packages/svelte/src/reactivity/set.test.ts b/packages/svelte/src/reactivity/set.test.ts index 5226014518..811a99d525 100644 --- a/packages/svelte/src/reactivity/set.test.ts +++ b/packages/svelte/src/reactivity/set.test.ts @@ -106,3 +106,46 @@ test('set.forEach()', () => { cleanup(); }); + +test('not invoking reactivity when value is not in the set after changes', () => { + const set = new ReactiveSet([1, 2]); + + const log: any = []; + + const cleanup = effect_root(() => { + render_effect(() => { + log.push('has 1', set.has(1)); + }); + + render_effect(() => { + log.push('has 2', set.has(2)); + }); + + render_effect(() => { + log.push('has 3', set.has(3)); + }); + }); + + flushSync(() => { + set.delete(2); + }); + + flushSync(() => { + set.add(2); + }); + + assert.deepEqual(log, [ + 'has 1', + true, + 'has 2', + true, + 'has 3', + false, + 'has 2', + false, + 'has 2', + true + ]); + + cleanup(); +});