Slice pending import encoding and reuse completed immutable plans
This commit is contained in:
@@ -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}}]);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user