use crate::{formula::Formula, node::Node}; #[test] fn test_node_variable() { let formula = Formula::new(); let results = formula.run(vec![0f64, 1f64, 2f64, 3f64, 4f64, 5f64]); assert_eq!(results, vec![0f64, 1f64, 2f64, 3f64, 4f64, 5f64]) } #[test] fn test_plus_one() { let mut formula = Formula::new(); assert!( formula .modify_tree() .insert_node( Node::function( "+1".to_string(), |inputs: Vec| inputs[0] + 1f64, Some(1) ), None ) .is_err() == false ); let results = formula.run(vec![0f64, 1f64, 2f64, 3f64, 4f64, 5f64]); assert_eq!(results, vec![1f64, 2f64, 3f64, 4f64, 5f64, 6f64]) } #[test] fn test_branch_sum() { let mut formula = Formula::new(); assert!( formula .modify_tree() .insert_node( Node::function("Sum".to_string(), |inputs| inputs.iter().sum(), Some(2)), None ) .is_err() == false ); assert!( formula .modify_tree() .go_down(0) .add_node(Node::number(1f64)) .is_err() == false ); let results = formula.run(vec![0f64, 1f64, 2f64, 3f64, 4f64, 5f64]); assert_eq!(results, vec![1f64, 2f64, 3f64, 4f64, 5f64, 6f64]) } #[test] fn test_display_as_text() { let mut formula = Formula::new(); assert!( formula .modify_tree() .insert_node( Node::function("sum".to_string(), |inputs| inputs.iter().sum(), None), None ) .is_err() == false ); assert!( formula .modify_tree() .go_down(0) .add_node(Node::function( "sin".to_string(), |inputs| inputs[0].sin(), Some(1) )) .is_err() == false ); assert!( formula .modify_tree() .go_down(0) .go_down(1) .add_node(Node::variable()) .is_err() == false ); assert_eq!(formula.as_text(), "sum(X,sin(X))".to_string()); }