use crate::common::parse_range_and_gen_value_in_range;
use rand::random;
use std::collections::HashMap;
use tera::{to_value, Result, Value};
pub fn random_bool(_args: &HashMap<String, Value>) -> tera::Result<Value> {
let random_value: bool = random::<bool>();
let json_value: Value = to_value(random_value)?;
Ok(json_value)
}
pub fn random_char(_args: &HashMap<String, Value>) -> Result<Value> {
let random_value: char = random::<char>();
let json_value: Value = to_value(random_value)?;
Ok(json_value)
}
pub fn random_uint32(args: &HashMap<String, Value>) -> Result<Value> {
parse_range_and_gen_value_in_range(args, u32::MIN, u32::MAX)
}
pub fn random_uint64(args: &HashMap<String, Value>) -> Result<Value> {
parse_range_and_gen_value_in_range(args, u64::MIN, u64::MAX)
}
pub fn random_int32(args: &HashMap<String, Value>) -> Result<Value> {
parse_range_and_gen_value_in_range(args, i32::MIN, i32::MAX)
}
pub fn random_int64(args: &HashMap<String, Value>) -> Result<Value> {
parse_range_and_gen_value_in_range(args, i64::MIN, i64::MAX)
}
pub fn random_float32(args: &HashMap<String, Value>) -> Result<Value> {
parse_range_and_gen_value_in_range(args, 0.0, 1.0)
}
pub fn random_float64(args: &HashMap<String, Value>) -> Result<Value> {
parse_range_and_gen_value_in_range(args, 0.0, 1.0)
}
#[cfg(test)]
mod tests {
use crate::common::tests::test_tera_rand_function;
use crate::primitives::*;
use tracing_test::traced_test;
#[test]
#[traced_test]
fn test_random_bool() {
test_tera_rand_function(
random_bool,
"random_bool",
r#"{ "some_field": {{ random_bool() }} }"#,
r#"\{ "some_field": (true|false) }"#,
);
}
#[test]
#[traced_test]
fn test_random_char() {
test_tera_rand_function(
random_char,
"random_char",
r#"{ "some_field": {{ random_char() }} }"#,
r#"\{ "some_field": . }"#,
);
}
#[test]
#[traced_test]
fn test_random_uint32() {
test_tera_rand_function(
random_uint32,
"random_uint32",
r#"{ "some_field": {{ random_uint32() }} }"#,
r#"\{ "some_field": \d+ }"#,
);
}
#[test]
#[traced_test]
fn test_random_uint32_near_min() {
test_tera_rand_function(
random_uint32,
"random_uint32",
r#"{ "some_field": {{ random_uint32(start=0, end=2) }} }"#,
r#"\{ "some_field": 0|1|2 }"#,
);
}
#[test]
#[traced_test]
fn test_random_uint32_near_max() {
test_tera_rand_function(
random_uint32,
"random_uint32",
r#"{ "some_field": {{ random_uint32(start=4294967293, end=4294967295) }} }"#,
r#"\{ "some_field": 4294967293|4294967294|4294967295 }"#,
);
}
#[test]
#[traced_test]
fn test_random_uint32_with_start_only() {
test_tera_rand_function(
random_uint32,
"random_uint32",
r#"{ "some_field": {{ random_uint32(start=4294967293) }} }"#,
r#"\{ "some_field": 4294967293|4294967294|4294967295 }"#,
);
}
#[test]
#[traced_test]
fn test_random_uint32_with_end_only() {
test_tera_rand_function(
random_uint32,
"random_uint32",
r#"{ "some_field": {{ random_uint32(end=2) }} }"#,
r#"\{ "some_field": 0|1|2 }"#,
);
}
#[test]
#[traced_test]
fn test_random_uint64() {
test_tera_rand_function(
random_uint64,
"random_uint64",
r#"{ "some_field": {{ random_uint64() }} }"#,
r#"\{ "some_field": \d+ }"#,
);
}
#[test]
#[traced_test]
fn test_random_uint64_near_min() {
test_tera_rand_function(
random_uint64,
"random_uint64",
r#"{ "some_field": {{ random_uint64(start=0, end=2) }} }"#,
r#"\{ "some_field": 0|1|2 }"#,
);
}
#[test]
#[ignore]
#[traced_test]
fn test_random_uint64_near_max() {
test_tera_rand_function(
random_uint64,
"random_uint64",
r#"{ "some_field": {{ random_uint64(start=18446744073709551601, end=18446744073709551603) }} }"#,
r#"\{ "some_field": 18446744073709551601|18446744073709551602|18446744073709551603 }"#,
);
}
#[test]
#[ignore]
#[traced_test]
fn test_random_uint64_with_start_only() {
test_tera_rand_function(
random_uint64,
"random_uint64",
r#"{ "some_field": {{ random_uint64(start=18446744073709551601) }} }"#,
r#"\{ "some_field": 18446744073709551601|18446744073709551602|18446744073709551603 }"#,
);
}
#[test]
#[traced_test]
fn test_random_uint64_with_end_only() {
test_tera_rand_function(
random_uint64,
"random_uint64",
r#"{ "some_field": {{ random_uint64(end=2) }} }"#,
r#"\{ "some_field": 0|1|2 }"#,
);
}
#[test]
#[traced_test]
fn test_random_int32() {
test_tera_rand_function(
random_int32,
"random_int32",
r#"{ "some_field": {{ random_int32() }} }"#,
r#"\{ "some_field": -?\d+ }"#,
);
}
#[test]
#[traced_test]
fn test_random_int32_near_min() {
test_tera_rand_function(
random_int32,
"random_int32",
r#"{ "some_field": {{ random_int32(start=-2147483648, end=-2147483646) }} }"#,
r#"\{ "some_field": (-2147483648|-2147483647|-2147483646) }"#,
);
}
#[test]
#[traced_test]
fn test_random_int32_near_max() {
test_tera_rand_function(
random_int32,
"random_int32",
r#"{ "some_field": {{ random_int32(start=2147483645, end=2147483647) }} }"#,
r#"\{ "some_field": 2147483645|2147483646|2147483647 }"#,
);
}
#[test]
#[traced_test]
fn test_random_int32_with_start_only() {
test_tera_rand_function(
random_int32,
"random_int32",
r#"{ "some_field": {{ random_int32(start=2147483645) }} }"#,
r#"\{ "some_field": 2147483645|2147483646|2147483647 }"#,
);
}
#[test]
#[traced_test]
fn test_random_int32_with_end_only() {
test_tera_rand_function(
random_int32,
"random_int32",
r#"{ "some_field": {{ random_int32(end=-2147483646) }} }"#,
r#"\{ "some_field": (-2147483648|-2147483647|-2147483646) }"#,
);
}
#[test]
#[traced_test]
fn test_random_int64() {
test_tera_rand_function(
random_int64,
"random_int64",
r#"{ "some_field": {{ random_int64() }} }"#,
r#"\{ "some_field": -?\d+ }"#,
);
}
#[test]
#[traced_test]
fn test_random_int64_near_min() {
test_tera_rand_function(
random_int64,
"random_int64",
r#"{ "some_field": {{ random_int64(start=-9223372036854775808, end=-9223372036854775806) }} }"#,
r#"\{ "some_field": (-9223372036854775808|-9223372036854775807|-9223372036854775806) }"#,
);
}
#[test]
#[traced_test]
fn test_random_int64_near_max() {
test_tera_rand_function(
random_int64,
"random_int64",
r#"{ "some_field": {{ random_int64(start=9223372036854775805, end=9223372036854775807) }} }"#,
r#"\{ "some_field": 9223372036854775805|9223372036854775806|9223372036854775807 }"#,
);
}
#[test]
#[traced_test]
fn test_random_int64_with_start_only() {
test_tera_rand_function(
random_int64,
"random_int64",
r#"{ "some_field": {{ random_int64(start=9223372036854775805) }} }"#,
r#"\{ "some_field": 9223372036854775805|9223372036854775806|9223372036854775807 }"#,
);
}
#[test]
#[traced_test]
fn test_random_int64_with_end_only() {
test_tera_rand_function(
random_int64,
"random_int64",
r#"{ "some_field": {{ random_int64(end=-9223372036854775806) }} }"#,
r#"\{ "some_field": (-9223372036854775808|-9223372036854775807|-9223372036854775806) }"#,
);
}
#[test]
#[traced_test]
fn test_random_float32() {
test_tera_rand_function(
random_float32,
"random_float32",
r#"{ "some_field": {{ random_float32(start=-6.0, end=-5.0) }} }"#,
r#"\{ "some_field": -5\.\d+ }"#,
);
}
#[test]
#[traced_test]
fn test_random_float64() {
test_tera_rand_function(
random_float64,
"random_float64",
r#"{ "some_field": {{ random_float64(start=-6.0, end=-5.0) }} }"#,
r#"\{ "some_field": -5\.\d+ }"#,
);
}
}