aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-01-17 22:17:02 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-01-17 22:17:02 -0700
commit4938fb8f5ca9551b69036fdb644103ffc9ef49cf (patch)
treea0a8ca5d609b0c21894504316dd669d371cb82b2 /lib
parent4d05f2ae5f7b79f8abb4aa07d846a46470ffdb1a (diff)
downloadzig-4938fb8f5ca9551b69036fdb644103ffc9ef49cf.tar.gz
zig-4938fb8f5ca9551b69036fdb644103ffc9ef49cf.zip
test runner: stage2 llvm backend prints stats
Diffstat (limited to 'lib')
-rw-r--r--lib/std/special/test_runner.zig35
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);
+}