diff --git a/packages/svelte/tests/runtime-runes/samples/each-updates-6/_config.js b/packages/svelte/tests/runtime-runes/samples/each-updates-6/_config.js
new file mode 100644
index 0000000000..8bd2d17131
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/each-updates-6/_config.js
@@ -0,0 +1,27 @@
+import { flushSync } from 'svelte';
+import { test } from '../../test';
+
+export default test({
+ html: `
- test (1)
- test 2 (2)
- test 3 (3)
`,
+
+ async test({ assert, target }) {
+ const [btn1] = target.querySelectorAll('button');
+
+ flushSync(() => {
+ btn1.click();
+ });
+
+ flushSync(() => {
+ btn1.click();
+ });
+
+ flushSync(() => {
+ btn1.click();
+ });
+
+ assert.htmlEqual(
+ target.innerHTML,
+ `- test (1)
- test 2 (2)
- test 3 (3)
`
+ );
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/each-updates-6/main.svelte b/packages/svelte/tests/runtime-runes/samples/each-updates-6/main.svelte
new file mode 100644
index 0000000000..a1b948ac0f
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/each-updates-6/main.svelte
@@ -0,0 +1,26 @@
+
+
+{#snippet renderItem(item)}
+
+ {item.name} ({item.id})
+ {#if item.color}{/if}
+
+{/snippet}
+
+
+ {#each items as item (item.id)}
+ {@render renderItem(item)}
+ {/each}
+
+
diff --git a/packages/svelte/tests/runtime-runes/samples/each-updates-7/_config.js b/packages/svelte/tests/runtime-runes/samples/each-updates-7/_config.js
new file mode 100644
index 0000000000..7f1f5b6589
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/each-updates-7/_config.js
@@ -0,0 +1,27 @@
+import { flushSync } from 'svelte';
+import { test } from '../../test';
+
+export default test({
+ html: `- test (1)
- test 2 (2)
- test 3 (3)
`,
+
+ async test({ assert, target }) {
+ const [btn1] = target.querySelectorAll('button');
+
+ flushSync(() => {
+ btn1.click();
+ });
+
+ flushSync(() => {
+ btn1.click();
+ });
+
+ flushSync(() => {
+ btn1.click();
+ });
+
+ assert.htmlEqual(
+ target.innerHTML,
+ `- test (1)
- test 2 (2)
- test 3 (3)
`
+ );
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/each-updates-7/main.svelte b/packages/svelte/tests/runtime-runes/samples/each-updates-7/main.svelte
new file mode 100644
index 0000000000..df8b054a42
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/each-updates-7/main.svelte
@@ -0,0 +1,26 @@
+
+
+{#snippet renderItem(item)}
+
+ {item.name} ({item.id})
+
+ {#if item.color}{/if}
+{/snippet}
+
+
+ {#each items as item (item.id)}
+ {@render renderItem(item)}
+ {/each}
+
+
diff --git a/packages/svelte/tests/runtime-runes/samples/each-updates-8/_config.js b/packages/svelte/tests/runtime-runes/samples/each-updates-8/_config.js
new file mode 100644
index 0000000000..e675dcaf67
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/each-updates-8/_config.js
@@ -0,0 +1,42 @@
+import { flushSync } from 'svelte';
+import { test } from '../../test';
+
+export default test({
+ html: `first
message 1
`,
+
+ async test({ assert, target }) {
+ /**
+ * @type {{ click: () => void; }}
+ */
+ let btn1;
+
+ [btn1] = target.querySelectorAll('button');
+
+ flushSync(() => {
+ btn1.click();
+ });
+
+ assert.htmlEqual(
+ target.innerHTML,
+ `first
message 1
message 2
`
+ );
+
+ await Promise.resolve();
+
+ assert.htmlEqual(
+ target.innerHTML,
+ `first
message 1
message 2
`
+ );
+
+ flushSync(() => {
+ btn1.click();
+ });
+
+ await Promise.resolve();
+
+ assert.htmlEqual(
+ target.innerHTML,
+ `first
message 1
message 2
message 3
`
+ );
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/each-updates-8/main.svelte b/packages/svelte/tests/runtime-runes/samples/each-updates-8/main.svelte
new file mode 100644
index 0000000000..869ccdc8dd
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/each-updates-8/main.svelte
@@ -0,0 +1,23 @@
+
+
+
+
+{#each messages as msg, i (`${msg.id}_${msg.tmpId ?? ""}`)}
+ {#if i === 0}
+ first
+ {/if}
+ {msg.content}
+{/each}