lib misc+ww tests: hand-main plumbing -> assert (@test conversion B7)
toktest documents the per-row signalled pinpoint loss.
This commit is contained in:
@@ -26,19 +26,6 @@ import io;
|
||||
import memio;
|
||||
import strings;
|
||||
|
||||
// Direct exit(2) binding rather than `use os;` — os exports
|
||||
// read/write/close, mirroring memio's reasoning (task #7).
|
||||
@symbol("rt_syscall") fn syscall1ww(num: i64, a: i64) i64;
|
||||
fn doexit(code: i32) void = {
|
||||
syscall1ww(60i64, code: i64);
|
||||
};
|
||||
|
||||
// signalled — bumped by main before each test so a failing exit code
|
||||
// pinpoints the offending case.
|
||||
let signalled: i32 = 0;
|
||||
|
||||
fn fail() void = { doexit(signalled + 10); };
|
||||
|
||||
fn streq(a: str, b: str) bool = {
|
||||
if (a.len != b.len) { return false; };
|
||||
let i: i32 = 0;
|
||||
@@ -68,10 +55,10 @@ fn streq(a: str, b: str) bool = {
|
||||
let r: (void | getopt.error) = getopt.tryparse(&cmd, argv[0:3], helps[0:5]);
|
||||
match (r) {
|
||||
case void => {};
|
||||
case let e: getopt.error => fail();
|
||||
case let e: getopt.error => abort();
|
||||
};
|
||||
|
||||
if (cmd.optslen != 4) { fail(); };
|
||||
assert(!(cmd.optslen != 4));
|
||||
|
||||
// (wantflag, wantval) parallel arrays, indexed by option order.
|
||||
let wantf: [4]u8;
|
||||
@@ -84,13 +71,13 @@ fn streq(a: str, b: str) bool = {
|
||||
let i: i32 = 0;
|
||||
for (i < 4) {
|
||||
let p: *getopt.option = &cmd.optsptr[i];
|
||||
if ((p.flag: u8) != wantf[i]) { fail(); };
|
||||
if (!streq(p.value, wantv[i])) { fail(); };
|
||||
assert(!((p.flag: u8) != wantf[i]));
|
||||
assert(!(!streq(p.value, wantv[i])));
|
||||
i += 1;
|
||||
};
|
||||
|
||||
if (cmd.argslen != 1) { fail(); };
|
||||
if (!streq(cmd.argsptr[0], "files.txt")) { fail(); };
|
||||
assert(!(cmd.argslen != 1));
|
||||
assert(!(!streq(cmd.argsptr[0], "files.txt")));
|
||||
|
||||
getopt.finish(&cmd);
|
||||
};
|
||||
@@ -114,10 +101,10 @@ fn streq(a: str, b: str) bool = {
|
||||
let r: (void | getopt.error) = getopt.tryparse(&cmd, argv[0:5], helps[0:3]);
|
||||
match (r) {
|
||||
case void => {};
|
||||
case let e: getopt.error => fail();
|
||||
case let e: getopt.error => abort();
|
||||
};
|
||||
|
||||
if (cmd.optslen != 2) { fail(); };
|
||||
assert(!(cmd.optslen != 2));
|
||||
|
||||
let wantf: [2]u8;
|
||||
let wantv: [2]str;
|
||||
@@ -127,13 +114,13 @@ fn streq(a: str, b: str) bool = {
|
||||
let i: i32 = 0;
|
||||
for (i < 2) {
|
||||
let p: *getopt.option = &cmd.optsptr[i];
|
||||
if ((p.flag: u8) != wantf[i]) { fail(); };
|
||||
if (!streq(p.value, wantv[i])) { fail(); };
|
||||
assert(!((p.flag: u8) != wantf[i]));
|
||||
assert(!(!streq(p.value, wantv[i])));
|
||||
i += 1;
|
||||
};
|
||||
|
||||
if (cmd.argslen != 1) { fail(); };
|
||||
if (!streq(cmd.argsptr[0], "-")) { fail(); };
|
||||
assert(!(cmd.argslen != 1));
|
||||
assert(!(!streq(cmd.argsptr[0], "-")));
|
||||
|
||||
getopt.finish(&cmd);
|
||||
};
|
||||
@@ -177,12 +164,12 @@ fn streq(a: str, b: str) bool = {
|
||||
let r: (void | getopt.error) = getopt.tryparse(&cmd, argv, helps[0:2]);
|
||||
match (r) {
|
||||
case void => {};
|
||||
case let e: getopt.error => fail();
|
||||
case let e: getopt.error => abort();
|
||||
};
|
||||
if (cmd.optslen != wantopts[i]) { fail(); };
|
||||
if (cmd.argslen != wantargs[i]) { fail(); };
|
||||
assert(!(cmd.optslen != wantopts[i]));
|
||||
assert(!(cmd.argslen != wantargs[i]));
|
||||
if (cmd.argslen > 0) {
|
||||
if (!streq(cmd.argsptr[0], wantarg0[i])) { fail(); };
|
||||
assert(!(!streq(cmd.argsptr[0], wantarg0[i])));
|
||||
};
|
||||
getopt.finish(&cmd);
|
||||
i += 1;
|
||||
@@ -204,18 +191,18 @@ fn streq(a: str, b: str) bool = {
|
||||
let r: (void | getopt.error) = getopt.tryparse(&cmd, argv[0:2], helps[0:2]);
|
||||
match (r) {
|
||||
case void => {};
|
||||
case let e: getopt.error => fail();
|
||||
case let e: getopt.error => abort();
|
||||
};
|
||||
|
||||
if (cmd.optslen != 3) { fail(); };
|
||||
assert(!(cmd.optslen != 3));
|
||||
let i: i32 = 0;
|
||||
for (i < 3) {
|
||||
let p: *getopt.option = &cmd.optsptr[i];
|
||||
if ((p.flag: u8) != ('v': u8)) { fail(); };
|
||||
if (p.value.len != 0) { fail(); };
|
||||
assert(!((p.flag: u8) != ('v': u8)));
|
||||
assert(!(p.value.len != 0));
|
||||
i += 1;
|
||||
};
|
||||
if (cmd.argslen != 0) { fail(); };
|
||||
assert(!(cmd.argslen != 0));
|
||||
|
||||
getopt.finish(&cmd);
|
||||
};
|
||||
@@ -257,13 +244,13 @@ fn streq(a: str, b: str) bool = {
|
||||
let r: (void | getopt.error) = getopt.tryparse(&cmd, argv, helps[0:2]);
|
||||
match (r) {
|
||||
case void => {};
|
||||
case let e: getopt.error => fail();
|
||||
case let e: getopt.error => abort();
|
||||
};
|
||||
if (cmd.optslen != wantopts[i]) { fail(); };
|
||||
if (cmd.argslen != wantargs[i]) { fail(); };
|
||||
assert(!(cmd.optslen != wantopts[i]));
|
||||
assert(!(cmd.argslen != wantargs[i]));
|
||||
// First positional is always the bare "-" in these rows.
|
||||
if (cmd.argslen > 0) {
|
||||
if (!streq(cmd.argsptr[0], "-")) { fail(); };
|
||||
assert(!(!streq(cmd.argsptr[0], "-")));
|
||||
};
|
||||
getopt.finish(&cmd);
|
||||
i += 1;
|
||||
@@ -307,11 +294,11 @@ fn streq(a: str, b: str) bool = {
|
||||
let cmd: getopt.command;
|
||||
let r: (void | getopt.error) = getopt.tryparse(&cmd, argv, helps[0:3]);
|
||||
match (r) {
|
||||
case void => fail();
|
||||
case void => abort();
|
||||
case let e: getopt.error => {
|
||||
if ((e.kind: i32) != wantk[i]) { fail(); };
|
||||
if ((e.flag: u8) != wantf[i]) { fail(); };
|
||||
if (!streq(e.name, "prog")) { fail(); };
|
||||
assert(!((e.kind: i32) != wantk[i]));
|
||||
assert(!((e.flag: u8) != wantf[i]));
|
||||
assert(!(!streq(e.name, "prog")));
|
||||
};
|
||||
};
|
||||
getopt.finish(&cmd);
|
||||
@@ -340,7 +327,7 @@ fn streq(a: str, b: str) bool = {
|
||||
e.flag = flags[i]: rune;
|
||||
e.name = names[i];
|
||||
let s: str = getopt.strerror(&e);
|
||||
if (!streq(s, wants[i])) { fail(); };
|
||||
assert(!(!streq(s, wants[i])));
|
||||
i += 1;
|
||||
};
|
||||
};
|
||||
@@ -381,12 +368,12 @@ fn streq(a: str, b: str) bool = {
|
||||
let r: (void | getopt.error) = getopt.tryparse(&cmd, argv, helps[0:2]);
|
||||
match (r) {
|
||||
case void => {};
|
||||
case let e: getopt.error => fail();
|
||||
case let e: getopt.error => abort();
|
||||
};
|
||||
if (cmd.optslen != 0) { fail(); };
|
||||
if (cmd.argslen != wantargs[i]) { fail(); };
|
||||
assert(!(cmd.optslen != 0));
|
||||
assert(!(cmd.argslen != wantargs[i]));
|
||||
if (cmd.argslen > 0) {
|
||||
if (!streq(cmd.argsptr[0], wantarg0[i])) { fail(); };
|
||||
assert(!(!streq(cmd.argsptr[0], wantarg0[i])));
|
||||
};
|
||||
getopt.finish(&cmd);
|
||||
i += 1;
|
||||
@@ -439,10 +426,10 @@ fn streq(a: str, b: str) bool = {
|
||||
hs.cap = hcnt[i];
|
||||
match (getopt.printusage(h, names[i], hs)) {
|
||||
case void => {};
|
||||
case let e: io.error => fail();
|
||||
case let e: io.error => abort();
|
||||
};
|
||||
let got: str = memio.string(&ms);
|
||||
if (!streq(got, wants[i])) { fail(); };
|
||||
assert(!(!streq(got, wants[i])));
|
||||
i += 1;
|
||||
};
|
||||
};
|
||||
@@ -482,24 +469,24 @@ fn streq(a: str, b: str) bool = {
|
||||
let h: io.handle = s: io.handle;
|
||||
match (getopt.printhelp(h, names[i], helps[0:hcnt[i]])) {
|
||||
case void => {};
|
||||
case let e: io.error => fail();
|
||||
case let e: io.error => abort();
|
||||
};
|
||||
let got: str = memio.string(&ms);
|
||||
if (!streq(got, wants[i])) { fail(); };
|
||||
assert(!(!streq(got, wants[i])));
|
||||
i += 1;
|
||||
};
|
||||
};
|
||||
|
||||
export fn main() i32 = {
|
||||
signalled = 1; flagcluster();
|
||||
signalled = 2; paramflag();
|
||||
signalled = 3; separator();
|
||||
signalled = 4; repeatedflag();
|
||||
signalled = 5; baredash();
|
||||
signalled = 6; errortable();
|
||||
signalled = 7; strerrortext();
|
||||
signalled = 8; nooptionsbare();
|
||||
signalled = 9; printusage_cases();
|
||||
signalled = 10; printhelp_cases();
|
||||
flagcluster();
|
||||
paramflag();
|
||||
separator();
|
||||
repeatedflag();
|
||||
baredash();
|
||||
errortable();
|
||||
strerrortext();
|
||||
nooptionsbare();
|
||||
printusage_cases();
|
||||
printhelp_cases();
|
||||
return 0;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user