fn hash_with_writes_of_different_sizes()

in src/defs/eif_hasher.rs [295:325]


    fn hash_with_writes_of_different_sizes<T: Digest + Debug + Write + Clone>(
        hasher_alg: T,
        block_size: usize,
    ) {
        let data = vec![78u8; block_size * 256];
        let mut hasher_in_one_go = EifHasher::new(block_size, hasher_alg.clone()).unwrap();
        let mut hasher_in_random_chunks = EifHasher::new(block_size, hasher_alg.clone()).unwrap();
        let mut hasher_one_byte_at_atime = EifHasher::new(block_size, hasher_alg).unwrap();

        hasher_in_one_go.write_all(&data).unwrap();
        let mut remaining = &data[..];
        let mut iteration = 1;
        while !remaining.is_empty() {
            let chunk_size = std::cmp::max(1, (iteration % remaining.len()) % block_size);
            let (to_be_written, unhandled) = remaining.split_at(chunk_size);
            hasher_in_random_chunks.write_all(to_be_written).unwrap();

            remaining = unhandled;
            iteration += 1987;
        }

        for x in data {
            hasher_one_byte_at_atime.write_all(&[x]).unwrap();
        }

        let result1 = hasher_in_one_go.finalize_reset().unwrap();
        let result2 = hasher_in_random_chunks.finalize_reset().unwrap();
        let result3 = hasher_one_byte_at_atime.finalize_reset().unwrap();
        assert_eq!(result1, result2);
        assert_eq!(result1, result3);
    }