serial: add a test for incremental merkle tree

This commit is contained in:
ghassmo
2022-10-24 22:46:24 +04:00
parent 5a34c7bd2d
commit 6d129eb6ca

View File

@@ -171,3 +171,56 @@ impl<T: Decodable + Ord + Clone + Hashable, const V: u8> Decodable
}
}
}
#[cfg(test)]
mod tests {
use crate::{deserialize, serialize, SerialDecodable, SerialEncodable};
use incrementalmerkletree::{bridgetree::BridgeTree, Altitude, Hashable, Tree};
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, SerialEncodable, SerialDecodable)]
struct Node(String);
impl Hashable for Node {
fn empty_leaf() -> Self {
Self("_".to_string())
}
fn combine(_: Altitude, a: &Self, b: &Self) -> Self {
Self(a.0.to_string() + &b.0)
}
}
#[test]
fn serialize_desrialize_inc_merkle_tree() {
const DEPTH: u8 = 8;
// Fill the tree with 100 leaves
let mut tree: BridgeTree<Node, DEPTH> = BridgeTree::new(100);
for i in 0..100 {
tree.append(&Node(format!("test{}", i)));
tree.witness();
tree.checkpoint();
}
let serial_tree = serialize(&tree);
let deserial_tree: BridgeTree<Node, DEPTH> = deserialize(&serial_tree).unwrap();
// Empty tree
let tree2: BridgeTree<Node, DEPTH> = BridgeTree::new(100);
let serial_tree2 = serialize(&tree2);
let deserial_tree2: BridgeTree<Node, DEPTH> = deserialize(&serial_tree2).unwrap();
// Max leaves
let mut tree3: BridgeTree<Node, DEPTH> = BridgeTree::new(100);
for i in 0..2_i32.pow(DEPTH as u32) {
tree3.append(&Node(format!("test{}", i)));
tree3.witness();
tree3.checkpoint();
}
let serial_tree3 = serialize(&tree3);
let deserial_tree3: BridgeTree<Node, DEPTH> = deserialize(&serial_tree3).unwrap();
assert!(tree == deserial_tree);
assert!(tree2 == deserial_tree2);
assert!(tree3 == deserial_tree3);
}
}