Started implementation on tree unit tests.

This commit is contained in:
Jacob VanDomelen 2019-06-01 02:44:14 -07:00
parent 048ea8d564
commit 255e26c95a
7 changed files with 69 additions and 11 deletions

View file

@ -12,8 +12,8 @@ impl tree::Tree<Uuid> {
println!("Running simulation for node: {}", self.val); println!("Running simulation for node: {}", self.val);
println!( println!(
"With children {} and {}", "With children {} and {}",
tree::fmt_node(&self.left), tree::Tree::fmt_node(&self.left),
tree::fmt_node(&self.right) tree::Tree::fmt_node(&self.right)
); );
} }
} }

View file

@ -7,6 +7,9 @@ mod tree;
mod constants; mod constants;
mod file_linked; mod file_linked;
#[cfg(test)]
mod tests;
use clap::App; use clap::App;
use std::fs::metadata; use std::fs::metadata;

View file

@ -0,0 +1 @@

View file

@ -0,0 +1 @@

3
gemla/src/tests/mod.rs Normal file
View file

@ -0,0 +1,3 @@
mod tree;
mod bracket;
mod file_linked;

47
gemla/src/tests/tree.rs Normal file
View file

@ -0,0 +1,47 @@
use super::super::tree::Tree;
#[test]
fn test_new() {
assert_eq!(
Tree::new(30, None, Some(Box::new(Tree::new(20, None, None)))),
Tree {
val: 30,
left: None,
right: Some(Box::new(Tree {
val: 20,
left: None,
right: None,
})),
}
);
}
#[test]
fn test_fmt() {
assert_eq!(
format!(
"{}",
Tree::new("foo", Some(Box::new(Tree::new("bar", None, None))), None)
),
"(foo: (bar: _|_)|_)"
);
}
#[test]
fn test_fmt_node() {
assert_eq!(
Tree::fmt_node(&Some(Box::new(Tree::new(
17,
Some(Box::new(Tree::new(16, None, None))),
Some(Box::new(Tree::new(12, None, None))),
)))),
"17"
);
assert_eq!(
Tree::fmt_node(&Some(Box::new(
Tree::new(Tree::new("foo", None, None), None, None),
))),
"(foo: _|_)"
);
assert_eq!(Tree::<i32>::fmt_node(&None), "_");
}

View file

@ -2,7 +2,7 @@ use std::fmt;
use std::str::FromStr; use std::str::FromStr;
use regex::Regex; use regex::Regex;
#[derive(Default, Clone)] #[derive(Default, Clone, PartialEq, Debug)]
pub struct Tree<T> { pub struct Tree<T> {
pub val: T, pub val: T,
pub left: Option<Box<Tree<T>>>, pub left: Option<Box<Tree<T>>>,
@ -13,6 +13,16 @@ impl<T> Tree<T> {
pub fn new(val: T, left: Option<Box<Tree<T>>>, right: Option<Box<Tree<T>>>) -> Tree<T> { pub fn new(val: T, left: Option<Box<Tree<T>>>, right: Option<Box<Tree<T>>>) -> Tree<T> {
Tree { val, left, right } Tree { val, left, right }
} }
pub fn fmt_node(t: &Option<Box<Tree<T>>>) -> String
where
T: fmt::Display,
{
match t {
Some(n) => format!("{}", (*n).val),
_ => String::from("_"),
}
}
} }
impl<T: fmt::Display> fmt::Display for Tree<T> { impl<T: fmt::Display> fmt::Display for Tree<T> {
@ -26,7 +36,7 @@ impl<T: fmt::Display> fmt::Display for Tree<T> {
write!( write!(
f, f,
"({} :{}|{})", "({}: {}|{})",
self.val, self.val,
node_str(&self.left), node_str(&self.left),
node_str(&self.right) node_str(&self.right)
@ -34,13 +44,6 @@ impl<T: fmt::Display> fmt::Display for Tree<T> {
} }
} }
pub fn fmt_node<T: fmt::Display>(t: &Option<Box<Tree<T>>>) -> String {
match t {
Some(n) => format!("{}", (*n).val),
_ => String::from("_"),
}
}
fn seperate_nodes(s: &str) -> Result<(&str, &str), ParseTreeError> { fn seperate_nodes(s: &str) -> Result<(&str, &str), ParseTreeError> {
let mut result = Err(ParseTreeError::new( let mut result = Err(ParseTreeError::new(
format!("Unable to seperate string: {}", s), format!("Unable to seperate string: {}", s),