Simpler main(), exercising fewer language features, so that work-in-progress backends can handle it.
pub fn mainSimple() anyerror!void
pub fn mainSimple() anyerror!void {
@disableInstrumentation();
// is the backend capable of calling `Io.File.writeAll`?
const enable_write = switch (builtin.zig_backend) {
.stage2_aarch64, .stage2_riscv64 => true,
else => false,
};
// is the backend capable of calling `Io.Writer.print`?
const enable_print = switch (builtin.zig_backend) {
.stage2_aarch64, .stage2_riscv64 => true,
else => false,
};
testing.io_instance = .init(testing.allocator, .{});
var passed: u64 = 0;
var skipped: u64 = 0;
var failed: u64 = 0;
// we don't want to bring in File and Writer if the backend doesn't support it
const stdout = if (enable_write) Io.File.stdout() else {};
for (builtin.test_functions) |test_fn| {
if (enable_write) {
stdout.writeStreamingAll(runner_threaded_io, test_fn.name) catch {};
stdout.writeStreamingAll(runner_threaded_io, "... ") catch {};
}
if (test_fn.func()) |_| {
if (enable_write) stdout.writeStreamingAll(runner_threaded_io, "PASS\n") catch {};
} else |err| {
if (err != error.SkipZigTest) {
if (enable_write) stdout.writeStreamingAll(runner_threaded_io, "FAIL\n") catch {};
failed += 1;
if (!enable_write) return err;
continue;
}
if (enable_write) stdout.writeStreamingAll(runner_threaded_io, "SKIP\n") catch {};
skipped += 1;
continue;
}
passed += 1;
}
if (enable_print) {
var unbuffered_stdout_writer = stdout.writer(runner_threaded_io, &.{});
unbuffered_stdout_writer.interface.print(
"{} passed, {} skipped, {} failed\n",
.{ passed, skipped, failed },
) catch {};
}
if (failed != 0) std.process.exit(1);
}