artifacts: add calculators/ — the 30 built calculators (5/variant) + machine-docs + git logs
This commit is contained in:
@ -0,0 +1,90 @@
|
||||
# STATUS — Phase lex
|
||||
|
||||
## DONE
|
||||
|
||||
All D1–D4 gates PASS (Adversary-verified @2026-06-15T05:05Z).
|
||||
Post-DoD fix applied: AF-1 (`ValueError` on malformed numbers now raises `LexError`).
|
||||
|
||||
---
|
||||
|
||||
## Adversary
|
||||
Initialized. Watching for Builder gate claims.
|
||||
|
||||
## Builder
|
||||
|
||||
### Gate D1 CLAIMED — PASS
|
||||
|
||||
**WHAT:** Integers and floats tokenize to NUMBER tokens with correct Python type.
|
||||
|
||||
**HOW:**
|
||||
```bash
|
||||
python -c "from calc.lexer import tokenize; r=tokenize('42'); print(r[0].kind, r[0].value, type(r[0].value).__name__)"
|
||||
python -c "from calc.lexer import tokenize; r=tokenize('3.14'); print(r[0].kind, r[0].value, type(r[0].value).__name__)"
|
||||
python -c "from calc.lexer import tokenize; r=tokenize('.5'); print(r[0].kind, r[0].value)"
|
||||
python -c "from calc.lexer import tokenize; r=tokenize('10.'); print(r[0].kind, r[0].value)"
|
||||
```
|
||||
|
||||
**EXPECTED:**
|
||||
- `NUMBER 42 int`
|
||||
- `NUMBER 3.14 float`
|
||||
- `NUMBER 0.5`
|
||||
- `NUMBER 10.0`
|
||||
- Final token in all cases: `Token(kind='EOF', value=None)`
|
||||
|
||||
**WHERE:** `calc/lexer.py` @ commit `ab0332e`
|
||||
|
||||
---
|
||||
|
||||
### Gate D2 CLAIMED — PASS
|
||||
|
||||
**WHAT:** Operators `+ - * / ( )` tokenize to correct kinds.
|
||||
|
||||
**HOW:**
|
||||
```bash
|
||||
python -c "from calc.lexer import tokenize; print([(t.kind,t.value) for t in tokenize('1+2*3')])"
|
||||
```
|
||||
|
||||
**EXPECTED:**
|
||||
```
|
||||
[('NUMBER', 1), ('PLUS', '+'), ('NUMBER', 2), ('STAR', '*'), ('NUMBER', 3), ('EOF', None)]
|
||||
```
|
||||
|
||||
**WHERE:** `calc/lexer.py` @ commit `ab0332e`
|
||||
|
||||
---
|
||||
|
||||
### Gate D3 CLAIMED — PASS
|
||||
|
||||
**WHAT:** Whitespace skipped; invalid chars raise `LexError` with offending char and position.
|
||||
|
||||
**HOW:**
|
||||
```bash
|
||||
python -c "from calc.lexer import tokenize; print([t.kind for t in tokenize(' 12 + 3 ')])"
|
||||
python -c "from calc.lexer import tokenize; tokenize('1 @ 2')" 2>&1
|
||||
```
|
||||
|
||||
**EXPECTED:**
|
||||
- `['NUMBER', 'PLUS', 'NUMBER', 'EOF']`
|
||||
- `calc.lexer.LexError: unexpected character '@' at position 2`
|
||||
|
||||
**WHERE:** `calc/lexer.py` @ commit `ab0332e`
|
||||
|
||||
---
|
||||
|
||||
### Gate D4 CLAIMED — PASS
|
||||
|
||||
**WHAT:** `calc/test_lexer.py` passes under `python -m unittest`, 0 failures, 18 tests covering D1–D3 including the three required cases.
|
||||
|
||||
**HOW:**
|
||||
```bash
|
||||
python -m unittest -q
|
||||
python -c "from calc.lexer import tokenize; print([(t.kind,t.value) for t in tokenize('3.5*(1-2)')])"
|
||||
python -c "from calc.lexer import tokenize; tokenize('1 @ 2')"
|
||||
```
|
||||
|
||||
**EXPECTED:**
|
||||
- unittest: `Ran 18 tests in X.XXXs OK`
|
||||
- expression: `[('NUMBER', 3.5), ('STAR', '*'), ('LPAREN', '('), ('NUMBER', 1), ('MINUS', '-'), ('NUMBER', 2), ('RPAREN', ')'), ('EOF', None)]`
|
||||
- LexError raised (exit 1)
|
||||
|
||||
**WHERE:** `calc/test_lexer.py`, `calc/lexer.py` @ commit `ab0332e`
|
||||
Reference in New Issue
Block a user