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,109 @@
# REVIEW — phase parse (Adversary)
<!-- Verdicts: review(<id>): PASS|FAIL -->
## Verdicts
| Gate | Verdict | Timestamp |
|------|---------|-----------|
| D1 | PASS | 2026-06-15T02:42Z |
| D2 | PASS | 2026-06-15T02:42Z |
| D3 | PASS | 2026-06-15T02:42Z |
| D4 | PASS | 2026-06-15T02:42Z |
| D5 | PASS | 2026-06-15T02:42Z |
| D6 | PASS | 2026-06-15T02:42Z |
---
## D1: PASS @2026-06-15T02:42Z
`*`/`/` bind tighter than `+`/`-`. Cold-run:
```
1+2*3 → BinOp('+', Num(1), BinOp('*', Num(2), Num(3))) ✓
2*3+4 → BinOp('+', BinOp('*', Num(2), Num(3)), Num(4)) ✓
10-6/2 → BinOp('-', Num(10), BinOp('/', Num(6), Num(2))) ✓
```
Grammar verified: `_expr` calls `_term` (which handles `*`/`/`) before combining with `+`/`-` — precedence is structurally encoded, not a test artifact.
---
## D2: PASS @2026-06-15T02:42Z
Left-associativity for all four operators. Cold-run:
```
8-3-2 → BinOp('-', BinOp('-', Num(8), Num(3)), Num(2)) ✓
8/4/2 → BinOp('/', BinOp('/', Num(8), Num(4)), Num(2)) ✓
1+2+3 → BinOp('+', BinOp('+', Num(1), Num(2)), Num(3)) ✓
```
Associativity comes from `while` loops in `_expr`/`_term` that accumulate left into `node` — correct by construction.
---
## D3: PASS @2026-06-15T02:42Z
Parentheses override precedence. Cold-run:
```
(1+2)*3 → BinOp('*', BinOp('+', Num(1), Num(2)), Num(3)) ✓
((4)) → Num(4) ✓
2*(3+4) → BinOp('*', Num(2), BinOp('+', Num(3), Num(4))) ✓
```
---
## D4: PASS @2026-06-15T02:42Z
Unary minus: leading, nested, after binary operator, double negation. Cold-run:
```
-5 → Unary('-', Num(5)) ✓
-(1+2) → Unary('-', BinOp('+', Num(1), Num(2))) ✓
3 * -2 → BinOp('*', Num(3), Unary('-', Num(2))) ✓
--5 → Unary('-', Unary('-', Num(5))) ✓
```
Adversarial: `---5 → Unary('-', Unary('-', Unary('-', Num(5))))` ✓, `(-5)*3 → BinOp('*', Unary('-', Num(5)), Num(3))` ✓.
---
## D5: PASS @2026-06-15T02:42Z
All five plan-specified error cases raise `ParseError` (not a bare crash). Cold-run:
```
"1 +" → ParseError: unexpected token 'EOF' (None) ✓
"(1" → ParseError: expected 'RPAREN', got 'EOF' ✓
"1 2" → ParseError: unexpected token 'NUMBER' (2) ✓
")(" → ParseError: unexpected token 'RPAREN' (')') ✓
"" → ParseError: empty input ✓
```
Additional adversarial: `+5`, `1*)`, `*5` all raise `ParseError` ✓.
---
## D6: PASS @2026-06-15T02:42Z
```
python -m unittest -q
Ran 31 tests in 0.001s
OK
```
Tests assert on tree structure (dataclass equality), not on evaluation — correct testing approach per plan.
---
## Notes
Grammar is clean recursive descent:
- `expr → term (('+' | '-') term)*`
- `term → unary (('*' | '/') unary)*`
- `unary → '-' unary | primary`
- `primary → NUMBER | '(' expr ')'`
Precedence and associativity are structurally encoded, not patched in. No weak tests that would pass a wrong implementation found.