diff --git a/examples/rng.rs b/examples/rng.rs new file mode 100644 index 0000000000000000000000000000000000000000..04f7e40aba1db36692df93be38921663e41b0429 --- /dev/null +++ b/examples/rng.rs @@ -0,0 +1,24 @@ +use clap::Parser; +use rand::{rngs::StdRng, Rng, SeedableRng}; + +#[derive(Parser)] +#[command(version, about, long_about = None)] +struct Cli { + #[arg(short)] + n: usize, + + #[arg(long)] + prng_seed: u8, +} + +fn main() { + let cli = Cli::parse(); + + let mut seed: [u8; 32] = [0; 32]; + seed[0] = cli.prng_seed; + let mut rng = StdRng::from_seed(seed); + + for _ in 0..cli.n { + println!("{}", rng.gen::<u8>()); + } +} diff --git a/scripts/inbreeding/run.nu b/scripts/inbreeding/run.nu index 6a523b701a98740fa4ffeb3d2ae5329f1e2d0e3b..8171f2975428bd213d93d3aa7e67edd611fee734 100644 --- a/scripts/inbreeding/run.nu +++ b/scripts/inbreeding/run.nu @@ -29,6 +29,22 @@ export def main [ mkdir $output_dir print $"data will be dumped to `($output_dir)`" + # compute a unique seed for that strategy and global seed + let seed = $s + $"($prng_seed)" + | hash sha256 + | split chars + | last 2 + | str join + | $"0x($in)" + | into int + # compute all the seeds for that strategy, one per scenario + let seeds = cargo run --release --example rng -- ...[ + -n $options.nb_scenarii + --prng-seed $prng_seed + ] + | lines + | into int + for i in 1..$options.nb_scenarii { let output = [ $output_dir, $"($i)" ] | path join @@ -43,7 +59,7 @@ export def main [ --test-case recoding --strategy $s --environment $options.environment - --prng-seed $prng_seed + --prng-seed ($seeds | get ($i - 1)) ] out> $output }