// Mementos are used to roll back states arbitrarily
        // A memento is simply a token/handle class with (typically) no functions of its own
        // A memento is not required to expose directly the state(s) to which it reverts the system
        // Can be used to implement undo/redo
        public static void AdvancedDemo()
        {
            var ba = new BankAccountV2(100);

            ba.Deposit(50);
            ba.Deposit(25);
            WriteLine(ba);

            ba.Undo();
            WriteLine($"Undo 1: {ba}");
            ba.Undo();
            WriteLine($"Undo 2: {ba}");
            ba.Redo();
            WriteLine($"Redo 2: {ba}");
        }
        public void DepositAndReturnBalance_Input_ReturnsDepositedBalance()
        {
            //for (var i = 0; i < 100; i++)
            //{
            //Arrange
            StaticKernel.Instance.Bind <IBalanceRepository>().To <TestBalanceRepository>();
            var bankAccount = new BankAccountV2(123);
            //var bankAccount = new BankAccountV3(123, new TestBalanceRepository());

            //Act
            var result = bankAccount.DepositAndReturnBalance(12);

            //Assert
            Assert.AreEqual(12, result);
            //}
        }
        public void DepositAndReturnBalance_Input_WhenDatabaseNotAvailable_ThrowsException()
        {
            //for (var i = 0; i < 100; i++)
            //{
            //Arrange
            StaticKernel.Instance.Bind <IBalanceRepository>().To <TestFailingBalanceRepository>();
            var bankAccount = new BankAccountV2(123);
            //var bankAccount = new BankAccountV3(123, new TestFailBalanceRepository());

            //Act
            TestDelegate testDelegate = () => bankAccount.DepositAndReturnBalance(12);

            //Assert
            Assert.That(testDelegate, Throws.Exception);
            //}
        }