test: prove canonical directory test products
This commit is contained in:
@@ -193,8 +193,9 @@ and nonempty-version-constant assertions.
|
||||
|
||||
`ww test` delegates directory package requests to the native package
|
||||
coordinator. The coordinator owns request-pattern expansion, package grouping,
|
||||
same-package and external-package variant selection, filtering, result
|
||||
aggregation, and its internal temporary workspace. Test sources are exclusively
|
||||
same-package and external-package action selection, one canonical
|
||||
directory-owned product, filtering, result aggregation, and its internal
|
||||
temporary workspace. Test sources are exclusively
|
||||
`*_test.ww` (Go's `_test.go` contract): a line-leading `@test` declaration in
|
||||
any other source is rejected loudly — by both driver stages at directory
|
||||
enumeration and by the coordinator at source classification. A local spelling
|
||||
@@ -204,8 +205,11 @@ directory prefix before the first wildcard. Recursive children beginning `.`
|
||||
or `_` and exact `testdata` subtrees are pruned; child directory symlinks are
|
||||
not followed. A wildcard cannot consume a non-terminal exact `vendor` element,
|
||||
while an explicitly vendor-rooted pattern remains legal. Every selected
|
||||
test-bearing directory becomes one package run, and selected source-bearing
|
||||
directories without tests report the usual `?` line. The coordinator first
|
||||
test-bearing directory becomes exactly one package run, binary, and result even
|
||||
when both internal and external actions exist. Selected source-bearing
|
||||
directories without selected test files report the usual `?` line after
|
||||
ordinary production validation, with no support, generated main, link, binary,
|
||||
result, or process. The coordinator first
|
||||
launches one driver plan for the complete command-global package/action union.
|
||||
After that shared build completes, `-j N` schedules up to N successful selected
|
||||
test binaries concurrently under `os.exec` start/poll supervision (no threads);
|
||||
@@ -213,10 +217,11 @@ emission stays strictly in group order, so the byte stream is identical at
|
||||
every `-j` level, and `-j 1` — the default — matches the former sequential
|
||||
run loop exactly. Measured on the 31-package `lib/...` walk:
|
||||
7.0s sequential, 2.4s at `-j 4`. With `-c`, it publishes each exact
|
||||
`<package>.test` binary in the package directory; the first output owns the one
|
||||
`<package>.test` directory binary; the first output owns the one
|
||||
shared cold sepwork containing the command-global action universe. Those become
|
||||
caller-owned artifacts. `-c -o <name>`
|
||||
names that artifact instead of the fixed stem, for exactly one package:
|
||||
names that artifact instead of the fixed stem for exactly one directory,
|
||||
including a combined internal/external directory:
|
||||
the coordinator rejects a multi-package fan-out ("cannot use -o with
|
||||
multiple packages", Go's `go test -o` rule), and `-o` without `-c` is
|
||||
rejected at the driver ("needs -c for a package target") because a plain
|
||||
@@ -256,8 +261,10 @@ archive/action ownership, one canonical direct edge for repeated occurrences,
|
||||
stage-equal diagnostics and binaries, and clean rejection state.
|
||||
The declared-name observer proves imports are file-scoped while dependency
|
||||
edges are the package-wide sorted union; command and
|
||||
production/internal/external/generated-main variants retain canonical action
|
||||
ownership; vendor expansion changes identity but not the effective qualifier;
|
||||
production/internal/external/directory-main actions retain canonical action
|
||||
ownership while one canonical directory owns their product; external
|
||||
self-imports bind the augmented internal action; vendor expansion changes
|
||||
identity but not the effective qualifier;
|
||||
compiler argv contains only direct `.wwi` inputs; and its named rejected
|
||||
actions leave neither committed nor staged action artifacts or a published
|
||||
binary. It also forces a request transaction to reject after dependency work
|
||||
@@ -277,9 +284,15 @@ normalized compiler/assembler/linker argv, units, `.wwi`, assembly, objects,
|
||||
archives, generated-main archives, binaries, runtime/test output, direct and
|
||||
recursive behavior, reversed roots, ignored-edit reuse, selected private-change
|
||||
propagation, and request rollback after a dependency has staged and the root
|
||||
compiler fails. The existing bounded-memory package-initialization observer
|
||||
continues to own allocation-failure parity for the shared dynamically grown
|
||||
action universe.
|
||||
compiler fails. Wrong-target test files cannot add a target to the directory
|
||||
main or create one for an otherwise no-test directory. The bounded-memory
|
||||
package-initialization observer now pressures the combined directory topology
|
||||
itself: production, augmented internal test, external self-import, a transitive
|
||||
recompile-for-test clone, support, and the two-target generated main. Each stage
|
||||
searches its own bounded address-space ceiling, while the accepted failure must
|
||||
have the same `ww: out of memory` diagnostic, invoke no compiler, assembler, or
|
||||
linker, and leave an empty caller work directory with no output, status, or
|
||||
staging path.
|
||||
|
||||
`test/sep/sepinit_test.ww` is the single focused package-initialization owner.
|
||||
It generates all source trees temporarily and runs independent cold/persistent
|
||||
@@ -287,15 +300,18 @@ Cstage and WWstage legs. Its matrix covers blank-only reachability; dependency,
|
||||
diamond, and independent ready-task order; runtime call/allocation and aggregate
|
||||
package lets; multiple init declarations and invalid forms; direct/qualified
|
||||
init invisibility; initialization cycles and diagnostic order; command,
|
||||
internal-test, external-test, support, and generated-main ownership; canonical
|
||||
internal-test, external-test, support, and one directory-generated-main
|
||||
ownership; canonical
|
||||
task and dispatcher symbols; deterministic one- and two-member archives;
|
||||
`.wwi` exclusion; byte-identical artifacts/binaries; init-only invalidation;
|
||||
warm invalid-init rollback; direct/recursive variant equivalence; exact
|
||||
production, support, and generated-main task ordering; complete normalized
|
||||
production, support, ptest-before-pxtest-before-main task ordering, exactly-once
|
||||
package/dependency initialization in one dispatcher; complete normalized
|
||||
rejection diagnostics; dangling staging/rollback no-follow rejection; and
|
||||
checked compiler-output failure/non-regular-destination rollback; and
|
||||
bounded-memory allocation-failure parity under one shared ceiling supplied by
|
||||
the repository-built `sep-limitexec` helper.
|
||||
bounded-memory Cstage/WWstage allocation-failure parity across the complete
|
||||
combined package-test graph, under independently discovered ceilings supplied
|
||||
by the repository-built `sep-limitexec` helper.
|
||||
|
||||
`ww build`, an explicit single-file `ww test -o <stem>`, and each successful
|
||||
directory-package `ww test -c` build publish `<stem>.sepwork` as a caller-owned
|
||||
@@ -330,9 +346,11 @@ create false reuse or a mixed generation; a successful executable link still
|
||||
reruns when required. One workdir serves one invocation at a time and may hold
|
||||
the complete command-global action universe for all selected roots and isolated
|
||||
variants; semantic identity, rather than request shape, controls reuse. Both
|
||||
driver stages implement the identical contract. This is build staleness in the
|
||||
driver stages implement the identical contract. Test-mode persistent workdirs
|
||||
use format 19. This is build staleness in the
|
||||
Make/mk/Go sense, not a result cache:
|
||||
tests always run, and the byte-identity and bootstrap gates keep building on
|
||||
real directory test products always run, while no-selected-test directories do
|
||||
not create a process. The byte-identity and bootstrap gates keep building on
|
||||
fresh scratch. `make clean` reclaims every workdir under `out/`.
|
||||
|
||||
On a package or tree target, `ww build/test -w DIR` forwards that exact caller
|
||||
|
||||
Reference in New Issue
Block a user