訂判斷及所需輸入
本例試驗要求 A 上十讀十寫。二十讀雖同樣二十次,沒有寫,並不相符。程序真的對本地集合執行讀寫,計兩類及涉及哪些鍵。
| 情況 | 輸入 JSON |
|---|---|
| 原例測試 | {"requiredReads":10,"requiredWrites":10,"requiredKey":"A","operations":[{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"}]} |
跑所附比較
此處只核效能試驗輸入是否正確。重跑是順序執行,未量真並行競爭、吞吐或正式容量;配對了的材料仍要另跑並行試驗。
| 路徑 | 輸出 JSON |
|---|---|
| 錯誤路徑 | {"reads":20,"writes":0,"valueA":0,"testInputMatches":true} |
| 所需路徑 | {"reads":20,"writes":0,"valueA":0,"testInputMatches":false} |
import assert from 'node:assert/strict';
const run=function run(i,corrected=true){
const values=new Map([['A',0],['B',0]]);let reads=0,writes=0;const keys=new Set();
for(const op of i.operations){keys.add(op.key);if(op.kind==='read'){values.get(op.key);reads++;}else if(op.kind==='write'){values.set(op.key,values.get(op.key)+1);writes++;}else throw new Error('Outside the fixed operation grammar');}
const matches=corrected?reads===i.requiredReads&&writes===i.requiredWrites&&keys.size===1&&keys.has(i.requiredKey):reads+writes===i.requiredReads+i.requiredWrites;
return {reads,writes,valueA:values.get('A'),testInputMatches:matches};
};
const cases=[{"input":{"requiredReads":10,"requiredWrites":10,"requiredKey":"A","operations":[{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"}]},"corrected":false,"expected":{"reads":20,"writes":0,"valueA":0,"testInputMatches":true}},{"input":{"requiredReads":10,"requiredWrites":10,"requiredKey":"A","operations":[{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"},{"kind":"read","key":"A"}]},"corrected":true,"expected":{"reads":20,"writes":0,"valueA":0,"testInputMatches":false}},{"input":{"requiredReads":1,"requiredWrites":1,"requiredKey":"A","operations":[{"kind":"read","key":"A"},{"kind":"write","key":"A"}]},"corrected":true,"expected":{"reads":1,"writes":1,"valueA":1,"testInputMatches":true}},{"input":{"requiredReads":1,"requiredWrites":1,"requiredKey":"A","operations":[{"kind":"read","key":"B"},{"kind":"write","key":"B"}]},"corrected":true,"expected":{"reads":1,"writes":1,"valueA":0,"testInputMatches":false}}];
for(const test of cases){const actual=await run(test.input,test.corrected);assert.deepEqual(actual,test.expected);console.log(actual);}
按邊界依據作判斷
一讀一寫 A 符邊界材料,A 最後1;同數量在 B,A 仍0,違所需共用紀錄條件。
- 訂讀寫組合及鍵範圍
- 真正重跑所附操作
- 同時對數量及涉及紀錄
試驗材料相符,本身不是效能結果。
| 條件 | 輸入 JSON | 預期輸出 JSON |
|---|---|---|
| 所需共用紀錄讀寫 | {"requiredReads":1,"requiredWrites":1,"requiredKey":"A","operations":[{"kind":"read","key":"A"},{"kind":"write","key":"A"}]} | {"reads":1,"writes":1,"valueA":1,"testInputMatches":true} |
| 數量相同但紀錄不同 | {"requiredReads":1,"requiredWrites":1,"requiredKey":"A","operations":[{"kind":"read","key":"B"},{"kind":"write","key":"B"}]} | {"reads":1,"writes":1,"valueA":0,"testInputMatches":false} |
原例二十讀,可支持所需讀寫試驗嗎?
查看參考答案
不能,寫是零而非十。總數相同未確立所需讀寫組合或鍵分布。