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);
                }
            }
        }