91 lines
2.3 KiB
Rust
91 lines
2.3 KiB
Rust
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<f64>| 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());
|
|
}
|