From 255e26c95afd66d92a3fbc346e90d209a660e71c Mon Sep 17 00:00:00 2001 From: Jacob VanDomelen Date: Sat, 1 Jun 2019 02:44:14 -0700 Subject: [PATCH] Started implementation on tree unit tests. --- gemla/src/bracket/mod.rs | 4 +-- gemla/src/main.rs | 3 +++ gemla/src/tests/bracket.rs | 1 + gemla/src/tests/file_linked.rs | 1 + gemla/src/tests/mod.rs | 3 +++ gemla/src/tests/tree.rs | 47 ++++++++++++++++++++++++++++++++++ gemla/src/tree/mod.rs | 21 ++++++++------- 7 files changed, 69 insertions(+), 11 deletions(-) create mode 100644 gemla/src/tests/bracket.rs create mode 100644 gemla/src/tests/file_linked.rs create mode 100644 gemla/src/tests/mod.rs create mode 100644 gemla/src/tests/tree.rs diff --git a/gemla/src/bracket/mod.rs b/gemla/src/bracket/mod.rs index 2ce9040..87a47c5 100644 --- a/gemla/src/bracket/mod.rs +++ b/gemla/src/bracket/mod.rs @@ -12,8 +12,8 @@ impl tree::Tree { println!("Running simulation for node: {}", self.val); println!( "With children {} and {}", - tree::fmt_node(&self.left), - tree::fmt_node(&self.right) + tree::Tree::fmt_node(&self.left), + tree::Tree::fmt_node(&self.right) ); } } diff --git a/gemla/src/main.rs b/gemla/src/main.rs index 1b933d8..39efa8d 100644 --- a/gemla/src/main.rs +++ b/gemla/src/main.rs @@ -7,6 +7,9 @@ mod tree; mod constants; mod file_linked; +#[cfg(test)] +mod tests; + use clap::App; use std::fs::metadata; diff --git a/gemla/src/tests/bracket.rs b/gemla/src/tests/bracket.rs new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/gemla/src/tests/bracket.rs @@ -0,0 +1 @@ + diff --git a/gemla/src/tests/file_linked.rs b/gemla/src/tests/file_linked.rs new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/gemla/src/tests/file_linked.rs @@ -0,0 +1 @@ + diff --git a/gemla/src/tests/mod.rs b/gemla/src/tests/mod.rs new file mode 100644 index 0000000..398820d --- /dev/null +++ b/gemla/src/tests/mod.rs @@ -0,0 +1,3 @@ +mod tree; +mod bracket; +mod file_linked; diff --git a/gemla/src/tests/tree.rs b/gemla/src/tests/tree.rs new file mode 100644 index 0000000..f9b3959 --- /dev/null +++ b/gemla/src/tests/tree.rs @@ -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::::fmt_node(&None), "_"); +} diff --git a/gemla/src/tree/mod.rs b/gemla/src/tree/mod.rs index 573423e..914aaf3 100644 --- a/gemla/src/tree/mod.rs +++ b/gemla/src/tree/mod.rs @@ -2,7 +2,7 @@ use std::fmt; use std::str::FromStr; use regex::Regex; -#[derive(Default, Clone)] +#[derive(Default, Clone, PartialEq, Debug)] pub struct Tree { pub val: T, pub left: Option>>, @@ -13,6 +13,16 @@ impl Tree { pub fn new(val: T, left: Option>>, right: Option>>) -> Tree { Tree { val, left, right } } + + pub fn fmt_node(t: &Option>>) -> String + where + T: fmt::Display, + { + match t { + Some(n) => format!("{}", (*n).val), + _ => String::from("_"), + } + } } impl fmt::Display for Tree { @@ -26,7 +36,7 @@ impl fmt::Display for Tree { write!( f, - "({} :{}|{})", + "({}: {}|{})", self.val, node_str(&self.left), node_str(&self.right) @@ -34,13 +44,6 @@ impl fmt::Display for Tree { } } -pub fn fmt_node(t: &Option>>) -> String { - match t { - Some(n) => format!("{}", (*n).val), - _ => String::from("_"), - } -} - fn seperate_nodes(s: &str) -> Result<(&str, &str), ParseTreeError> { let mut result = Err(ParseTreeError::new( format!("Unable to seperate string: {}", s),