diff --git a/README.md b/README.md index 5a5e43f..4318341 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ const programC = @import("projectC/main.zig").main; pub fn main(init: std.process.Init) !void { var sim: Simulator = undefined; - sim.init(std.heap.page_allocator, init.io); + sim.init(std.heap.page_allocator, init.io, 0); defer sim.deinit(); // Associate executable names to zig entry functions diff --git a/examples/delete_dir.zig b/examples/delete_dir.zig index 84ddc8d..9faa711 100644 --- a/examples/delete_dir.zig +++ b/examples/delete_dir.zig @@ -32,7 +32,7 @@ fn deleteDirProgram(init: std.process.Init) anyerror!void { pub fn main(init: std.process.Init) !void { var sim: Simulator = undefined; - sim.init(std.heap.page_allocator, init.io); + sim.init(std.heap.page_allocator, init.io, 0); defer sim.deinit(); try sim.addExecutable("delete_dir", deleteDirProgram); diff --git a/examples/delete_file.zig b/examples/delete_file.zig index 6c6a9df..cb25426 100644 --- a/examples/delete_file.zig +++ b/examples/delete_file.zig @@ -25,7 +25,7 @@ fn deleteFileProgram(init: std.process.Init) anyerror!void { pub fn main(init: std.process.Init) !void { var sim: Simulator = undefined; - sim.init(std.heap.page_allocator, init.io); + sim.init(std.heap.page_allocator, init.io, 0); defer sim.deinit(); try sim.addExecutable("delete_file", deleteFileProgram); diff --git a/examples/directories.zig b/examples/directories.zig index d3b1912..32fe6aa 100644 --- a/examples/directories.zig +++ b/examples/directories.zig @@ -28,7 +28,7 @@ fn directoriesProgram(init: std.process.Init) anyerror!void { pub fn main(init: std.process.Init) !void { var sim: Simulator = undefined; - sim.init(std.heap.page_allocator, init.io); + sim.init(std.heap.page_allocator, init.io, 0); defer sim.deinit(); try sim.addExecutable("directories", directoriesProgram); diff --git a/examples/example.zig b/examples/example.zig index 343ff8f..738c874 100644 --- a/examples/example.zig +++ b/examples/example.zig @@ -29,7 +29,7 @@ fn programC(init: std.process.Init) anyerror!void { pub fn main(init: std.process.Init) !void { var sim: Simulator = undefined; - sim.init(std.heap.page_allocator, init.io); + sim.init(std.heap.page_allocator, init.io, 0); defer sim.deinit(); // Associate executable names to zig entry functions diff --git a/examples/list_dir.zig b/examples/list_dir.zig index 0b2a07b..056437d 100644 --- a/examples/list_dir.zig +++ b/examples/list_dir.zig @@ -23,7 +23,7 @@ fn listDirProgram(init: std.process.Init) anyerror!void { pub fn main(init: std.process.Init) !void { var sim: Simulator = undefined; - sim.init(std.heap.page_allocator, init.io); + sim.init(std.heap.page_allocator, init.io, 0); defer sim.deinit(); try sim.addExecutable("list_dir", listDirProgram); diff --git a/examples/open_file.zig b/examples/open_file.zig index 6fcf4c3..3867c79 100644 --- a/examples/open_file.zig +++ b/examples/open_file.zig @@ -13,7 +13,7 @@ fn createFileProgram(init: std.process.Init) anyerror!void { pub fn main(init: std.process.Init) !void { var sim: Simulator = undefined; - sim.init(std.heap.page_allocator, init.io); + sim.init(std.heap.page_allocator, init.io, 0); defer sim.deinit(); try sim.addExecutable("create_file", createFileProgram); diff --git a/examples/read_file.zig b/examples/read_file.zig index d0c9732..7d283a1 100644 --- a/examples/read_file.zig +++ b/examples/read_file.zig @@ -23,7 +23,7 @@ fn readFileProgram(init: std.process.Init) anyerror!void { pub fn main(init: std.process.Init) !void { var sim: Simulator = undefined; - sim.init(std.heap.page_allocator, init.io); + sim.init(std.heap.page_allocator, init.io, 0); defer sim.deinit(); try sim.addExecutable("read_file", readFileProgram); diff --git a/examples/select_group_async.zig b/examples/select_group_async.zig index 7f7bcbb..7fd6601 100644 --- a/examples/select_group_async.zig +++ b/examples/select_group_async.zig @@ -26,7 +26,7 @@ fn program(init: std.process.Init) anyerror!void { pub fn main(init: std.process.Init) !void { var sim: Simulator = undefined; - sim.init(std.heap.page_allocator, init.io); + sim.init(std.heap.page_allocator, init.io, 0); defer sim.deinit(); try sim.addExecutable("select_group_async", program); diff --git a/examples/sleep.zig b/examples/sleep.zig index 5f6c8d2..5b29e76 100644 --- a/examples/sleep.zig +++ b/examples/sleep.zig @@ -21,7 +21,7 @@ fn fastProgram(init: std.process.Init) anyerror!void { pub fn main(init: std.process.Init) !void { var sim: Simulator = undefined; - sim.init(std.heap.page_allocator, init.io); + sim.init(std.heap.page_allocator, init.io, 0); defer sim.deinit(); try sim.addExecutable("slow", slowProgram); diff --git a/examples/tcp_ping_pong.zig b/examples/tcp_ping_pong.zig index e654249..7b2feb3 100644 --- a/examples/tcp_ping_pong.zig +++ b/examples/tcp_ping_pong.zig @@ -63,7 +63,7 @@ pub fn main(init: std.process.Init) !void { const server_addresses = [_]u32{std.mem.readInt(u32, &server_ip.bytes, .big)}; var sim: Simulator = undefined; - sim.init(std.heap.page_allocator, init.io); + sim.init(std.heap.page_allocator, init.io, 0); defer sim.deinit(); try sim.addExecutable("server", serverProgram); diff --git a/src/scheduler.zig b/src/scheduler.zig index 7dad856..640b74e 100644 --- a/src/scheduler.zig +++ b/src/scheduler.zig @@ -70,14 +70,16 @@ const Task = struct { }; gpa: Allocator, +prng: *std.Random.DefaultPrng, tasks: std.ArrayList(Task), regs: Registers, current_id: ?TaskID, current_time: u64, next_task_id: u64, -pub fn init(self: *Scheduler, gpa: Allocator) void { +pub fn init(self: *Scheduler, gpa: Allocator, prng: *std.Random.DefaultPrng) void { self.gpa = gpa; + self.prng = prng; self.tasks = .empty; self.current_id = null; self.current_time = 0; diff --git a/src/simulator.zig b/src/simulator.zig index 9257831..ab4ebd0 100644 --- a/src/simulator.zig +++ b/src/simulator.zig @@ -25,15 +25,17 @@ const ExecutableName = struct { }; gpa: Allocator, +prng: std.Random.DefaultPrng, scheduler: Scheduler, network: Network, nodes: std.ArrayList(*Node), executables: std.ArrayList(ExecutableName), real_io: std.Io, -pub fn init(self: *Simulator, gpa: Allocator, real_io: std.Io) void { +pub fn init(self: *Simulator, gpa: Allocator, real_io: std.Io, seed: u64) void { self.gpa = gpa; - self.scheduler.init(gpa); + self.prng = std.Random.DefaultPrng.init(seed); + self.scheduler.init(gpa, &self.prng); self.network.init(gpa); self.nodes = .empty; self.executables = .empty;