artifacts: add calculators/ — the 30 built calculators (5/variant) + machine-docs + git logs
This commit is contained in:
@ -0,0 +1,104 @@
|
||||
# STATUS — Phase `eval`
|
||||
|
||||
## DONE
|
||||
|
||||
All D1–D5 gates Adversary-verified PASS @2026-06-16T00:18Z (REVIEW-eval.md). No VETO.
|
||||
|
||||
## Gate: ALL CLAIMED, awaiting Adversary comprehensive verification
|
||||
|
||||
---
|
||||
|
||||
## D1 — arithmetic
|
||||
**WHAT:** `evaluate(parse(tokenize(s)))` is correct for `+`, `-`, `*`, `/`, precedence, parens, and unary minus.
|
||||
**HOW:**
|
||||
```bash
|
||||
python -c "from calc.lexer import tokenize; from calc.parser import parse; from calc.evaluator import evaluate; print(evaluate(parse(tokenize('2+3*4'))))"
|
||||
python -c "from calc.lexer import tokenize; from calc.parser import parse; from calc.evaluator import evaluate; print(evaluate(parse(tokenize('(2+3)*4'))))"
|
||||
python -c "from calc.lexer import tokenize; from calc.parser import parse; from calc.evaluator import evaluate; print(evaluate(parse(tokenize('8-3-2'))))"
|
||||
python -c "from calc.lexer import tokenize; from calc.parser import parse; from calc.evaluator import evaluate; print(evaluate(parse(tokenize('-2+5'))))"
|
||||
python -c "from calc.lexer import tokenize; from calc.parser import parse; from calc.evaluator import evaluate; print(evaluate(parse(tokenize('2*-3'))))"
|
||||
```
|
||||
**EXPECTED:** `14`, `20`, `3`, `3`, `-6`
|
||||
**WHERE:** `calc/evaluator.py`, `calc/test_evaluator.py::TestArithmetic`
|
||||
|
||||
---
|
||||
|
||||
## D2 — division
|
||||
**WHAT:** `/` is true division; division by zero raises `EvalError`, not bare `ZeroDivisionError`.
|
||||
**HOW:**
|
||||
```bash
|
||||
python -c "from calc.lexer import tokenize; from calc.parser import parse; from calc.evaluator import evaluate; print(evaluate(parse(tokenize('7/2'))))"
|
||||
python -c "from calc.lexer import tokenize; from calc.parser import parse; from calc.evaluator import evaluate, EvalError
|
||||
try:
|
||||
evaluate(parse(tokenize('1/0')))
|
||||
except EvalError as e:
|
||||
print('EvalError:', e)
|
||||
except ZeroDivisionError:
|
||||
print('FAIL: bare ZeroDivisionError escaped')
|
||||
"
|
||||
```
|
||||
**EXPECTED:** `3.5`; then `EvalError: division by zero`
|
||||
**WHERE:** `calc/evaluator.py`, `calc/test_evaluator.py::TestDivision`
|
||||
|
||||
---
|
||||
|
||||
## D3 — result type
|
||||
**WHAT:** Whole-valued floats display without trailing `.0`; non-whole floats display normally.
|
||||
**Rule:** `fmt_result(v)` in `calc/evaluator.py`: if `isinstance(v, float) and v.is_integer()` → `str(int(v))`, else `str(v)`.
|
||||
**HOW:**
|
||||
```bash
|
||||
python calc.py "4/2"
|
||||
python calc.py "7/2"
|
||||
```
|
||||
**EXPECTED:** `2`, `3.5`
|
||||
**WHERE:** `calc/evaluator.py::fmt_result`, `calc/test_evaluator.py::TestResultType`, `calc.py`
|
||||
|
||||
---
|
||||
|
||||
## D4 — CLI
|
||||
**WHAT:** `python calc.py "2+3*4"` prints `14` and exits 0; errors print to stderr and exit non-zero with no traceback.
|
||||
**HOW:**
|
||||
```bash
|
||||
python calc.py "2+3*4" # stdout: 14, exit 0
|
||||
python calc.py "(2+3)*4" # stdout: 20, exit 0
|
||||
python calc.py "7/2" # stdout: 3.5, exit 0
|
||||
python calc.py "4/2" # stdout: 2, exit 0
|
||||
python calc.py "1/0"; echo "exit:$?" # stderr: error, exit 1
|
||||
python calc.py "1 +"; echo "exit:$?" # stderr: error, exit 1
|
||||
```
|
||||
**EXPECTED:** `14`, `20`, `3.5`, `2`, then error+exit:1, error+exit:1
|
||||
**WHERE:** `calc.py`
|
||||
|
||||
---
|
||||
|
||||
## D5 — tests green + end-to-end
|
||||
**WHAT:** Full unittest suite (lex + parse + eval) passes, 0 failures.
|
||||
**HOW:**
|
||||
```bash
|
||||
python -m unittest -q
|
||||
```
|
||||
**EXPECTED:** `Ran 64 tests in X.XXXs\nOK`
|
||||
**WHERE:** `calc/test_lexer.py`, `calc/test_parser.py`, `calc/test_evaluator.py`
|
||||
|
||||
---
|
||||
|
||||
## Verification commands (for Adversary cold-verify)
|
||||
|
||||
```bash
|
||||
python -m unittest -q
|
||||
python calc.py "2+3*4"
|
||||
python calc.py "(2+3)*4"
|
||||
python calc.py "7/2"
|
||||
python calc.py "4/2"
|
||||
python calc.py "1/0"; echo "exit:$?"
|
||||
python calc.py "1 +"; echo "exit:$?"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Adversary Verdict @2026-06-16T00:18Z
|
||||
|
||||
**COMPREHENSIVE PASS — all D1–D5 gates verified cold.**
|
||||
|
||||
Cold-verified from work-adv clone (commit 21be8f5). Full verdicts in REVIEW-eval.md.
|
||||
Builder may now write `## DONE` to this file.
|
||||
Reference in New Issue
Block a user