feat(test): ludic test <dir>, each test block in a process of its own
A directory stands for its *_test.ludic files and the files straight inside any tests/ under it. The runner answers --list and runs one test by name, and ludic test runs every block in a child process, so tests no longer share globals. A failed expect names the file it is written in (the path the compiler was given) and its line. Reseed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
8075892e0e
commit
9faaa2094d
8 changed files with 19724 additions and 19278 deletions
16
LANGUAGE.md
16
LANGUAGE.md
|
|
@ -1775,11 +1775,27 @@ ludic run # compile src/main.ludic and run it
|
|||
ludic build --headless # headless build (renders out.ppm; reads stdin)
|
||||
ludic test # compile and run the project's `test` blocks
|
||||
ludic test tests/math.ludic --test adds # just the test named "adds" (-v: every result line)
|
||||
ludic test packages/ludic.base # the test programs under a directory (a package's)
|
||||
|
||||
ludicc app.ludic -o build/app # the compiler directly: a native binary
|
||||
ludicc app.ludic --emit-llvm -o app.ll # stop at LLVM IR
|
||||
```
|
||||
|
||||
A test program is a file of `test "name" { ... }` blocks with `expect(cond)`, `expect_eq(a, b)` and
|
||||
`expect_near(a, b, tol)` in them. `ludic test` finds `tests/*.ludic` and `src/**/*_test.ludic`;
|
||||
given a directory, it runs every `*_test.ludic` under it and every file straight inside a `tests/`
|
||||
directory under it. **Each test block runs in a process of its own**, so a global one test changes
|
||||
is back to its initial value in the next - no test depends on another having run, or not. A
|
||||
failed assertion names its file, as the compiler was given it, and its line:
|
||||
|
||||
```
|
||||
pk/src/sums_test.ludic:6: expect_eq failed (got 4, want 5)
|
||||
FAIL - wrong
|
||||
```
|
||||
|
||||
A test program's runner takes a test's name as its one argument, and `--list` to name them all -
|
||||
which is how `ludic test` runs them one at a time.
|
||||
|
||||
`ludic` is the CLI (`ludic help`); `ludicc` is the compiler it drives, built from
|
||||
the IR seed by `bin/ludic-dev build-cli`. **[COMPILING.md](COMPILING.md) is the
|
||||
authoritative CLI reference** — the full flag set (`-o`, `--windowed`,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue