public void On_adding_one_leaf_count_goes_up_to_1() { MerkleTree merkleTree = new ShaMerkleTree(new MemDb()); merkleTree.Insert(_testLeaves[0]); merkleTree.Count.Should().Be(1); }
public async Task Can_safely_insert_concurrently() { MerkleTree merkleTree = new ShaMerkleTree(new MemDb()); uint iterations = 1000; uint concurrentTasksCount = 8; Action keepAdding = () => { for (int i = 0; i < iterations; i++) { merkleTree.Insert(_testLeaves[0]); } }; Task[] tasks = new Task[concurrentTasksCount]; for (int i = 0; i < tasks.Length; i++) { tasks[i] = new Task(keepAdding); } for (int i = 0; i < tasks.Length; i++) { tasks[i].Start(); } await Task.WhenAll(tasks); merkleTree.Count.Should().Be(concurrentTasksCount * iterations); }
public void When_inserting_more_leaves_count_keeps_growing(int numberOfLeaves) { MerkleTree merkleTree = new ShaMerkleTree(new MemDb()); for (uint i = 0; i < numberOfLeaves; i++) { merkleTree.Insert(_testLeaves[i]); merkleTree.Count.Should().Be(i + 1); } }
public void Can_restore_count_from_the_database() { MemDb memDb = new MemDb(); MerkleTree merkleTree = new ShaMerkleTree(memDb); merkleTree.Insert(_testLeaves[0]); MerkleTree merkleTreeRestored = new ShaMerkleTree(memDb); merkleTreeRestored.Count.Should().Be(1); }
public void Can_get_proof_on_a_populated_trie_on_an_index(uint nodesCount) { MerkleTree merkleTree = new ShaMerkleTree(new MemDb()); for (int i = 0; i < nodesCount; i++) { merkleTree.Insert(_testLeaves[0]); } MerkleTreeNode[] proof = merkleTree.GetProof(0); proof.Should().HaveCount(MerkleTree.TreeDepth - 1); for (int proofLevel = 0; proofLevel < MerkleTree.TreeDepth - 1; proofLevel++) { if (nodesCount > 1 >> proofLevel) { proof[proofLevel].Should().NotBe(ShaMerkleTree.ZeroHashes[proofLevel], proofLevel.ToString()); } else { proof[proofLevel].Hash.Should().Be(Bytes32.Wrap(ShaMerkleTree.ZeroHashes[proofLevel]), proofLevel.ToString()); } } }
public void Initially_count_is_0() { MerkleTree merkleTree = new ShaMerkleTree(new MemDb()); merkleTree.Count.Should().Be(0); }
public void Throws_on_get_proof_on_the_leaf_index_out_of_bounds(uint leafIndex) { MerkleTree merkleTree = new ShaMerkleTree(new MemDb()); Assert.Throws <IndexOutOfRangeException>(() => merkleTree.GetProof(leafIndex)); }