feature. See also
. The project being documented here (as the example) is the Zig library itself.
Compress.testFuzzedMatchLen
fn testFuzzedMatchLen(_: void, smith: *std.testing.Smith) !void
File
Code
fn testFuzzedMatchLen(_: void, smith: *std.testing.Smith) !void {
@disableInstrumentation();
var buf: [1024]u8 = undefined;
var w: Writer = .fixed(&buf);
while (w.unusedCapacityLen() != 0 and !smith.eosWeightedSimple(7, 1)) {
switch (smith.value(enum(u2) { splat, copy, insert })) {
.splat => w.splatByteAll(
smith.value(u8),
smith.valueRangeAtMost(u9, 1, @min(511, w.unusedCapacityLen())),
) catch unreachable,
.copy => write: {
if (w.buffered().len == 0) continue;
const start = smith.valueRangeAtMost(u10, 0, @intCast(w.buffered().len - 1));
const max_len = @min(w.unusedCapacityLen(), w.buffered().len - start);
const len = smith.valueRangeAtMost(u10, 1, @intCast(max_len));
break :write w.writeAll(w.buffered()[start..][0..len]) catch unreachable;
},
.insert => w.advance(smith.slice(w.unusedCapacitySlice())),
}
}
w.splatByteAll(0, (1 + token.min_length) -| w.buffered().len) catch unreachable;
const max_start = w.buffered().len - token.min_length;
const bytes_off = smith.valueRangeAtMost(u10, 1, @intCast(max_start));
const prev_off = smith.valueRangeAtMost(u10, 0, bytes_off - 1);
const prev = w.buffered()[prev_off..];
const bytes = w.buffered()[bytes_off..];
const old = smith.valueRangeLessThan(u10, 0, @min(bytes.len, token.max_length));
const diff_index = mem.findDiff(u8, prev, bytes).?;
const expected_len = @min(diff_index, 258);
errdefer std.debug.print(
\\prev : '{any}'
\\bytes: '{any}'
\\old : {}
\\expected: {?}
\\actual : {}
++ "\n", .{
prev, bytes, old,
if (old < expected_len) expected_len else null, betterMatchLen(old, prev, bytes),
});
if (old < expected_len) {
try std.testing.expectEqual(expected_len, betterMatchLen(old, prev, bytes));
} else {
try std.testing.expect(betterMatchLen(old, prev, bytes) <= old);
}
}