authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-01-17 22:17:02-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-01-17 22:17:02-07:00
log4938fb8f5ca9551b69036fdb644103ffc9ef49cf
treea0a8ca5d609b0c21894504316dd669d371cb82b2
parent4d05f2ae5f7b79f8abb4aa07d846a46470ffdb1a

test runner: stage2 llvm backend prints stats


1 files changed, 32 insertions(+), 3 deletions(-)

lib/std/special/test_runner.zig+32-3
...@@ -132,16 +132,45 @@ pub fn log(...@@ -132,16 +132,45 @@ pub fn log(
132}132}
133133
134pub fn main2() anyerror!void {134pub fn main2() anyerror!void {
135 var bad = false;135 var skipped: usize = 0;
136 var failed: usize = 0;
136 // Simpler main(), exercising fewer language features, so that stage2 can handle it.137 // Simpler main(), exercising fewer language features, so that stage2 can handle it.
137 for (builtin.test_functions) |test_fn| {138 for (builtin.test_functions) |test_fn| {
138 test_fn.func() catch |err| {139 test_fn.func() catch |err| {
139 if (err != error.SkipZigTest) {140 if (err != error.SkipZigTest) {
140 bad = true;141 failed += 1;
142 } else {
143 skipped += 1;
141 }144 }
142 };145 };
143 }146 }
144 if (bad) {147 if (builtin.zig_backend == .stage2_llvm) {
148 const passed = builtin.test_functions.len - skipped - failed;
149 const stderr = std.io.getStdErr();
150 writeInt(stderr, passed) catch {};
151 stderr.writeAll(" passed; ") catch {};
152 writeInt(stderr, skipped) catch {};
153 stderr.writeAll(" skipped; ") catch {};
154 writeInt(stderr, failed) catch {};
155 stderr.writeAll(" failed.\n") catch {};
156 }
157 if (failed != 0) {
145 return error.TestsFailed;158 return error.TestsFailed;
146 }159 }
147}160}
161
162fn writeInt(stderr: std.fs.File, int: usize) anyerror!void {
163 const base = 10;
164 var buf: [100]u8 = undefined;
165 var a: usize = int;
166 var index: usize = buf.len;
167 while (true) {
168 const digit = a % base;
169 index -= 1;
170 buf[index] = std.fmt.digitToChar(@intCast(u8, digit), .lower);
171 a /= base;
172 if (a == 0) break;
173 }
174 const slice = buf[index..];
175 try stderr.writeAll(slice);
176}