From dc44baf763f38ba3735d45fc4f633cac13949b0e Mon Sep 17 00:00:00 2001 From: Robin Voetter Date: Sun, 8 Oct 2023 17:02:59 +0200 Subject: [PATCH] std.testing: allow print() at comptime This allows functions like expectEqual to be performed at comptime. If an error is detected, the result is logged via a compile error. --- lib/std/testing.zig | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/std/testing.zig b/lib/std/testing.zig index 4dda8a0d0d..d4d162721d 100644 --- a/lib/std/testing.zig +++ b/lib/std/testing.zig @@ -22,10 +22,14 @@ pub var base_allocator_instance = std.heap.FixedBufferAllocator.init(""); pub var log_level = std.log.Level.warn; fn print(comptime fmt: []const u8, args: anytype) void { - // Disable printing in tests for simple backends. - if (builtin.zig_backend == .stage2_spirv64) return; + if (@inComptime()) { + @compileError(std.fmt.comptimePrint(fmt, args)); + } else { + // Disable printing in tests for simple backends. + if (builtin.zig_backend == .stage2_spirv64) return; - std.debug.print(fmt, args); + std.debug.print(fmt, args); + } } /// This function is intended to be used only in tests. It prints diagnostics to stderr