訂判斷及所需輸入
有限本地任務每輪配置兩字節 Buffer。錯路五十輪都把 Buffer 留在清單,持有100 字節,超題內50 配額;更正不留持續參考,明確持有為零。
| 情況 | 輸入 JSON |
|---|---|
| 原例測試 | {"cycles":50,"bytesPerCycle":2,"allowedBytes":50} |
跑所附比較
真正配置 Buffer,再量仍有參考的長度。這是受控持有測試,不是作業系統記憶體數字、垃圾回收保證或整個程序堆量度。
| 路徑 | 輸出 JSON |
|---|---|
| 錯誤路徑 | {"cycles":50,"retainedBytes":100,"withinAllowance":false} |
| 所需路徑 | {"cycles":50,"retainedBytes":0,"withinAllowance":true} |
import assert from 'node:assert/strict';
const smallWhole=(x,max)=>Number.isSafeInteger(x)&&x>=0&&x<=max;
const run=function run(i,corrected=true){
if(!smallWhole(i.allowedBytes,10000)||!smallWhole(i.cycles,100)||!smallWhole(i.bytesPerCycle,100))return {held:true};const retained=[];
for(let n=0;n<i.cycles;n++){const buffer=Buffer.alloc(i.bytesPerCycle);if(!corrected)retained.push(buffer);}
const retainedBytes=retained.reduce((s,b)=>s+b.byteLength,0);return {cycles:i.cycles,retainedBytes,withinAllowance:retainedBytes<=i.allowedBytes};
};
const cases=[{"input":{"cycles":50,"bytesPerCycle":2,"allowedBytes":50},"corrected":false,"expected":{"cycles":50,"retainedBytes":100,"withinAllowance":false}},{"input":{"cycles":50,"bytesPerCycle":2,"allowedBytes":50},"corrected":true,"expected":{"cycles":50,"retainedBytes":0,"withinAllowance":true}},{"input":{"cycles":0,"bytesPerCycle":2,"allowedBytes":0},"corrected":true,"expected":{"cycles":0,"retainedBytes":0,"withinAllowance":true}},{"input":{"cycles":50,"bytesPerCycle":2,"allowedBytes":null},"corrected":true,"expected":{"held":true}}];
for(const test of cases){const actual=await run(test.input,test.corrected);assert.deepEqual(actual,test.expected);console.log(actual);}
按邊界依據作判斷
零輪持有零,符零配額;配額欠缺要停,不用觀察大小代填。
- 訂仍持有內容的量法
- 實際跑多輪
- 之後核仍有的參考
不能把持有 Buffer 字節當整部系統記憶體。
| 條件 | 輸入 JSON | 預期輸出 JSON |
|---|---|---|
| 尚未跑任何輪次 | {"cycles":0,"bytesPerCycle":2,"allowedBytes":0} | {"cycles":0,"retainedBytes":0,"withinAllowance":true} |
| 持有配額欠缺 | {"cycles":50,"bytesPerCycle":2,"allowedBytes":null} | {"held":true} |
原例更正後,對持有內容證明了甚麼?
查看參考答案
五十輪後,此程序持續清單沒有 Buffer,符該明確配額;未承諾整個程序記憶體用量。