use num_traits::real::Real;
use num_traits::FromPrimitive;
use rand::rngs::StdRng;
use rand::{Rng, SeedableRng};
use std::iter::repeat_with;
use arrow_array::{ArrowNumericType, Float32Array, NativeAdapter, PrimitiveArray};
pub fn generate_random_array_with_seed<T: ArrowNumericType>(
n: usize,
seed: [u8; 32],
) -> PrimitiveArray<T>
where
T::Native: Real + FromPrimitive,
NativeAdapter<T>: From<T::Native>,
{
let mut rng = StdRng::from_seed(seed);
PrimitiveArray::<T>::from_iter(repeat_with(|| T::Native::from_f32(rng.gen::<f32>())).take(n))
}
pub fn generate_random_array(n: usize) -> Float32Array {
let mut rng = rand::thread_rng();
Float32Array::from(
repeat_with(|| rng.gen::<f32>())
.take(n)
.collect::<Vec<f32>>(),
)
}