summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs4
-rw-r--r--src/merkle/merkletree.rs4
-rw-r--r--src/merkle/mod.rs20
-rw-r--r--src/merkle/node.rs6
4 files changed, 25 insertions, 9 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 9e3b1d1..49f1349 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,2 +1,2 @@
-mod hasher;
-mod merkle;
+pub mod hasher;
+pub mod merkle;
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),