artifacts: add calculators/ — the 30 built calculators (5/variant) + machine-docs + git logs

This commit is contained in:
2026-06-16 15:39:42 +00:00
parent 64bc360fc0
commit bb85aa9f11
728 changed files with 34148 additions and 0 deletions

View File

@ -0,0 +1,115 @@
# STATUS — Phase eval
## Gate D1 CLAIMED — awaiting Adversary
**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
def c(s): return evaluate(parse(tokenize(s)))
assert c('2+3*4') == 14
assert c('(2+3)*4') == 20
assert c('8-3-2') == 3
assert c('-2+5') == 3
assert c('2*-3') == -6
print('D1 OK')
"
```
**EXPECTED:** prints `D1 OK`, no assertion errors.
**WHERE:** `calc/evaluator.py` @ commit `7167e33`
---
## Gate D2 CLAIMED — awaiting Adversary
**WHAT:** `/` is true division (`"7/2"` → 3.5). Division by zero raises `EvalError`, not `ZeroDivisionError`.
**HOW:**
```bash
python -c "
from calc.lexer import tokenize; from calc.parser import parse; from calc.evaluator import evaluate, EvalError
def c(s): return evaluate(parse(tokenize(s)))
assert c('7/2') == 3.5
try:
c('1/0')
assert False, 'no error raised'
except EvalError:
pass
except ZeroDivisionError:
assert False, 'bare ZeroDivisionError escaped'
print('D2 OK')
"
```
**EXPECTED:** prints `D2 OK`, no assertion errors.
**WHERE:** `calc/evaluator.py` @ commit `7167e33`
---
## Gate D3 CLAIMED — awaiting Adversary
**WHAT:** Whole-valued results print without `.0` (`"4/2"``2`), non-whole as float (`"7/2"``3.5`).
Rule: after division, if `result == int(result)`, return `int(result)`; otherwise return `float`.
**HOW:**
```bash
python -c "
from calc.lexer import tokenize; from calc.parser import parse; from calc.evaluator import evaluate
def c(s): return evaluate(parse(tokenize(s)))
r1 = c('4/2'); assert r1 == 2 and isinstance(r1, int), f'got {r1!r}'
r2 = c('7/2'); assert isinstance(r2, float) and r2 == 3.5, f'got {r2!r}'
print('D3 OK')
"
python calc.py '4/2' # must print: 2
python calc.py '7/2' # must print: 3.5
```
**EXPECTED:** `D3 OK`, then `2`, then `3.5`.
**WHERE:** `calc/evaluator.py` @ commit `7167e33`
---
## Gate D4 CLAIMED — awaiting Adversary
**WHAT:** `python calc.py "2+3*4"` prints `14` and exits 0; invalid expression prints error to stderr and exits non-zero (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" # stderr: error: ..., exit non-zero, stdout empty
python calc.py "1 +" # stderr: error: ..., exit non-zero, stdout empty
```
**EXPECTED:** exactly as above — no Python traceback in stderr, error message starts with `error:`.
**WHERE:** `calc.py` @ commit `7167e33`
---
## Gate D5 CLAIMED — awaiting Adversary
**WHAT:** Full test suite passes: `python -m unittest -q`, 0 failures. New `calc/test_evaluator.py` covers D1D4. Prior lex+parse suite (37 tests) still passes (no regression). Total: 63 tests.
**HOW:**
```bash
python -m unittest -q
```
**EXPECTED:**
```
Ran 63 tests in X.XXXs
OK
```
**WHERE:** `calc/test_evaluator.py` (26 new tests) + `calc/test_lexer.py` + `calc/test_parser.py` @ commit `7167e33`