feature. See also
. The project being documented here (as the example) is the Zig library itself.
DepTokenizer.depTokenizer
fn depTokenizer(input: []const u8, expect: []const u8) !void
File
Code
fn depTokenizer(input: []const u8, expect: []const u8) !void {
var arena_allocator = std.heap.ArenaAllocator.init(std.testing.allocator);
const arena = arena_allocator.allocator();
defer arena_allocator.deinit();
var it: Tokenizer = .{ .bytes = input };
var buffer: std.ArrayList(u8) = .empty;
var resolve_buf: std.ArrayList(u8) = .empty;
var i: usize = 0;
while (it.next()) |token| {
if (i != 0) try buffer.appendSlice(arena, "\n");
switch (token) {
.target, .prereq => |bytes| {
try buffer.appendSlice(arena, @tagName(token));
try buffer.appendSlice(arena, " = {");
for (bytes) |b| {
try buffer.append(arena, printable_char_tab[b]);
}
try buffer.appendSlice(arena, "}");
},
.target_must_resolve => {
try buffer.appendSlice(arena, "target = {");
try token.resolve(arena, &resolve_buf);
for (resolve_buf.items) |b| {
try buffer.append(arena, printable_char_tab[b]);
}
resolve_buf.items.len = 0;
try buffer.appendSlice(arena, "}");
},
.prereq_must_resolve => {
try buffer.appendSlice(arena, "prereq = {");
try token.resolve(arena, &resolve_buf);
for (resolve_buf.items) |b| {
try buffer.append(arena, printable_char_tab[b]);
}
resolve_buf.items.len = 0;
try buffer.appendSlice(arena, "}");
},
else => {
try buffer.appendSlice(arena, "ERROR: ");
try token.printError(arena, &buffer);
break;
},
}
i += 1;
}
if (std.mem.eql(u8, expect, buffer.items)) {
try testing.expect(true);
return;
}
try testing.expectEqualStrings(expect, buffer.items);
}