fn simple_test()

in merkledb/src/tests.rs [18:56]


    fn simple_test() {
        let mut mdb = MerkleMemDB::default();
        let h1 = compute_data_hash("hello world".as_bytes());
        let h2 = compute_data_hash("pikachu".as_bytes());
        let chunks = vec![ChunkInfo { hash: h1, length: 11 }, ChunkInfo { hash: h2, length: 7 }];

        let mut staging = mdb.start_insertion_staging();
        mdb.add_file(&mut staging, &chunks);
        let res = mdb.finalize(staging);
        let nodes = mdb.find_all_leaves(&res).unwrap();
        assert_eq!(nodes.len(), 2);
        assert_eq!(*nodes[0].hash(), chunks[0].hash);
        assert_eq!(*nodes[1].hash(), chunks[1].hash);
        assert_eq!(nodes[0].len(), chunks[0].length);
        assert_eq!(nodes[1].len(), chunks[1].length);
        assert_ne!(nodes[0].id(), nodes[1].id());

        // we should get back original ids if we insert again
        let mut staging = mdb.start_insertion_staging();
        mdb.add_file(&mut staging, &chunks);
        let res = mdb.finalize(staging);
        let nodes2 = mdb.find_all_leaves(&res).unwrap();
        assert_eq!(nodes2[0].id(), nodes[0].id());
        assert_eq!(nodes2[1].id(), nodes[1].id());

        // search by hash()
        let nodes3 = [mdb.find_node(&h1).unwrap(), mdb.find_node(&h2).unwrap()];
        assert_eq!(nodes3[0].id(), nodes[0].id());
        assert_eq!(nodes3[1].id(), nodes[1].id());

        // search by id
        let nodes4 = [
            mdb.find_node_by_id(nodes[0].id()).unwrap(),
            mdb.find_node_by_id(nodes[1].id()).unwrap(),
        ];
        assert_eq!(nodes4[0].id(), nodes[0].id());
        assert_eq!(nodes4[1].id(), nodes[1].id());
        assert!(mdb.all_invariant_checks());
    }