rust_dynamic 0.49.0

Support for dynamically-typed values in run-time
Documentation
#[cfg(test)]
mod tests {
    #![allow(unused_imports)]
    use super::*;
    use rust_dynamic::value::Value;

    #[test]
    fn test_car_list() {
        let v = Value::from(vec![Value::from_int(1 as i64), Value::from_int(2 as i64), Value::from_int(3 as i64)]).unwrap();
        assert_eq!(v.car().expect("expecting value").cast_int().unwrap(), 1 as i64);
    }
    #[test]
    fn test_car_matrix() {
        let mut m = Value::matrix();
        let v = Value::list()
                .push(Value::from(1.0 as f64).unwrap())
                .push(Value::from(41.0 as f64).unwrap());
        m = m.push(v.clone());
        let matrix_car = m.car().unwrap();
        assert_eq!(matrix_car.car().expect("expecting value").cast_float().unwrap(), 1.0 as f64);
    }
    #[test]
    fn test_cdr_matrix() {
        let mut m = Value::matrix();
        let v0 = Value::list()
                .push(Value::from(1.0 as f64).unwrap())
                .push(Value::from(41.0 as f64).unwrap());
        let v1 = Value::list()
                .push(Value::from(2.0 as f64).unwrap())
                .push(Value::from(41.0 as f64).unwrap());
        m = m.push(v0.clone());
        m = m.push(v1.clone());
        let matrix_cdr = m.cdr().unwrap();
        let matrix_val = matrix_cdr.cast_matrix().unwrap();
        assert_eq!(matrix_val[0][0].cast_float().unwrap(), 2.0 as f64);
    }
    #[test]
    fn test_last_list() {
        let v = Value::from(vec![Value::from_int(1 as i64), Value::from_int(2 as i64), Value::from_int(3 as i64)]).unwrap();
        assert_eq!(v.last().expect("expecting value").cast_int().unwrap(), 3 as i64);
    }
    #[test]
    fn test_cdr_list() {
        let v = Value::from(vec![Value::from_int(1 as i64), Value::from_int(2 as i64), Value::from_int(3 as i64)])
                .unwrap()
                .cdr().expect("expecting cdr");
        assert_eq!(v.car().expect("expecting value").cast_int().unwrap(), 2 as i64);
    }
    #[test]
    fn test_at_list() {
        let v = Value::from(vec![Value::from_int(1 as i64), Value::from_int(2 as i64), Value::from_int(3 as i64)])
                .unwrap()
                .at(1).expect("expecting cdr");
        assert_eq!(v.car().expect("expecting value").cast_int().unwrap(), 1 as i64);
    }
    #[test]
    fn test_head1_list() {
        let v = Value::from(vec![Value::from_int(1 as i64), Value::from_int(2 as i64), Value::from_int(3 as i64)])
                .unwrap()
                .head(2).expect("expecting head");
        assert_eq!(v.len(), 2);
    }
    #[test]
    fn test_tail1_list() {
        let v = Value::from(vec![Value::from_int(1 as i64), Value::from_int(2 as i64), Value::from_int(3 as i64)])
                .unwrap()
                .head(2).expect("expecting head");
        assert_eq!(v.len(), 2);
    }
    #[test]
    fn test_tail2_list() {
        let v = Value::from(vec![Value::from_int(1 as i64), Value::from_int(2 as i64), Value::from_int(3 as i64)])
                .unwrap()
                .tail(2).expect("expecting tail");
        let v1 = v.car().expect("Expected car");
        assert_eq!(v1.cast_int().unwrap(), 2);
    }
    #[test]
    fn test_metrics_car() {
        let mut val = Value::metrics_n(3);
        val = val.push(Value::from_float(42.0 as f64));
        val = val.push(Value::from_float(43.0 as f64));
        val = val.push(Value::from_float(44.0 as f64));
        let m = val.car().expect("expecting car");
        assert_eq!(m.get("value").unwrap().cast_float().unwrap(), 42.0 as f64);
    }
    #[test]
    fn test_metrics_last() {
        let mut val = Value::metrics_n(3);
        val = val.push(Value::from_float(42.0 as f64));
        val = val.push(Value::from_float(43.0 as f64));
        val = val.push(Value::from_float(44.0 as f64));
        let m = val.last().expect("expecting last");
        assert_eq!(m.get("value").unwrap().cast_float().unwrap(), 44.0 as f64);
    }
    #[test]
    fn test_metrics_cdr() {
        let mut val = Value::metrics_n(3);
        val = val.push(Value::from_float(42.0 as f64));
        val = val.push(Value::from_float(43.0 as f64));
        val = val.push(Value::from_float(44.0 as f64));
        val = val.cdr().expect("expecting cdr");
        let m = val.car().expect("expecting car");
        assert_eq!(m.get("value").unwrap().cast_float().unwrap(), 43.0 as f64);
    }
    #[test]
    fn test_queue_car() {
        let mut val = Value::queue();
        val = val.push(Value::from_float(42.0 as f64));
        val = val.push(Value::from_float(43.0 as f64));
        val = val.push(Value::from_float(44.0 as f64));
        let m = val.car().expect("expecting car");
        assert_eq!(m.cast_float().unwrap(), 42.0 as f64);
    }
    #[test]
    fn test_fifo_car() {
        let mut val = Value::fifo();
        val = val.push(Value::from_float(42.0 as f64));
        val = val.push(Value::from_float(43.0 as f64));
        val = val.push(Value::from_float(44.0 as f64));
        let m = val.car().expect("expecting car");
        assert_eq!(m.cast_float().unwrap(), 44.0 as f64);
    }
}