use zcash_mmr::{Entry, EntryLink, NodeData, Tree}; #[path= "lib/shared.rs"] mod share; fn prepare_tree(vec: &Vec) -> Tree { assert!(vec.len() > 0); // integer log2 of (vec.len()+1), -1 let mut h = (32 - ((vec.len()+1) as u32).leading_zeros() - 1)-1; let mut peak_pos = (1 << (h+1)) - 1; let mut nodes = Vec::new(); // used later let mut last_peak_pos = 0; let mut last_peak_h = 0; loop { if peak_pos > vec.len() { // left child, -2^h peak_pos = peak_pos - (1< 0 { let left_pos = peak_pos - (1< { eprintln!("writer []"); std::process::exit(1); }, Some(number) => { number.parse::().expect("invalid number") } }; let long_vec = share::NodeDataIterator::new().take(number) .collect::>(); let now = std::time::Instant::now(); let tree = prepare_tree(&long_vec); let elapsed = now.elapsed(); println!("Tree final root: {}-{}", tree.root_node().expect("root").data().start_height, tree.root_node().expect("root").data().end_height, ); println!("Prepare tree of {} length: {} ns / {} mcs / {} ms", number, elapsed.as_nanos(), elapsed.as_micros(), elapsed.as_millis() ); }