訂明本例驗收任務
假設觀察清單用布林標籤記同一版本每題的重複嘗試,每個不同非空文字個案編號只可一組,且最少一次;重複組先拒絕,不進一致度計數。分開數曾通過、每次通過及不一致編號;每次都失敗不屬不一致。標籤是本例假設,並非模型實測。
- 核每題最少一次布林結果
- 分開曾通過及全部通過
- 列混合結果個案
欠嘗試或不是布林標籤,先修記錄。
使用已填個案
| 個案 | 已提供輸入 | 預期結構化結果 | 判斷及原因 |
|---|---|---|---|
| 一題結果不一致 | {"cases":[{"id":"C1","passes":[true,true,true]},{"id":"C2","passes":[false,true,false]}]} | {"cases":2,"everPass":2,"alwaysPass":1,"unstable":["C2"]} | 兩題都曾通過,只有 C1 每次通過。 |
| 每次都失敗 | {"cases":[{"id":"C3","passes":[false,false]}]} | {"cases":1,"everPass":0,"alwaysPass":0,"unstable":[]} | C3 一直失敗,與混合結果分開。 |
| 同題拆成兩組 | {"cases":[{"id":"C1","passes":[true]},{"id":"C1","passes":[false]}]} | {"error":"duplicate-case-id"} | 兩組不能藏起 C1 不一致,也不能當兩題數。 |
| 個案沒有嘗試 | {"cases":[{"id":"C4","passes":[]}]} | {"error":"attempt-label"} | 沒有嘗試不能證明一直成功或失敗。 |
逐步處理 unattempted-case 個案,須得到甚麼結果?原因是甚麼?
查看參考答案
{"error":"attempt-label"}。沒有嘗試不能證明一直成功或失敗。
執行完整本機驗算
import assert from 'node:assert/strict';
function evaluate(x){
if(x.cases.some(c=>typeof c.id!=='string'||!c.id.trim()))return {error:'case-id'};
if(new Set(x.cases.map(c=>c.id)).size!==x.cases.length)return {error:'duplicate-case-id'};
if(x.cases.some(c=>!c.passes.length||c.passes.some(p=>typeof p!=='boolean')))return {error:'attempt-label'};
return {cases:x.cases.length,everPass:x.cases.filter(c=>c.passes.some(Boolean)).length,alwaysPass:x.cases.filter(c=>c.passes.every(Boolean)).length,unstable:x.cases.filter(c=>c.passes.some(Boolean)&&!c.passes.every(Boolean)).map(c=>c.id).sort()};
}
const cases = [
{
"id": "one-unstable-case",
"input": {
"cases": [
{
"id": "C1",
"passes": [
true,
true,
true
]
},
{
"id": "C2",
"passes": [
false,
true,
false
]
}
]
},
"expected": {
"cases": 2,
"everPass": 2,
"alwaysPass": 1,
"unstable": [
"C2"
]
}
},
{
"id": "consistent-failure",
"input": {
"cases": [
{
"id": "C3",
"passes": [
false,
false
]
}
]
},
"expected": {
"cases": 1,
"everPass": 0,
"alwaysPass": 0,
"unstable": []
}
},
{
"id": "split-duplicate-groups",
"input": {
"cases": [
{
"id": "C1",
"passes": [
true
]
},
{
"id": "C1",
"passes": [
false
]
}
]
},
"expected": {
"error": "duplicate-case-id"
}
},
{
"id": "unattempted-case",
"input": {
"cases": [
{
"id": "C4",
"passes": []
}
]
},
"expected": {
"error": "attempt-label"
}
}
];
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)}));
各次嘗試連同固定版本編號保存。有限標籤只描述此例穩定性,不能推出模型普遍成功機率。