訂明本例驗收任務
假設接收器只支援兩個本機格式:v1 用 qty,v2 用 quantity。各須只有該一個鍵,值為非負整數;呼叫者列接收器版本。另一版鍵名屬不兼容,不補零;版本未知不猜。
- 用明示接收器版本
- 核確切回應鍵集合
- 格式兼容才讀值
格式不兼容,須記錄接收器及版本決定。
使用已填個案
| 個案 | 已提供輸入 | 預期結構化結果 | 判斷及原因 |
|---|---|---|---|
| v1 接收器遇 v2 鍵 | {"revision":"v1","response":{"quantity":3}} | {"status":"incompatible"} | 欠 qty 不是已知零值,已訂版本不符。 |
| v2 格式相符 | {"revision":"v2","response":{"quantity":3}} | {"status":"accepted","quantity":3} | 確切 v2 鍵及整數值符合本規則。 |
| 兩版鍵同時提供 | {"revision":"v2","response":{"qty":3,"quantity":3}} | {"status":"incompatible"} | 即使值相同,一鍵封套也不接雙重表示。 |
逐步處理 both-revision-keys 個案,須得到甚麼結果?原因是甚麼?
查看參考答案
{"status":"incompatible"}。即使值相同,一鍵封套也不接雙重表示。
執行完整本機驗算
import assert from 'node:assert/strict';
function evaluate(x){
const key=x.revision==='v1'?'qty':x.revision==='v2'?'quantity':null;if(!key)return {status:'unknown-revision'};
if(Object.keys(x.response).length!==1||!Object.hasOwn(x.response,key))return {status:'incompatible'};
const value=x.response[key];return Number.isInteger(value)&&value>=0?{status:'accepted',quantity:value}:{status:'invalid-value'};
}
const cases = [
{
"id": "v1-meets-v2-response",
"input": {
"revision": "v1",
"response": {
"quantity": 3
}
},
"expected": {
"status": "incompatible"
}
},
{
"id": "v2-matched",
"input": {
"revision": "v2",
"response": {
"quantity": 3
}
},
"expected": {
"status": "accepted",
"quantity": 3
}
},
{
"id": "both-revision-keys",
"input": {
"revision": "v2",
"response": {
"qty": 3,
"quantity": 3
}
},
"expected": {
"status": "incompatible"
}
}
];
for (const c of cases) assert.deepEqual(evaluate(c.input), c.expected, c.id);
console.log(JSON.stringify({checked:cases.length,caseIds:cases.map(c=>c.id)}));
每題保存版本及原回應。此例不提供推出次序、不聲稱供應商支援這些鍵,也不批准寫入。