#![allow(dead_code)]
use arrow::array::{ArrayRef, Float64Array, Int64Array};
use rand::rngs::StdRng;
use rand::{Rng, SeedableRng};
use std::sync::Arc;
pub const LENGTHS: &[usize] = &[0, 1, 33, 1024, 1025, 100_001, 1_000_001];
pub fn rng(seed: u64) -> StdRng {
StdRng::seed_from_u64(seed)
}
pub fn int64(n: usize, null_every: usize, seed: u64) -> Int64Array {
let mut r = rng(seed);
(0..n)
.map(|i| {
if null_every != 0 && i % null_every == 0 {
None
} else {
Some(r.random_range(-1_000_000i64..1_000_000))
}
})
.collect()
}
pub fn float64(n: usize, null_every: usize, seed: u64) -> Float64Array {
let mut r = rng(seed);
(0..n)
.map(|i| {
if null_every != 0 && i % null_every == 0 {
None
} else {
Some(r.random_range(-1000.0f64..1000.0))
}
})
.collect()
}
pub fn roundtrip(a: &ArrayRef) -> ArrayRef {
let gpu = arrowmetal::Array::from_arrow(a.as_ref()).expect("import");
gpu.to_arrow().expect("export")
}
pub fn arc(a: impl arrow::array::Array + 'static) -> ArrayRef {
Arc::new(a)
}
pub fn close(a: f64, b: f64, rel: f64) -> bool {
if a == b {
return true;
}
let scale = a.abs().max(b.abs()).max(1.0);
(a - b).abs() / scale <= rel
}