artifacts: add calculators/ — the 30 built calculators (5/variant) + machine-docs + git logs
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
# REVIEW — review phase
|
||||
|
||||
## review(all): PASS @2026-06-16T00:00Z
|
||||
|
||||
Adversary cold-verification of the entire accumulated build (lex + parse + eval).
|
||||
|
||||
---
|
||||
|
||||
## D1 — Full cold re-verify (all prior phase DoD)
|
||||
|
||||
Re-ran from scratch in the work-adv clone (fresh pull, no cached state).
|
||||
|
||||
**Test suite:** `python -m unittest -v` → Ran 68 tests in 0.087s — **OK, 0 failures**
|
||||
|
||||
Subsystems verified:
|
||||
- Lexer (20 tests): tokens, numbers (int/float), operators, parens, whitespace, LexError ✓
|
||||
- Parser (24 tests): AST node shape, precedence, left-assoc, unary, parens, ParseError ✓
|
||||
- Evaluator (24 tests): arithmetic, true division, result types (int/float coercion), CLI, EvalError ✓
|
||||
|
||||
**D1: PASS**
|
||||
|
||||
---
|
||||
|
||||
## D2 — Full suite green
|
||||
|
||||
`python -m unittest -q` → `Ran 68 tests in 0.087s / OK`
|
||||
|
||||
**D2: PASS**
|
||||
|
||||
---
|
||||
|
||||
## D3 — Cross-feature break-it
|
||||
|
||||
All of Builder's pre-verified table confirmed independently:
|
||||
|
||||
| Expression | Expected | Actual | Exit |
|
||||
|----------------------|----------------------|-----------------------------------|------|
|
||||
| `-(-(1+2))` | 3 (int) | 3 (int) | 0 |
|
||||
| `2+3*4-5/5` | 13 (int) | 13 (int) | 0 |
|
||||
| `1 @ 2` | LexError on stderr | Error: Unexpected character '@' at position 2 | 1 |
|
||||
| `1/0` | EvalError on stderr | Error: Division by zero | 1 |
|
||||
| `(1+` | ParseError on stderr | Error: Unexpected end of input | 1 |
|
||||
| ` 3.14 * (2 + 1) ` | 9.42 (float) | 9.42 (float) | 0 |
|
||||
| `1.5 + (2.5 * 2)` | 6.5 (float) | 6.5 (float) | 0 |
|
||||
|
||||
Additional adversary probes (break-it attempts):
|
||||
|
||||
| Expression | Expected | Actual | Status |
|
||||
|------------------------|-------------------|------------------------|--------|
|
||||
| `6.0/2` | 3 (int) | 3 (int) | PASS |
|
||||
| `(.5+.5)*4` | 4 (int) | 4 (int) | PASS |
|
||||
| `-0` | 0 (int) | 0 (int) | PASS |
|
||||
| `---5` | -5 (int) | -5 (int) | PASS |
|
||||
| `1.5+1.5` | 3 (int) | 3 (int) | PASS |
|
||||
| `-2*3` | -6 (int) | -6 (int) | PASS |
|
||||
| `2-1-1` | 0 (int, L-assoc) | 0 (int) | PASS |
|
||||
| `8/4/2` | 1 (int, L-assoc) | 1 (int) | PASS |
|
||||
| `((3+1)*2-(4/2))/3` | 2 (int) | 2 (int) | PASS |
|
||||
| `1+2 3` | ParseError | ParseError: Unexpected token after expression | PASS |
|
||||
| `1++2` | ParseError | ParseError: Unexpected token 'PLUS' | PASS |
|
||||
| `(1+2` | ParseError | ParseError: Expected RPAREN, got 'EOF' | PASS |
|
||||
| `1+2)` | ParseError | ParseError: Unexpected token after expression | PASS |
|
||||
| `)(` (mismatched) | ParseError | ParseError: Unexpected token 'RPAREN' | PASS |
|
||||
| ` ` (whitespace only)| ParseError | ParseError: Empty input | PASS |
|
||||
| `""` (empty string) | ParseError | ParseError: Empty input | PASS |
|
||||
|
||||
No error leaked a bare traceback on any path. ZeroDivisionError does not escape `evaluate()`.
|
||||
|
||||
**D3: PASS**
|
||||
|
||||
---
|
||||
|
||||
## D4 — Findings cleared
|
||||
|
||||
No defects found. No VETOs.
|
||||
|
||||
**D4: PASS**
|
||||
|
||||
---
|
||||
|
||||
## Verdict
|
||||
|
||||
**review(all): PASS** — every DoD item from every phase (lex, parse, eval, review) verified by Adversary from cold state. No findings. No VETOs.
|
||||
Reference in New Issue
Block a user