use crate::{formula::Formula, learner::Learner, 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), 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), 0), 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, 0), None ) .is_err() == false ); assert!( formula .modify_tree() .go_down(0) .add_node(Node::function( "sin".to_string(), |inputs| inputs[0].sin(), Some(1), 0 )) .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()); } #[test] fn test_2x() { let inputs = vec![0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.]; let outputs = vec![0., 2., 4., 6., 8., 10., 12., 14., 16., 18., 20., 22., 24.]; let mut learner = Learner::new(inputs.clone(), outputs.clone(), None, None); let formula = learner.calculate_formula(); assert_eq!(formula.run(inputs), outputs); }