public void GetHistoricalTree_return_expected_results([ValueSource(nameof(HistoricalTreeTestCases))] GetHistoricalLeavesTest test) { var address = TestItem.AddressA; var logFinder = Substitute.For <ILogFinder>(); var mainDb = new MemDb(); var metadataDataDb = new MemDb(); var baselineTreeHelper = new BaselineTreeHelper(logFinder, mainDb, metadataDataDb, LimboNoErrorLogger.Instance); var baselineTree = new ShaBaselineTree(mainDb, metadataDataDb, address.Bytes, BaselineModule.TruncationLength, LimboNoErrorLogger.Instance); for (int i = 0; i < test.Blocks.Length; i++) { var block = test.Blocks[i]; for (int j = 0; j < block.Leaves.Length; j++) { baselineTree.Insert(block.Leaves[j]); } baselineTree.MemorizeCurrentCount(TestItem.Keccaks[block.BlockNumber], block.BlockNumber, (uint)block.Leaves.Length); } var historicalTree = baselineTreeHelper.CreateHistoricalTree(address, 1); Assert.AreNotEqual(historicalTree.Count, baselineTree.Count); Assert.AreNotEqual(historicalTree.Root, baselineTree.Root); }
public void GetHistoricalLeaves_return_expected_results([ValueSource(nameof(GetHistoricalLeafTestCases))] GetHistoricalLeavesTest test) { var logFinder = Substitute.For <ILogFinder>(); var mainDb = new MemDb(); var metadaDataDb = new MemDb(); var baselineTreeHelper = new BaselineTreeHelper(logFinder, new MemDb(), new MemDb(), LimboNoErrorLogger.Instance); var baselineTree = new ShaBaselineTree(mainDb, metadaDataDb, new byte[] { }, BaselineModule.TruncationLength, LimboNoErrorLogger.Instance); for (int i = 0; i < test.Blocks.Length; i++) { var block = test.Blocks[i]; for (int j = 0; j < block.Leaves.Length; j++) { baselineTree.Insert(block.Leaves[j]); } baselineTree.MemorizeCurrentCount(TestItem.Keccaks[block.BlockNumber], block.BlockNumber, (uint)block.Leaves.Length); } for (int i = 0; i < test.ExpectedHashes.Length; i++) { var leavesAndBlocks = test.LeavesAndBlocksQueries[i]; var leaves = baselineTreeHelper.GetHistoricalLeaves(baselineTree, leavesAndBlocks.LeavesIndexes, leavesAndBlocks.BlockNumber); for (int j = 0; j < leavesAndBlocks.LeavesIndexes.Length; j++) { Assert.AreEqual(test.ExpectedHashes[i][j], leaves[j].Hash); } } }