/* * 900_stdlib — verify each stdlib module parses, type-checks, and * codegens. We don't link or run them; they exist for downstream * users to import. As real applications come online they will start * exercising the bodies through the e2e harness. */ #include #include #include #include static const char *modules[] = { "lib/types/types.ww", "lib/ascii/ascii.ww", "lib/io/io.ww", "lib/strconv/strconv.ww", "lib/sort/sort.ww", "lib/encoding/utf8/utf8.ww", "lib/encoding/base32/base32.ww", "lib/hash/fnv/fnv.ww", "lib/hash/adler32/adler32.ww", "lib/hash/crc16/crc16.ww", "lib/hash/crc32/crc32.ww", "lib/hash/crc64/crc64.ww", "lib/hash/siphash/siphash.ww", "lib/math/random/random.ww", "lib/time/time.ww", "lib/c/libc/libc.ww", /* lib/bufio/bufio.ww, lib/bytes/bytes.ww, lib/errors/errors.ww, * lib/fmt/fmt.ww, lib/os/os.ww, and lib/strings/strings.ww moved * off this list: each has cross-module type refs that only resolve * once the driver concatenates `use`d modules. bufio / fmt * graduated to io.stream-based sinks (io.stream = *io.vtable, * io.eof, io.error); lib/os carries time.instant in filestat * post-Commit B; lib/errors.errno references os.errno / os.E* / * os.strerror (ww folds Hare's sys role into os); lib/strings.iterator * + lib/strings.next reference utf8.decoder / utf8.done; * lib/bytes.tokenize references the assert builtin + types.I64_MAX/MIN per * ref/hare/bytes/tokenize.ha:23-24,42-43; lib/encoding/hex and * lib/encoding/base64 graduated to Hare's io-streaming surface * (hex references io.handle / fmt.fprint / memio.dynamic / strconv / * errors.invalid; base64 references io.handle / memio.dynamic / * bytes.zero / strings.frombytes / errors.invalid); lib/path.path * is import-dependent post-c2-stack realignment ([MAX]u8 via * os.PATH_MAX def-dim + match over imported path error types). * Coverage lives at * lib/bufio/bufiotest.ww + lib/bytes/bytestest.ww + * lib/errors/errnotest.ww + lib/fmt/fmttest.ww + lib/os/stattest.ww * + lib/strings/stringstest.ww + lib/encoding/hex/hextest.ww + * lib/encoding/base64/base64_test.ww (wired at 998_bufio_run.c, * 967_bytes_run.c, 902_errno_run.c, 970_fmt_run.c, 976_stat_run.c, * 966_strings_run.c, 979_hex_run.c, 984_base64_run.c) + path at * lib/path/pathtest.ww (989_path_run.c), plus the * bufio.scanline / fmt.println e2e rows in test/wcc/700_e2e.c. */ "lib/net/net.ww", NULL }; 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; int n = 0, fail = 0; for (int i = 0; modules[i]; i++, n++) { char path[1024], cmd[2048]; snprintf(path, sizeof path, "%s/%s", cwd, modules[i]); snprintf(cmd, sizeof cmd, "%s/w6c %s > /dev/null 2>&1", bin, path); int rc = system(cmd); if (rc != 0) { fprintf(stderr, "stdlib FAIL: %s (rc=%d)\n", modules[i], rc); fail++; } } if (fail) { fprintf(stderr, "%d/%d stdlib modules failed\n", fail, n); return 1; } printf("stdlib: %d/%d ok\n", n, n); return 0; }