Slice pending import encoding and reuse completed immutable plans

This commit is contained in:
2026-11-11 04:29:11 +08:00
parent 210bc14074
commit 5eabca5056
5 changed files with 48 additions and 5 deletions
+16
View File
@@ -96,3 +96,19 @@ test('unknown proxies retain the synchronous codec trap order and callback count
const actual=await sealRecoveryImageAsync(17,1,1,payload);
assert.deepEqual(actual,expected);assert.deepEqual(events,before);
});
test('repeated owned containers reuse facts assembled earlier in the same asynchronous image',async()=>{
const {dataArray,dataRecord}=await import('../../src/lib/canvas-core/data-containers.ts');
const {sealRecoveryImageAsync,sealedRecoveryByteLength}=await import('../../src/lib/canvas-runtime/recovery-encoding.ts');
const rows=dataArray(Array.from({length:1000},(_,i)=>dataRecord({index:i,text:'shared-中文😀'})));
let tick=0,yields=0;
const image=await sealRecoveryImageAsync(17,1,1,dataRecord({left:rows,right:rows}),{now:()=>tick++,frameBudgetMs:1,yieldTask:async()=>{yields++;}});
assert.ok(yields>0);assert.equal(image.payload.left,image.payload.right);
assert.equal(image.payload.left.length,1000);assert.equal(image.payload.left[999].index,999);
assert.equal(sealedRecoveryByteLength(image),new TextEncoder().encode(JSON.stringify(image)).byteLength);
// Unsafe descendants still need independent values for every occurrence.
let n=0;const unsafe=dataRecord({getValue:Object.freeze({get value(){return ++n;}})});
const captured=await sealRecoveryImageAsync(17,1,1,dataArray([unsafe,unsafe]));
assert.deepEqual(captured.payload,[{getValue:{value:1}},{getValue:{value:2}}]);
});