diff options
Diffstat (limited to 'src/merkle')
| -rw-r--r-- | src/merkle/merkletree.rs | 4 | ||||
| -rw-r--r-- | src/merkle/mod.rs | 20 | ||||
| -rw-r--r-- | src/merkle/node.rs | 6 |
3 files changed, 23 insertions, 7 deletions
diff --git a/src/merkle/merkletree.rs b/src/merkle/merkletree.rs index f719ea5..812e300 100644 --- a/src/merkle/merkletree.rs +++ b/src/merkle/merkletree.rs @@ -52,6 +52,10 @@ impl MerkleTree { self.height } + pub fn is_empty(&self) -> bool { + self.len() == 0 + } + pub fn len(&self) -> usize { self.leaves.len() } diff --git a/src/merkle/mod.rs b/src/merkle/mod.rs index 48f87bc..1fea22f 100644 --- a/src/merkle/mod.rs +++ b/src/merkle/mod.rs @@ -1,13 +1,24 @@ -mod merkletree; -mod node; +pub mod merkletree; +pub mod node; -#[cfg(all(test, feature = "sha256"))] +#[cfg(test)] mod tests { - use crate::hasher::SHA256Hasher; + use crate::hasher::*; use super::*; #[test] + fn test_merkle_tree_with_default_hasher() { + let data = vec!["a", "b", "c", "d"]; + let tree = merkletree::MerkleTree::new(&DefaultHasher, data); + + assert_eq!(tree.height(), 3); + + assert_eq!(tree.root().hash(), "0xc0ff3"); + } + + #[test] + #[cfg(feature = "sha256")] fn test_merkle_tree_hashing() { let data = vec!["a", "b", "c", "d"]; let tree = merkletree::MerkleTree::new(&SHA256Hasher, data); @@ -21,6 +32,7 @@ mod tests { } #[test] + #[cfg(feature = "sha256")] fn test_merkle_tree_single_leaf() { let data = vec!["hello"]; let tree = merkletree::MerkleTree::new(&SHA256Hasher, data); diff --git a/src/merkle/node.rs b/src/merkle/node.rs index 9d552cd..19cf8d4 100644 --- a/src/merkle/node.rs +++ b/src/merkle/node.rs @@ -1,20 +1,20 @@ use crate::hasher::Hasher; #[derive(Debug, Clone)] -enum NodeType { +pub enum NodeType { Leaf, Internal(Box<Node>, Box<Node>), } impl NodeType { - pub fn left(&self) -> Option<&Box<Node>> { + pub fn left(&self) -> Option<&Node> { match self { NodeType::Leaf => None, NodeType::Internal(l, _) => Some(l), } } - pub fn right(&self) -> Option<&Box<Node>> { + pub fn right(&self) -> Option<&Node> { match self { NodeType::Leaf => None, NodeType::Internal(_, r) => Some(r), |
