summaryrefslogtreecommitdiffstats
path: root/src/merkle/mod.rs
blob: 4a6e46f9e5a537fbe892cf487658aae9dee5f5cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//! High-level module for Merkle tree functionality.
//!
//! Re-exports the Merkle tree and node modules for external use.

pub mod merkletree;
pub mod node;

#[cfg(test)]
mod tests {
    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);

        assert_eq!(tree.height(), 3);
        assert_eq!(
            tree.root().hash(),
            "58c89d709329eb37285837b042ab6ff72c7c8f74de0446b091b6a0131c102cfd"
        );
    }

    #[test]
    #[cfg(feature = "sha256")]
    fn test_merkle_tree_single_leaf() {
        let data = vec!["hello"];
        let tree = merkletree::MerkleTree::new(&SHA256Hasher, data);

        assert_eq!(tree.height(), 2);
        assert_eq!(tree.len(), 2);
        assert_eq!(
            tree.root().hash(),
            "286d189fda11bf4e906b6973a173009f47ede16532f1bae726223f8ee155d73b"
        );
    }
}