Skip to content

Commit 33c7984

Browse files
committed
add std.testing.random_seed
closes #17609
1 parent 6f3e993 commit 33c7984

File tree

13 files changed

+35
-18
lines changed

13 files changed

+35
-18
lines changed

lib/compiler/build_runner.zig

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ pub fn main() !void {
9797
var max_rss: u64 = 0;
9898
var skip_oom_steps = false;
9999
var color: Color = .auto;
100-
var seed: u32 = 0;
101100
var prominent_compile_errors = false;
102101
var help_menu = false;
103102
var steps_menu = false;
@@ -188,7 +187,7 @@ pub fn main() !void {
188187
} else if (mem.eql(u8, arg, "--seed")) {
189188
const next_arg = nextArg(args, &arg_idx) orelse
190189
fatalWithHint("expected u32 after '{s}'", .{arg});
191-
seed = std.fmt.parseUnsigned(u32, next_arg, 0) catch |err| {
190+
graph.random_seed = std.fmt.parseUnsigned(u32, next_arg, 0) catch |err| {
192191
fatal("unable to parse seed '{s}' as unsigned 32-bit integer: {s}\n", .{
193192
next_arg, @errorName(err),
194193
});
@@ -371,7 +370,7 @@ pub fn main() !void {
371370
}
372371

373372
const gpa = arena;
374-
prepare(gpa, arena, builder, targets.items, &run, seed) catch |err| switch (err) {
373+
prepare(gpa, arena, builder, targets.items, &run, graph.random_seed) catch |err| switch (err) {
375374
error.UncleanExit => process.exit(1),
376375
else => return err,
377376
};

lib/compiler/test_runner.zig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ pub fn main() void {
2424
for (args[1..]) |arg| {
2525
if (std.mem.eql(u8, arg, "--listen=-")) {
2626
listen = true;
27+
} else if (std.mem.startsWith(u8, arg, "--seed=")) {
28+
std.testing.random_seed = std.fmt.parseUnsigned(u32, arg["--seed=".len..], 0) catch
29+
@panic("unable to parse --seed command line argument");
2730
} else {
2831
@panic("unrecognized command line argument");
2932
}

lib/std/Build.zig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ pub const Graph = struct {
121121
/// Information about the native target. Computed before build() is invoked.
122122
host: ResolvedTarget,
123123
incremental: ?bool = null,
124+
random_seed: u32 = 0,
124125
};
125126

126127
const AvailableDeps = []const struct { []const u8, []const u8 };

lib/std/Build/Step/Run.zig

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,13 @@ pub fn setName(run: *Run, name: []const u8) void {
185185
}
186186

187187
pub fn enableTestRunnerMode(run: *Run) void {
188+
const b = run.step.owner;
189+
const arena = b.allocator;
188190
run.stdio = .zig_test;
189-
run.addArgs(&.{"--listen=-"});
191+
run.addArgs(&.{
192+
std.fmt.allocPrint(arena, "--seed=0x{x}", .{b.graph.random_seed}) catch @panic("OOM"),
193+
"--listen=-",
194+
});
190195
}
191196

192197
pub fn addArtifactArg(run: *Run, artifact: *Step.Compile) void {

lib/std/Random/ziggurat.zig

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,9 @@ pub fn norm_zero_case(random: Random, u: f64) f64 {
126126
}
127127
}
128128

129-
test "normal dist sanity" {
129+
test "normal dist smoke test" {
130+
// Hardcode 0 as the seed because it's possible a seed exists that fails
131+
// this test.
130132
var prng = Random.DefaultPrng.init(0);
131133
const random = prng.random();
132134

lib/std/hash_map.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1935,7 +1935,7 @@ test "put and remove loop in random order" {
19351935
while (i < size) : (i += 1) {
19361936
try keys.append(i);
19371937
}
1938-
var prng = std.Random.DefaultPrng.init(0);
1938+
var prng = std.Random.DefaultPrng.init(std.testing.random_seed);
19391939
const random = prng.random();
19401940

19411941
while (i < iterations) : (i += 1) {
@@ -1967,7 +1967,7 @@ test "remove one million elements in random order" {
19671967
keys.append(i) catch unreachable;
19681968
}
19691969

1970-
var prng = std.Random.DefaultPrng.init(0);
1970+
var prng = std.Random.DefaultPrng.init(std.testing.random_seed);
19711971
const random = prng.random();
19721972
random.shuffle(u32, keys.items);
19731973

lib/std/heap/arena_allocator.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ test "reset with preheating" {
250250
var arena_allocator = ArenaAllocator.init(std.testing.allocator);
251251
defer arena_allocator.deinit();
252252
// provides some variance in the allocated data
253-
var rng_src = std.Random.DefaultPrng.init(19930913);
253+
var rng_src = std.Random.DefaultPrng.init(std.testing.random_seed);
254254
const random = rng_src.random();
255255
var rounds: usize = 25;
256256
while (rounds > 0) {

lib/std/math/big/rational.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ test "toFloat" {
594594
test "set/to Float round-trip" {
595595
var a = try Rational.init(testing.allocator);
596596
defer a.deinit();
597-
var prng = std.Random.DefaultPrng.init(0x5EED);
597+
var prng = std.Random.DefaultPrng.init(std.testing.random_seed);
598598
const random = prng.random();
599599
var i: usize = 0;
600600
while (i < 512) : (i += 1) {

lib/std/os/linux/IoUring.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3995,7 +3995,7 @@ test "ring mapped buffers recv" {
39953995
defer fds.close();
39963996

39973997
// for random user_data in sqe/cqe
3998-
var Rnd = std.Random.DefaultPrng.init(0);
3998+
var Rnd = std.Random.DefaultPrng.init(std.testing.random_seed);
39993999
var rnd = Rnd.random();
40004000

40014001
var round: usize = 4; // repeat send/recv cycle round times
@@ -4081,7 +4081,7 @@ test "ring mapped buffers multishot recv" {
40814081
defer fds.close();
40824082

40834083
// for random user_data in sqe/cqe
4084-
var Rnd = std.Random.DefaultPrng.init(0);
4084+
var Rnd = std.Random.DefaultPrng.init(std.testing.random_seed);
40854085
var rnd = Rnd.random();
40864086

40874087
var round: usize = 4; // repeat send/recv cycle round times

lib/std/priority_dequeue.zig

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -866,7 +866,7 @@ test "shrinkAndFree" {
866866
}
867867

868868
test "fuzz testing min" {
869-
var prng = std.Random.DefaultPrng.init(0x12345678);
869+
var prng = std.Random.DefaultPrng.init(std.testing.random_seed);
870870
const random = prng.random();
871871

872872
const test_case_count = 100;
@@ -895,7 +895,7 @@ fn fuzzTestMin(rng: std.Random, comptime queue_size: usize) !void {
895895
}
896896

897897
test "fuzz testing max" {
898-
var prng = std.Random.DefaultPrng.init(0x87654321);
898+
var prng = std.Random.DefaultPrng.init(std.testing.random_seed);
899899
const random = prng.random();
900900

901901
const test_case_count = 100;
@@ -924,7 +924,7 @@ fn fuzzTestMax(rng: std.Random, queue_size: usize) !void {
924924
}
925925

926926
test "fuzz testing min and max" {
927-
var prng = std.Random.DefaultPrng.init(0x87654321);
927+
var prng = std.Random.DefaultPrng.init(std.testing.random_seed);
928928
const random = prng.random();
929929

930930
const test_case_count = 100;

0 commit comments

Comments
 (0)