lib/io tests: hand-main plumbing -> assert (@test conversion B5)

This commit is contained in:
2026-06-10 18:52:53 +09:00
parent 612e6d149c
commit e8096e68e1
5 changed files with 492 additions and 531 deletions

View File

@@ -15,13 +15,6 @@ import fmt;
import io;
import log;
import memio;
import os;
// signalled — bumped before each scenario so a failing exit code
// pinpoints the offending case.
let signalled: i32 = 0;
fn fail() void = { os.exit(signalled + 10); };
fn streq(a: str, b: str) bool = {
if (a.len != b.len) { return false; };
@@ -48,10 +41,10 @@ fn streq(a: str, b: str) bool = {
let s = &mem.vt;
let sl = log.new(s); // triggers ensureinit
if (log.silent == nil) { fail(); };
if (log.default == nil) { fail(); };
if (log.global == nil) { fail(); };
if (log.global != log.default) { fail(); };
assert(!(log.silent == nil));
assert(!(log.default == nil));
assert(!(log.global == nil));
assert(!(log.global != log.default));
};
// ---- lprintln to a memio sink: exact-byte assertion -------------------
@@ -65,7 +58,7 @@ fn streq(a: str, b: str) bool = {
log.lprintln(&sl.logger, "hello", 42i64);
if (!streq(memio.string(&mem), "hello 42\n")) { fail(); };
assert(!(!streq(memio.string(&mem), "hello 42\n")));
};
// ---- lprintln single-arg: no leading space, just trailing newline -----
@@ -79,7 +72,7 @@ fn streq(a: str, b: str) bool = {
log.lprintln(&sl.logger, "only");
if (!streq(memio.string(&mem), "only\n")) { fail(); };
assert(!(!streq(memio.string(&mem), "only\n")));
};
// ---- lprintln zero args: bare newline ---------------------------------
@@ -93,7 +86,7 @@ fn streq(a: str, b: str) bool = {
log.lprintln(&sl.logger);
if (!streq(memio.string(&mem), "\n")) { fail(); };
assert(!(!streq(memio.string(&mem), "\n")));
};
// ---- silent: lprintln through log.silent writes no bytes --------------
@@ -111,11 +104,11 @@ fn streq(a: str, b: str) bool = {
let sl = log.new(s); // triggers log.ensureinit; populates log.silent
if (log.silent == nil) { fail(); };
assert(!(log.silent == nil));
log.lprintln(log.silent, "ignored", 1i64, true);
if (mem.pos != 0) { fail(); };
assert(!(mem.pos != 0));
};
// ---- setlogger swap: global redirects to a new sink, then to silent --
@@ -137,20 +130,20 @@ fn streq(a: str, b: str) bool = {
log.setlogger(&sl1.logger);
log.println("first");
if (!streq(memio.string(&mem1), "first\n")) { fail(); };
if (mem2.pos != 0) { fail(); };
assert(!(!streq(memio.string(&mem1), "first\n")));
assert(!(mem2.pos != 0));
log.setlogger(&sl2.logger);
log.println("second");
if (!streq(memio.string(&mem2), "second\n")) { fail(); };
assert(!(!streq(memio.string(&mem2), "second\n")));
// mem1 must be unchanged.
if (!streq(memio.string(&mem1), "first\n")) { fail(); };
assert(!(!streq(memio.string(&mem1), "first\n")));
log.setlogger(log.silent);
log.println("dropped");
// Both sinks unchanged.
if (!streq(memio.string(&mem1), "first\n")) { fail(); };
if (!streq(memio.string(&mem2), "second\n")) { fail(); };
assert(!(!streq(memio.string(&mem1), "first\n")));
assert(!(!streq(memio.string(&mem2), "second\n")));
};
// ---- lprintfln: {n}-placeholder render into a memio sink -------------
@@ -164,7 +157,7 @@ fn streq(a: str, b: str) bool = {
log.lprintfln(&sl.logger, "x={} y={}", 42i64, "hi");
if (!streq(memio.string(&mem), "x=42 y=hi\n")) { fail(); };
assert(!(!streq(memio.string(&mem), "x=42 y=hi\n")));
};
// ---- printfln through global: setlogger then dispatch ---------------
@@ -184,8 +177,8 @@ fn streq(a: str, b: str) bool = {
log.setlogger(&sl1.logger);
log.printfln("v={}", 7i64);
if (!streq(memio.string(&mem1), "v=7\n")) { fail(); };
if (mem2.pos != 0) { fail(); };
assert(!(!streq(memio.string(&mem1), "v=7\n")));
assert(!(mem2.pos != 0));
};
// ---- silent.printfln writes nothing ---------------------------------
@@ -200,11 +193,11 @@ fn streq(a: str, b: str) bool = {
let sl = log.new(s); // triggers log.ensureinit; populates log.silent
if (log.silent == nil) { fail(); };
assert(!(log.silent == nil));
log.lprintfln(log.silent, "ignored={}", 1i64);
if (mem.pos != 0) { fail(); };
assert(!(mem.pos != 0));
};
// ---- lprintfln: indexed {N} placeholder across log → fmt seam -------
@@ -221,7 +214,7 @@ fn streq(a: str, b: str) bool = {
log.lprintfln(&sl.logger, "{1} {0}", "a", "b");
if (!streq(memio.string(&mem), "b a\n")) { fail(); };
assert(!(!streq(memio.string(&mem), "b a\n")));
};
// ---- lprintfln: {:mods} modifier across log → fmt seam --------------
@@ -237,7 +230,7 @@ fn streq(a: str, b: str) bool = {
log.lprintfln(&sl.logger, "{:5}", 42i64);
if (!streq(memio.string(&mem), " 42\n")) { fail(); };
assert(!(!streq(memio.string(&mem), " 42\n")));
};
// TODO subprocess: log.fatal / log.lfatal / log.fatalf / log.lfatalf
@@ -247,16 +240,16 @@ fn streq(a: str, b: str) bool = {
// when that lands.
export fn main() i32 = {
signalled = 1; defaultwiredtoglobal();
signalled = 2; lprintlnbasic();
signalled = 3; lprintlnsingle();
signalled = 4; lprintlnempty();
signalled = 5; silentwritesnothing();
signalled = 6; setloggerswap();
signalled = 7; lprintflnbasic();
signalled = 8; printflnglobal();
signalled = 9; silentignoresprintfln();
signalled = 10; lprintflnindexed();
signalled = 11; lprintflnmods();
defaultwiredtoglobal();
lprintlnbasic();
lprintlnsingle();
lprintlnempty();
silentwritesnothing();
setloggerswap();
lprintflnbasic();
printflnglobal();
silentignoresprintfln();
lprintflnindexed();
lprintflnmods();
return 0;
};