fn test_db_union()

in merkledb/src/tests.rs [195:236]


    fn test_db_union() {
        let mut mdb = MerkleMemDB::default();
        let f1hash: MerkleHash;
        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);
            f1hash = *mdb.finalize(staging).hash();
        }

        let h3 = compute_data_hash("poo".as_bytes());
        let mut mdb2 = MerkleMemDB::default();
        let f2hash: MerkleHash;
        {
            let chunks = vec![ChunkInfo { hash: h1, length: 11 }, ChunkInfo { hash: h3, length: 3 }];

            let mut staging = mdb2.start_insertion_staging();
            mdb2.add_file(&mut staging, &chunks);
            f2hash = *mdb2.finalize(staging).hash();
        }

        mdb.union_with(&mdb2);
        mdb.union_finalize().unwrap();
        // file 1 node
        {
            let nodes = mdb.find_all_leaves(&mdb.find_node(&f1hash).unwrap()).unwrap();
            assert_eq!(nodes.len(), 2);
            assert_eq!(*nodes[0].hash(), h1);
            assert_eq!(*nodes[1].hash(), h2);
        }
        // file 2 nodes
        {
            let nodes = mdb.find_all_leaves(&mdb.find_node(&f2hash).unwrap()).unwrap();
            assert_eq!(nodes.len(), 2);
            assert_eq!(*nodes[0].hash(), h1);
            assert_eq!(*nodes[1].hash(), h3);
        }
        assert!(mdb.all_invariant_checks());
    }