detect_test.zig
$ zig test detect_test.zig
1/1 test "builtin.is_test"... OK
All 1 tests passed.
Zig has lazy top level declaration analysis, which means that if a function is not called, or otherwise used, it is not analyzed. This means that there may be an undiscovered compile error in a function because it is never called.
$ zig test unused_fn.zig
All 1 tests passed.
Note that, while in Debug and modes, unreachable emits a call to , in ReleaseFast and modes, it is really undefined behavior. The implementation of is as simple as:
This means that when testing in ReleaseFast or ReleaseSmall mode, assert
is not sufficient to check the result of a computation:
const std = @import("std");
const assert = std.debug.assert;
assert(false);
}
Better practice for checking the output when testing is to use :
test.zig
$ zig test test.zig -O ReleaseFast
1/1 test "expect in release fast mode"... test failure
docgen_tmp/zig-cache/o/cb6de32279940f36da16caa4f64d8c67/test
zig test
has a few command line parameters which affect the compilation. See zig --help
for a full list. The most interesting one is . This makes the test build only include tests whose name contains the supplied filter text. Again, thanks to lazy analysis, this can allow you to narrow a build to only a few functions in isolation.