Display as text
This commit is contained in:
parent
2b51bcff01
commit
80c9d47399
3 changed files with 61 additions and 1 deletions
|
|
@ -53,4 +53,7 @@ impl Formula {
|
|||
self.display_recursion(indent_level + 1, next_nodes);
|
||||
}
|
||||
}
|
||||
pub fn as_text(&self) -> String {
|
||||
self.tree.as_text()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,6 +78,26 @@ impl Node {
|
|||
pub fn modify_tree(&mut self) -> NodeModifier {
|
||||
NodeModifier::from_node(self, None)
|
||||
}
|
||||
pub fn as_text(&self) -> String {
|
||||
let mut children_text = "".to_string();
|
||||
if self.children.len() > 0 {
|
||||
for i in 0..self.children.len() {
|
||||
children_text += (&self.children[i]).as_text().as_str();
|
||||
if i < self.children.len() - 1 {
|
||||
children_text += ",";
|
||||
}
|
||||
}
|
||||
}
|
||||
match &self.handler {
|
||||
NodeHandler::Function {
|
||||
name,
|
||||
function,
|
||||
max_args,
|
||||
} => name.clone() + "(" + children_text.as_str() + ")",
|
||||
NodeHandler::Empty => children_text,
|
||||
_ => self.to_string(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for Node {
|
||||
|
|
@ -93,7 +113,7 @@ impl fmt::Display for Node {
|
|||
max_args,
|
||||
} => name.clone(),
|
||||
NodeHandler::Variable => "X".to_string(),
|
||||
NodeHandler::Empty => "Empty".to_string(),
|
||||
NodeHandler::Empty => "".to_string(),
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
|
|||
37
src/tests.rs
37
src/tests.rs
|
|
@ -52,3 +52,40 @@ fn test_branch_sum() {
|
|||
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());
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue