From: Ian Jackson Date: Sat, 16 Apr 2022 00:12:09 +0000 (+0100) Subject: fake-rng: Provide range() method X-Git-Tag: otter-1.1.0~539 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=8ac52162447dc301eb8f6a2f6f27384f0570c5a7;p=otter.git fake-rng: Provide range() method Signed-off-by: Ian Jackson --- diff --git a/src/fake-rng.rs b/src/fake-rng.rs index dbce35aa..0c0b6d5d 100644 --- a/src/fake-rng.rs +++ b/src/fake-rng.rs @@ -5,6 +5,7 @@ use crate::prelude::*; use parking_lot::Mutex; +use rand::distributions::uniform::SampleUniform; #[derive(Deserialize,Debug,Clone,Default)] #[serde(transparent)] @@ -63,4 +64,19 @@ impl RngWrap { slice[l-n..].copy_from_slice(&front); }, } } + + pub fn range(&self, range: std::ops::Range) -> T + where T: SampleUniform + FromStr + Ord + Default + { + match self.next_fake() { + None => { + let mut rng = thread_rng(); + rng.gen_range(range) + }, + Some(s) => (||{ + let n: T = s.parse().ok()?; + range.contains(&n).then(|| n) + })().unwrap_or_default(), + } + } }