訂明本例驗收任務
假設介面列數個版本編號,同事把「那個版本」標成已觀察指向編號;沒有指向用 null。null 時列全部不同可見候選,仍未解決,不因某項最後出現便選它。指向不在可見清單則無效。
- 保留可見版本集合
- 讀已觀察指向或 null
- 列已解決選擇或完整候選
指向無效不能改選最近可見項目。
使用已填個案
| 個案 | 已提供輸入 | 預期結構化結果 | 判斷及原因 |
|---|---|---|---|
| 兩個版本但沒有指向 | {"visible":["A","B"],"pointer":null} | {"candidates":["A","B"],"resolved":false,"selected":null} | 兩個都保留,沒有按最近位置定案的規則。 |
| 看到指向 B | {"visible":["A","B"],"pointer":"B"} | {"candidates":["A","B"],"resolved":true,"selected":"B"} | 已觀察指向 B;A 仍留在候選依據。 |
| 指向未顯示版本 | {"visible":["A","B"],"pointer":"C"} | {"error":"pointer-not-visible"} | 清單沒有 C,須覆核標註。 |
逐步處理 invisible-pointer 個案,須得到甚麼結果?原因是甚麼?
查看參考答案
{"error":"pointer-not-visible"}。清單沒有 C,須覆核標註。
執行完整本機驗算
import assert from 'node:assert/strict';
function evaluate(x){
const candidates=[...new Set(x.visible)].sort();if(x.pointer===null)return {candidates,resolved:false,selected:null};
return candidates.includes(x.pointer)?{candidates,resolved:true,selected:x.pointer}:{error:'pointer-not-visible'};
}
const cases = [
{
"id": "no-pointer",
"input": {
"visible": [
"A",
"B"
],
"pointer": null
},
"expected": {
"candidates": [
"A",
"B"
],
"resolved": false,
"selected": null
}
},
{
"id": "explicit-pointer",
"input": {
"visible": [
"A",
"B"
],
"pointer": "B"
},
"expected": {
"candidates": [
"A",
"B"
],
"resolved": true,
"selected": "B"
}
},
{
"id": "invisible-pointer",
"input": {
"visible": [
"A",
"B"
],
"pointer": "C"
},
"expected": {
"error": "pointer-not-visible"
}
}
];
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)}));
原指示連同對象標註保存。解析器使用已觀察資料;確認指向也不代表可寫入或發布。