Skip to main content

shuttle_engine/scheduler/data/
fixed.rs

1use crate::scheduler::data::random::RandomDataSource;
2use crate::scheduler::data::DataSource;
3
4/// A `FixedDataSource` generates the same stream of non-determinism (from an underlying
5/// `RandomDataSource`) on every execution.
6#[derive(Debug)]
7pub struct FixedDataSource {
8    seed: u64,
9    data_source: RandomDataSource,
10}
11
12impl FixedDataSource {
13    fn new_from_seed(seed: u64) -> Self {
14        Self {
15            seed,
16            data_source: RandomDataSource::initialize(seed),
17        }
18    }
19}
20
21impl DataSource for FixedDataSource {
22    type Seed = u64;
23
24    fn initialize(seed: Self::Seed) -> Self {
25        Self::new_from_seed(seed)
26    }
27
28    fn reinitialize(&mut self) -> Self::Seed {
29        self.data_source = RandomDataSource::initialize(self.seed);
30        self.data_source.reinitialize()
31    }
32
33    fn next_u64(&mut self) -> u64 {
34        self.data_source.next_u64()
35    }
36}