factrs 0.3.0

Factor graph optimization for robotics
Documentation
#[cfg(feature = "serde")]
mod ser_de {
    use factrs::{
        containers::Values, residuals::PriorResidual, symbols::X, traits::Residual,
        variables::VectorVar1,
    };

    #[test]
    fn test_vector_serialize() {
        let trait_object = &PriorResidual::new(VectorVar1::new(2.3)) as &dyn Residual;
        let json = serde_json::to_string(trait_object).unwrap();
        let expected = r#"{"tag":"PriorResidual<VectorVar<1>>","prior":[2.3]}"#;
        println!("json: {json}");
        assert_eq!(json, expected);
    }

    #[test]
    fn test_vector() {
        let json = r#"{"tag":"PriorResidual<VectorVar<1>>","prior":[1.2]}"#;
        let trait_object: Box<dyn Residual> = serde_json::from_str(json).unwrap();

        let mut values = Values::new();
        values.insert_unchecked(X(0), VectorVar1::new(1.2));
        let error = trait_object.residual(&values, &[X(0).into()])[0];

        assert_eq!(trait_object.dim_in(), 1);
        assert_eq!(trait_object.dim_out(), 1);
        assert_eq!(error, 0.0);
    }
}