(tests (names test_flan test_acceptance test_reload test_agent test_session test_dev test_emacs test_repl test_cider) ; Explicit because test_sanitize lives in this directory and is not one of ; these: two stanzas in one directory have to say which modules are whose. (modules test_flan test_acceptance test_reload test_agent test_session test_dev test_emacs test_repl test_cider) (libraries flan unix) ; The acceptance programs are part of the test corpus: if the reader, the ; parser or the checker regresses on them we want to know here, not at the CLI. (deps (file %{workspace_root}/calc-me.flan) (file %{workspace_root}/sand.flan) ; The raylib bindings, because sand.flan and the FFI case import them and an ; import reads the directory at build time. sand.flan itself is above: the ; headless case imports it as a single-file package. (glob_files %{workspace_root}/vendor/raylib/*) ; The dev agent package: its Flan declarations and the C that implements them. (glob_files %{workspace_root}/vendor/agent/*) ; The EDN tokenizer, which programs/edn.flan imports. (glob_files %{workspace_root}/vendor/edn/*) ; The ported raylib examples. Only one of them has a headless acceptance ; case, but it imports its example as a package and that example imports ; examples/digits.flan, so the directory has to be here whole. (glob_files %{workspace_root}/examples/*) (glob_files programs/*.flan) ; The reload primitive's host: a C main that dlopens what Build.shared made. (file reload_host.c) ; test_dev runs the compiler itself: flan dev launches and owns a program. (file %{workspace_root}/bin/main.exe) ; The Emacs client, which test_emacs drives against a real daemon. (glob_files %{workspace_root}/emacs/*.el) ; The WASI host the wasm32 case runs its module under, when no wasmtime or ; wasmer is installed. (file wasm-run.mjs))) ; The corpus a second time under ASan and UBSan. Its own alias and not part of ; `dune test`: a sanitized build is a statically linked 1.8MB binary that takes ; tens of seconds to produce, so the sweep is minutes against the existing ; suite's seconds, and a test nobody will wait for is a test nobody runs. ; ; dune build --root . @sanitize ; An executable plus a rule rather than a (test ...): a test stanza attaches ; to the @runtest alias and offers no way to be attached to another one, which ; is the whole point here. (executable (name test_sanitize) (modules test_sanitize) (libraries flan unix)) (rule (alias sanitize) (deps test_sanitize.exe (file %{workspace_root}/calc-me.flan) (file %{workspace_root}/sand.flan) (glob_files %{workspace_root}/vendor/raylib/*) (glob_files %{workspace_root}/vendor/agent/*) (glob_files %{workspace_root}/vendor/edn/*) (glob_files %{workspace_root}/examples/*) (glob_files programs/*.flan)) (action (run ./test_sanitize.exe)))