milhouse 0.9.0

Persistent binary merkle tree
Documentation
use crate::List;
use tree_hash::Hash256;
use typenum::{U16, U32, Unsigned};

#[test]
fn build_partial_hash256_list() {
    type N = U16;
    let n = N::to_usize();
    let vec = (0..n as u64)
        .map(|n| Hash256::right_padding_from(&n.to_le_bytes()))
        .collect::<Vec<_>>();

    for k in 0..n {
        let sub_vec = vec[0..k].to_vec();

        let fast_list = List::<Hash256, N>::try_from_iter(sub_vec.clone()).unwrap();
        let slow_list = List::<Hash256, N>::try_from_iter_slow(sub_vec.clone()).unwrap();

        assert_eq!(fast_list, slow_list);
        assert_eq!(fast_list.iter().cloned().collect::<Vec<_>>(), sub_vec);
    }
}

#[test]
fn build_packed_u64_list() {
    type N = U32;
    let n = N::to_usize();
    let vec = (0..n as u64).collect::<Vec<_>>();

    for k in 0..n {
        let sub_vec = vec[0..k].to_vec();

        let fast_list = List::<u64, N>::try_from_iter(sub_vec.clone()).unwrap();
        let slow_list = List::<u64, N>::try_from_iter(sub_vec.clone()).unwrap();

        assert_eq!(fast_list, slow_list);
        assert_eq!(fast_list.iter().cloned().collect::<Vec<_>>(), sub_vec);
    }
}