Function init [src]

Prototype

pub fn init(ws: *Build.WebServer) Allocator.Error!Fuzz

Parameters

ws: *Build.WebServer

Source

pub fn init(ws: *Build.WebServer) Allocator.Error!Fuzz { const gpa = ws.gpa; const run_steps: []const *Step.Run = steps: { var steps: std.ArrayListUnmanaged(*Step.Run) = .empty; defer steps.deinit(gpa); const rebuild_node = ws.root_prog_node.start("Rebuilding Unit Tests", 0); defer rebuild_node.end(); var rebuild_wg: std.Thread.WaitGroup = .{}; defer rebuild_wg.wait(); for (ws.all_steps) |step| { const run = step.cast(Step.Run) orelse continue; if (run.producer == null) continue; if (run.fuzz_tests.items.len == 0) continue; try steps.append(gpa, run); ws.thread_pool.spawnWg(&rebuild_wg, rebuildTestsWorkerRun, .{ run, gpa, ws.ttyconf, rebuild_node }); } if (steps.items.len == 0) fatal("no fuzz tests found", .{}); rebuild_node.setEstimatedTotalItems(steps.items.len); break :steps try gpa.dupe(*Step.Run, steps.items); }; errdefer gpa.free(run_steps); for (run_steps) |run| { assert(run.fuzz_tests.items.len > 0); if (run.rebuilt_executable == null) fatal("one or more unit tests failed to be rebuilt in fuzz mode", .{}); } return .{ .ws = ws, .run_steps = run_steps, .wait_group = .{}, .prog_node = .none, .coverage_files = .empty, .coverage_mutex = .{}, .queue_mutex = .{}, .queue_cond = .{}, .msg_queue = .empty, }; }