use evolution_common::datatype::DataType;
use evolution_schema::column::FixedColumn;
use faker_rand::en_us::names::FirstName;
use rand::rngs::ThreadRng;
use rand::Rng;
pub static MOCKED_F16_MAX: f32 = 256.0;
pub static MOCKED_F32_MAX: f32 = 1_000_000.0;
pub static MOCKED_F64_MAX: f64 = 1_000_000_000.0;
pub static MOCKED_I16_MAX: i16 = 10_000;
pub static MOCKED_I32_MAX: i32 = 1_000_000;
pub static MOCKED_I64_MAX: i64 = 1_000_000_000;
pub fn mock_column(column: &FixedColumn, rng: &mut ThreadRng) -> String {
match column.dtype() {
DataType::Boolean => mock_bool(rng),
DataType::Float16 => mock_f16(rng),
DataType::Float32 => mock_f32(rng),
DataType::Float64 => mock_f64(rng),
DataType::Int16 => mock_i16(rng),
DataType::Int32 => mock_i32(rng),
DataType::Int64 => mock_i64(rng),
DataType::Utf8 => mock_utf8(rng),
DataType::LargeUtf8 => mock_utf8(rng),
}
}
fn mock_bool(rng: &mut ThreadRng) -> String {
rng.gen_bool(0.5).to_string()
}
fn mock_f16(rng: &mut ThreadRng) -> String {
rng.gen_range(-MOCKED_F16_MAX..=MOCKED_F16_MAX).to_string()
}
fn mock_f32(rng: &mut ThreadRng) -> String {
rng.gen_range(-MOCKED_F32_MAX..=MOCKED_F32_MAX).to_string()
}
fn mock_f64(rng: &mut ThreadRng) -> String {
rng.gen_range(-MOCKED_F64_MAX..=MOCKED_F64_MAX).to_string()
}
fn mock_i16(rng: &mut ThreadRng) -> String {
rng.gen_range(-MOCKED_I16_MAX..=MOCKED_I16_MAX).to_string()
}
fn mock_i32(rng: &mut ThreadRng) -> String {
rng.gen_range(-MOCKED_I32_MAX..=MOCKED_I32_MAX).to_string()
}
fn mock_i64(rng: &mut ThreadRng) -> String {
rng.gen_range(-MOCKED_I64_MAX..=MOCKED_I64_MAX).to_string()
}
fn mock_utf8(rng: &mut ThreadRng) -> String {
rng.gen::<FirstName>().to_string()
}
pub mod mocker;