diff options
Diffstat (limited to 'lib/std')
| -rw-r--r-- | lib/std/special/test_runner.zig | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/lib/std/special/test_runner.zig b/lib/std/special/test_runner.zig index 22edaf7bed..fe20e10141 100644 --- a/lib/std/special/test_runner.zig +++ b/lib/std/special/test_runner.zig @@ -132,16 +132,45 @@ pub fn log( } pub fn main2() anyerror!void { - var bad = false; + var skipped: usize = 0; + var failed: usize = 0; // Simpler main(), exercising fewer language features, so that stage2 can handle it. for (builtin.test_functions) |test_fn| { test_fn.func() catch |err| { if (err != error.SkipZigTest) { - bad = true; + failed += 1; + } else { + skipped += 1; } }; } - if (bad) { + if (builtin.zig_backend == .stage2_llvm) { + const passed = builtin.test_functions.len - skipped - failed; + const stderr = std.io.getStdErr(); + writeInt(stderr, passed) catch {}; + stderr.writeAll(" passed; ") catch {}; + writeInt(stderr, skipped) catch {}; + stderr.writeAll(" skipped; ") catch {}; + writeInt(stderr, failed) catch {}; + stderr.writeAll(" failed.\n") catch {}; + } + if (failed != 0) { return error.TestsFailed; } } + +fn writeInt(stderr: std.fs.File, int: usize) anyerror!void { + const base = 10; + var buf: [100]u8 = undefined; + var a: usize = int; + var index: usize = buf.len; + while (true) { + const digit = a % base; + index -= 1; + buf[index] = std.fmt.digitToChar(@intCast(u8, digit), .lower); + a /= base; + if (a == 0) break; + } + const slice = buf[index..]; + try stderr.writeAll(slice); +} |
