訂明本例驗收任務
假設批次評分每個已訂個案須有一個候選。先核欠及多編號才評內容。預期清單空白屬定義無效;預期三題而候選空白是未完整,不能因迴圈沒失敗就當通過。
- 先核非空預期清單
- 找欠及多候選編號
- 齊備才進內容評分
覆蓋欠項仍未完整,不補造候選結果。
使用已填個案
| 個案 | 已提供輸入 | 預期結構化結果 | 判斷及原因 |
|---|---|---|---|
| 候選檔案空白 | {"expected":["C1","C2","C3"],"candidates":[]} | {"status":"incomplete","missing":["C1","C2","C3"],"extra":[]} | 欠全部三個候選,未能計內容通過率。 |
| 所需編號齊備 | {"expected":["C1","C2"],"candidates":["C2","C1"]} | {"status":"ready-to-grade","missing":[],"extra":[]} | 覆蓋齊備,內容評分是之後一步。 |
| 預期個案清單空白 | {"expected":[],"candidates":[]} | {"status":"invalid-definition"} | 空白定義不能證明已完整驗收。 |
逐步處理 no-evaluation-definition 個案,須得到甚麼結果?原因是甚麼?
查看參考答案
{"status":"invalid-definition"}。空白定義不能證明已完整驗收。
執行完整本機驗算
import assert from 'node:assert/strict';
function evaluate(x){
if(!x.expected.length)return {status:'invalid-definition'};const missing=x.expected.filter(id=>!x.candidates.includes(id)).sort(),extra=x.candidates.filter(id=>!x.expected.includes(id)).sort();
return {status:missing.length+extra.length?'incomplete':'ready-to-grade',missing,extra};
}
const cases = [
{
"id": "empty-candidates",
"input": {
"expected": [
"C1",
"C2",
"C3"
],
"candidates": []
},
"expected": {
"status": "incomplete",
"missing": [
"C1",
"C2",
"C3"
],
"extra": []
}
},
{
"id": "full-candidates",
"input": {
"expected": [
"C1",
"C2"
],
"candidates": [
"C2",
"C1"
]
},
"expected": {
"status": "ready-to-grade",
"missing": [],
"extra": []
}
},
{
"id": "no-evaluation-definition",
"input": {
"expected": [],
"candidates": []
},
"expected": {
"status": "invalid-definition"
}
}
];
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)}));
此步前另查重複鍵。可進評分不等於任何候選內容已通過。