/* * 989_regex_run — execute BOTH lib/regex @test halves under the C-side * `ww test` driver and assert exit 0: * 1. lib/regex/regex_test.ww — BLACK-BOX, package regex_test. * 2. lib/regex/wb/regex_test.ww — the WHITE-BOX driver (#9): its * `import regex` dir-resolves and bundles lib/regex/regex_whitebox.ww * (package regex), so -T collects the in-package engine probes. * Both are main-less @test files; -T synthesizes the entry, runs the * fork-per-test record-and-continue harness, and exits nonzero iff any * @test fails. * * Sibling to 984_base64_run / 989_sha256_run (9xx is full so this * shares the 989 prefix — the `short` name keys the binary, cf the * 949_* / 989_sha256 precedent). */ #include #include #include #include static int runwait(const char *cmd) { int rc = system(cmd); if (rc == -1) return -1; if (WIFEXITED(rc)) return WEXITSTATUS(rc); return 1; } int main(void) { const char *bin = getenv("BIN"); if (!bin) bin = "out/bin"; char absbin[1024]; if (bin[0] != '/') { char cwd[1024]; if (getcwd(cwd, sizeof cwd) == NULL) return 1; snprintf(absbin, sizeof absbin, "%s/%s", cwd, bin); bin = absbin; } char cwd[1024]; if (getcwd(cwd, sizeof cwd) == NULL) return 1; const char *srcs[] = { "lib/regex/regex_test.ww", "lib/regex/wb/regex_test.ww", }; for (size_t i = 0; i < sizeof srcs / sizeof srcs[0]; i++) { const char *src = srcs[i]; char path[1024], cmd[2048]; snprintf(path, sizeof path, "%s/%s", cwd, src); /* timeout 180 per repo convention (732/775; test/run does not * bound runtime): the fold-2c zero-length findall rows turn a * regression of the ha:946-952 rune-advancement guard into an * infinite loop (frees are no-ops, so OOM is the only other * exit) — timeout converts the hang into a loud 124. */ snprintf(cmd, sizeof cmd, "timeout 180 %s/ww test %s", bin, path); int rc = runwait(cmd); if (rc != 0) { fprintf(stderr, "regex_run FAIL: %s exited %d\n", src, rc); return 1; } printf("regex_run: %s ok\n", src); } return 0; }