adjust test

entangle-batches-2
Simon Holthausen 2 weeks ago
parent 0fa394fec5
commit 8e98c03e25
No known key found for this signature in database

@ -15,15 +15,16 @@ export default test({
` `
<button>startA</button> <button>startA</button>
<button>startB</button> <button>startB</button>
<button>settleA</button>
<button>settleB</button> <button>settleB</button>
<p>A0/B0</p> <p>A0/B0</p>
<div><span>1</span><span>2</span></div> <div><span>1</span><span>2</span></div>
` `
); );
const [startA, startB, settleB] = target.querySelectorAll('button'); const [startA, startB, settleA, settleB] = target.querySelectorAll('button');
// Batch A: add key 9, then block forever on gate A. // Batch A: add key 9, then block on gate A.
startA.click(); startA.click();
await tick(); await tick();
@ -32,18 +33,31 @@ export default test({
await tick(); await tick();
// Settle B first so B commits while A is still pending. // Settle B first so B commits while A is still pending.
// Without the fix this throws reading `.e` of undefined and leaves a/b stuck.
settleB.click(); settleB.click();
await tick(); await tick();
assert.htmlEqual(
target.innerHTML,
`
<button>startA</button>
<button>startB</button>
<button>settleA</button>
<button>settleB</button>
<p>A0/B0</p>
<div><span>1</span><span>2</span></div>
`
);
settleA.click();
await tick();
assert.htmlEqual( assert.htmlEqual(
target.innerHTML, target.innerHTML,
` `
<button>startA</button> <button>startA</button>
<button>startB</button> <button>startB</button>
<button>settleA</button>
<button>settleB</button> <button>settleB</button>
<p>A0/B1</p> <p>A1/B1</p>
<div></div> <div><span>9</span></div>
` `
); );
} }

@ -8,6 +8,8 @@
// and are not merged. // and are not merged.
const items = $derived(extraKey === null ? base : [...base, extraKey]); const items = $derived(extraKey === null ? base : [...base, extraKey]);
/** @type {((value: string) => void) | undefined} */
let resolveA;
/** @type {((value: string) => void) | undefined} */ /** @type {((value: string) => void) | undefined} */
let resolveB; let resolveB;
@ -19,7 +21,8 @@
n === 0 n === 0
? Promise.resolve(`${name}0`) ? Promise.resolve(`${name}0`)
: new Promise((r) => { : new Promise((r) => {
if (name === 'B') resolveB = r; if (name === 'A') resolveA = r;
else resolveB = r;
}); });
const a = $derived(await gate('A', tickA)); const a = $derived(await gate('A', tickA));
@ -34,15 +37,12 @@
base = []; base = [];
tickB = 1; tickB = 1;
} }
function settleB() {
resolveB?.('B1');
}
</script> </script>
<button onclick={startA}>startA</button> <button onclick={startA}>startA</button>
<button onclick={startB}>startB</button> <button onclick={startB}>startB</button>
<button onclick={settleB}>settleB</button> <button onclick={() => resolveA?.('A1')}>settleA</button>
<button onclick={() => resolveB?.('B1')}>settleB</button>
<p>{a}/{b}</p> <p>{a}/{b}</p>

Loading…
Cancel
Save