use std::collections::HashSet;
use crate::atom::Atom;
use crate::native::ProcessContext;
use crate::term::Term;
use crate::term::boxed::Float;
use super::bif_rand_uniform;
fn context() -> ProcessContext {
ProcessContext::new()
}
#[test]
fn rand_uniform_returns_float_in_half_open_unit_range() {
let mut context = context();
let result = bif_rand_uniform(&[], &mut context).expect("uniform");
let value = Float::new(result).expect("float").value();
assert!((0.0..1.0).contains(&value));
}
#[test]
fn rand_uniform_successive_calls_vary() {
let mut context = context();
let mut values = HashSet::new();
for _ in 0..8 {
let result = bif_rand_uniform(&[], &mut context).expect("uniform");
values.insert(Float::new(result).expect("float").value().to_bits());
}
assert!(values.len() > 1);
}
#[test]
fn rand_uniform_rejects_arguments() {
let mut context = context();
assert_eq!(
bif_rand_uniform(&[Term::small_int(1)], &mut context),
Err(Term::atom(Atom::BADARG))
);
}