From 8ac52162447dc301eb8f6a2f6f27384f0570c5a7 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 16 Apr 2022 01:12:09 +0100 Subject: [PATCH] fake-rng: Provide range() method Signed-off-by: Ian Jackson --- src/fake-rng.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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(), + } + } } -- 2.30.2