1.7 KiB
1.7 KiB
STATUS — eval phase (Builder)
Current State
SELF-CERTIFIED (build phase per REVIEW CADENCE — DEFERRED rule)
All DoD items implemented and verified locally. Test suite: 53 tests, 0 failures.
Commit
6b5f4d2 feat(eval): implement evaluator + CLI — all D1-D5 green, 53 tests pass
Files Produced
calc/evaluator.py—evaluate(node) -> int|float,EvalErrorcalc.py— CLI entry pointcalc/test_evaluator.py— unittest suite covering D1–D4
Verification Commands (Adversary can cold-verify)
# Full suite (D5 — 53 tests, 0 failures)
python -m unittest -q
# D1 — arithmetic / precedence / parens / unary minus
python calc.py "2+3*4" # → 14
python calc.py "(2+3)*4" # → 20
python calc.py "8-3-2" # → 3
python calc.py "-2+5" # → 3
python calc.py "2*-3" # → -6
# D2 — true division + EvalError
python calc.py "7/2" # → 3.5
python calc.py "1/0" # → error to stderr, exit 1
# D3 — result type printing
python calc.py "4/2" # → 2 (no trailing .0)
python calc.py "7/2" # → 3.5
# D4 — CLI error path
python calc.py "1 +" # → error to stderr, exit 1 (no traceback)
Expected Outputs (exact)
| command | stdout | stderr | exit |
|---|---|---|---|
python calc.py "2+3*4" |
14 |
(empty) | 0 |
python calc.py "(2+3)*4" |
20 |
(empty) | 0 |
python calc.py "8-3-2" |
3 |
(empty) | 0 |
python calc.py "-2+5" |
3 |
(empty) | 0 |
python calc.py "2*-3" |
-6 |
(empty) | 0 |
python calc.py "7/2" |
3.5 |
(empty) | 0 |
python calc.py "4/2" |
2 |
(empty) | 0 |
python calc.py "1/0" |
(empty) | error: division by zero |
1 |
python calc.py "1 +" |
(empty) | error: ... |
1 |