- Updated package.json to include Vitest and testing dependencies. - Created test cases for SuitePicker component to validate selection logic. - Added tests for ReportsPage to ensure correct report grouping and ordering. - Implemented read-only enforcement tests for SuitePage to prevent actions on built-in suites. - Introduced a setup file for Vitest to include jest-dom matchers and cleanup after tests. - Modified ReportsPage to group reports by model and display them accordingly. - Enhanced API types to include suite_scope and question_count for better report handling.
43 lines
2.7 KiB
JSON
43 lines
2.7 KiB
JSON
{
|
|
"_comment": "Expected answers for objectively checkable questions. Every value here was recomputed with exact arithmetic (Fraction/Decimal) rather than recalled - see the verification step in the plan. A wrong key produces confident wrong grading, which is worse than no key at all, so anything not independently confirmed is simply omitted.",
|
|
|
|
"test1.txt": {
|
|
"note": "Arithmetic. 4827x396; 17.5% of 1840 minus 3/8 of 512; 3750mL/45mL; 68mph in m/s to 3dp; compound interest; successive discount.",
|
|
"numbers": [1911492, 130, 83, 15, 30.399, 13622.65, 44],
|
|
"_reasoning": "Q6's trap is answering 50%; the true equivalent discount is 44%, checked positively. A ban on '50%' was tried and removed - the prompt says 'Show why it is not 50%', so a correct answer contains that string by design. 30.399 matters: 30.39872 rounds up, and a key of 30.398 would fail correct work."
|
|
},
|
|
|
|
"test2.txt": {
|
|
"note": "Mixture: 2.5 L of 12% and 2.0 L of 30%. Boat: 14 km/h still water, 2 km/h current. Part 3 gives a negative current and is physically impossible.",
|
|
"numbers": [2.5, 2, 14],
|
|
"must_contain_any": ["impossible", "not physically", "cannot be", "inconsistent", "negative current", "no physical"],
|
|
"_reasoning": "Part 3 yields c = -4. Reporting -4 as a plain answer is the failure mode; naming it impossible is the pass."
|
|
},
|
|
|
|
"test3.txt": {
|
|
"note": "Definite integral of 2x/(x^2+1) over 0..2 is ln 5. Critical points of x^3-6x^2+9x+2 are x=1 (local max) and x=3 (local min).",
|
|
"must_contain_any": ["ln(5)", "ln 5", "ln5", "1.609"],
|
|
"numbers": [1, 3],
|
|
"must_contain": ["max", "min"]
|
|
},
|
|
|
|
"test4.txt": {
|
|
"note": "The buggy fib returns 2^(n-1) for n>=1 because `a = b` overwrites a before b is computed. Minimal fix is simultaneous assignment. After the fix range(n) is correct - there is NO second bug.",
|
|
"must_contain_any": ["a, b = b, a + b", "a, b = b, a+b", "simultaneous", "tuple assignment", "unpack"],
|
|
"regex": "(?i)(no (second|other|further|additional) (bug|issue|problem|error))|((there is|there's) none)|(correct as (is|written))",
|
|
"_reasoning": "Item 6 asks whether a second bug exists. It does not. Inventing one is the failure."
|
|
},
|
|
|
|
"test5.txt": {
|
|
"note": "top_k_frequent must beat a full sort: a bounded min-heap of size k gives O(n log k).",
|
|
"must_contain_any": ["heap", "heapq", "nlargest"],
|
|
"regex": "(?i)o\\(\\s*n\\s*log\\s*k\\s*\\)"
|
|
},
|
|
|
|
"test6.txt": {
|
|
"note": "The hidden third loop is the `[r['id'] for r in result]` comprehension re-scanning results inside the nested loop. Rewrite indexes by id.",
|
|
"must_contain_any": ["comprehension", "list comprehension", "not in [", "third loop", "hidden loop", "rescan", "re-scan"],
|
|
"regex": "(?i)(dict|hash|map|index|set)\\b"
|
|
}
|
|
}
|