| ... | ... | @@ -132,16 +132,45 @@ pub fn log( |
| 132 | 132 | } |
| 133 | 133 | |
| 134 | 134 | pub fn main2() anyerror!void { |
| 135 | | var bad = false; |
| 135 | var skipped: usize = 0; |
| 136 | var failed: usize = 0; |
| 136 | 137 | // Simpler main(), exercising fewer language features, so that stage2 can handle it. |
| 137 | 138 | for (builtin.test_functions) |test_fn| { |
| 138 | 139 | test_fn.func() catch |err| { |
| 139 | 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 | 158 | return error.TestsFailed; |
| 146 | 159 | } |
| 147 | 160 | } |
| 161 | |
| 162 | fn 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 | } |