public void GetPreviousDifficultyUpdateInformation_Calls_BlockchainCurrentHeight()
        {
            var difficultyUpdateCycle = 10;
            var blockchainHeight      = -1;
            var selfCallingMock       = new Mock <DifficultyCalculator>(MockBehavior.Strict);
            var blockchainMock        = new Mock <Blockchain>(MockBehavior.Strict, new object[] { _netId });

            blockchainMock.Setup(m => m.CurrentHeight).Returns(blockchainHeight);
            var blockchain = blockchainMock.Object;
            BlockDifficultyUpdate expectedInformation = new BlockDifficultyUpdate(blockchain, -1, -1);

            selfCallingMock.Setup(m => m.GetPreviousDifficultyUpdateInformation(blockchain, difficultyUpdateCycle)).CallBase();
            selfCallingMock.Setup(m => m.GetPreviousDifficultyUpdateInformation(blockchainHeight, blockchain, difficultyUpdateCycle)).Returns(expectedInformation);

            var result = selfCallingMock.Object.GetPreviousDifficultyUpdateInformation(blockchain, difficultyUpdateCycle);

            Assert.AreEqual(expectedInformation, result);
            selfCallingMock.VerifyAll();
            blockchainMock.VerifyAll();
        }
        public void GetPreviousDifficultyUpdateInformationFull_ForHeight62_ReturnsCorrectInformation()
        {
            var difficultyUpdateCycle = 10;
            var blockchainHeight      = 63; // = index and that starts at zero.
            var sut    = new DifficultyCalculator();
            var blocks = new List <Block>();

            // Add 64 blocks
            for (int i = 10; i < 641; i = i + 10)
            {
                blocks.Add(new Block(new BlockHeader(_netId, _protocol, "abc", i, ""), new List <AbstractTransaction>()));
            }
            var blockchain = new Blockchain(blocks, _netId);

            BlockDifficultyUpdate result = sut.GetPreviousDifficultyUpdateInformation(blockchainHeight, blockchain, difficultyUpdateCycle);

            Assert.AreEqual(blockchain, result.Blockchain);
            Assert.AreEqual(50, result.BeginHeight);
            Assert.AreEqual(59, result.EndHeight);
            Assert.AreEqual(90, result.TotalSecondsForBlocks); // It took 90 seconds to create 9 blocks
        }