Files
artcraft-services/crates/lib/data/collections/src/random_from_vec.rs
T

31 lines
775 B
Rust

use rand::seq::SliceRandom;
/// Return a random item from a vec.
pub fn random_from_vec<T>(vec: &Vec<T>) -> Option<&T> {
vec.choose(&mut rand::thread_rng())
}
#[cfg(test)]
mod tests {
use crate::random_from_vec::random_from_vec;
#[test]
fn pulls_item_from_vec() {
let items = vec!["one", "two", "three"];
let selected = random_from_vec(&items).unwrap();
assert!(items.contains(selected));
let items = vec!["one", "two", "three"].into_iter()
.map(|s| s.to_string())
.collect();
let selected = random_from_vec(&items).unwrap();
assert!(items.contains(selected));
}
#[test]
fn behavior_on_empty() {
let items : Vec<String> = vec![];
let selected = random_from_vec(&items);
assert!(selected.is_none());
}
}