frclib-core 0.2.4

A collection of utilities to be used across the FRC in rust ecosystem
Documentation
use crate::value::{FrcValue, IntoFrcValue};

const _: fn() = || {
    let _ = core::mem::transmute::<FrcValue, [u8; 24]>;
};

#[allow(trivial_casts, clippy::missing_assert_message)]
#[test]
fn test_into_frc_value() {
    fn assert_frc_value(v: impl IntoFrcValue, cmp: FrcValue) {
        {
            match (v.into_frc_value(), cmp) {
                (FrcValue::Boolean(a), FrcValue::Boolean(b)) => assert_eq!(a, b),
                (FrcValue::Float(a), FrcValue::Float(b)) => assert!((a - b).abs() < f32::EPSILON),
                (FrcValue::Double(a), FrcValue::Double(b)) => assert!((a - b).abs() < f64::EPSILON),
                (FrcValue::Int(a), FrcValue::Int(b)) => assert_eq!(a, b),
                (FrcValue::Void, FrcValue::Void) => (),
                (FrcValue::String(a), FrcValue::String(b)) => assert_eq!(a, b),
                (FrcValue::BooleanArray(a), FrcValue::BooleanArray(b)) => assert_eq!(a, b),
                (FrcValue::FloatArray(a), FrcValue::FloatArray(b)) => assert_eq!(a, b),
                (FrcValue::DoubleArray(a), FrcValue::DoubleArray(b)) => assert_eq!(a, b),
                (FrcValue::StringArray(a), FrcValue::StringArray(b)) => assert_eq!(a, b),
                (any_v, any_cmp) => panic!("assert_frc_value failed: {any_v:?} != {any_cmp:?}"),
            }
        }
    }
    assert_frc_value(1.0f64, FrcValue::Double(1.0));
    assert_frc_value(1.0f32, FrcValue::Float(1.0));
    assert_frc_value(1i64, FrcValue::Int(1));
    assert_frc_value(1i32, FrcValue::Int(1));
    assert_frc_value(1i16, FrcValue::Int(1));
    assert_frc_value(1i8, FrcValue::Int(1));
    assert_frc_value(1u32, FrcValue::Int(1));
    assert_frc_value(1u16, FrcValue::Int(1));
    assert_frc_value(1u8, FrcValue::Int(1));
    assert_frc_value("1", FrcValue::String(Box::from("1")));
    assert_frc_value("1".to_string(), FrcValue::String(Box::from("1")));
    assert_frc_value(Box::from("1") as Box<str>, FrcValue::String(Box::from("1")));
    assert_frc_value(true, FrcValue::Boolean(true));
    assert_frc_value(
        [true, false],
        FrcValue::BooleanArray(Box::from([true, false])),
    );
    assert_frc_value(
        Box::from(["1", "2"]) as Box<[&str]>,
        FrcValue::StringArray(Box::from([Box::from("1"), Box::from("2")])),
    );
    assert_frc_value(
        vec!["1", "2"],
        FrcValue::StringArray(Box::from([Box::from("1"), Box::from("2")])),
    );
    assert_frc_value(None::<i64>, FrcValue::Void);
    assert_frc_value(Some(1), FrcValue::Int(1));
}