mirror of
https://github.com/ziglang/zig.git
synced 2026-01-24 00:05:28 +00:00
breaking change to the fuzz testing API; it now passes a type-safe context parameter to the fuzz function. libfuzzer is reworked to select inputs from the entire corpus. I tested that it's roughly as good as it was before in that it can find the panics in the simple examples, as well as achieve decent coverage on the tokenizer fuzz test. however I think the next step here will be figuring out why so many points of interest are missing from the tokenizer in both Debug and ReleaseSafe modes. does not quite close #20803 yet since there are some more important things to be done, such as opening the previous corpus, continuing fuzzing after finding bugs, storing the length of the inputs, etc.
47 lines
1.7 KiB
Zig
47 lines
1.7 KiB
Zig
//! By convention, main.zig is where your main function lives in the case that
|
|
//! you are building an executable. If you are making a library, the convention
|
|
//! is to delete this file and start with root.zig instead.
|
|
|
|
pub fn main() !void {
|
|
// Prints to stderr (it's a shortcut based on `std.io.getStdErr()`)
|
|
std.debug.print("All your {s} are belong to us.\n", .{"codebase"});
|
|
|
|
// stdout is for the actual output of your application, for example if you
|
|
// are implementing gzip, then only the compressed bytes should be sent to
|
|
// stdout, not any debugging messages.
|
|
const stdout_file = std.io.getStdOut().writer();
|
|
var bw = std.io.bufferedWriter(stdout_file);
|
|
const stdout = bw.writer();
|
|
|
|
try stdout.print("Run `zig build test` to run the tests.\n", .{});
|
|
|
|
try bw.flush(); // Don't forget to flush!
|
|
}
|
|
|
|
test "simple test" {
|
|
var list = std.ArrayList(i32).init(std.testing.allocator);
|
|
defer list.deinit(); // Try commenting this out and see if zig detects the memory leak!
|
|
try list.append(42);
|
|
try std.testing.expectEqual(@as(i32, 42), list.pop());
|
|
}
|
|
|
|
test "use other module" {
|
|
try std.testing.expectEqual(@as(i32, 150), lib.add(100, 50));
|
|
}
|
|
|
|
test "fuzz example" {
|
|
const Context = struct {
|
|
fn testOne(context: @This(), input: []const u8) anyerror!void {
|
|
_ = context;
|
|
// Try passing `--fuzz` to `zig build test` and see if it manages to fail this test case!
|
|
try std.testing.expect(!std.mem.eql(u8, "canyoufindme", input));
|
|
}
|
|
};
|
|
try std.testing.fuzz(Context{}, Context.testOne, .{});
|
|
}
|
|
|
|
const std = @import("std");
|
|
|
|
/// This imports the separate module containing `root.zig`. Take a look in `build.zig` for details.
|
|
const lib = @import("$_lib");
|