public void TestSaveUndoSaveRedo()
        {
            var stack = new TransactionStack(5);

            using (var manager = new DirtiableManager(stack))
            {
                var dirtiable = new SimpleDirtiable();
                var operation = new SimpleDirtyingOperation(dirtiable.Yield());
                using (stack.CreateTransaction())
                {
                    stack.PushOperation(operation);
                }
                Assert.AreEqual(true, dirtiable.IsDirty);
                manager.CreateSnapshot();
                Assert.AreEqual(false, dirtiable.IsDirty);
                stack.Rollback();
                Assert.AreEqual(true, dirtiable.IsDirty);
                manager.CreateSnapshot();
                Assert.AreEqual(false, dirtiable.IsDirty);
                stack.Rollforward();
                Assert.AreEqual(true, dirtiable.IsDirty);
                manager.CreateSnapshot();
                Assert.AreEqual(false, dirtiable.IsDirty);
            }
        }
        public void TestDoAction()
        {
            var stack = new TransactionStack(5);

            using (new DirtiableManager(stack))
            {
                var dirtiable = new SimpleDirtiable();
                using (stack.CreateTransaction())
                {
                    var operation = new SimpleDirtyingOperation(dirtiable.Yield());
                    stack.PushOperation(operation);
                }
                Assert.AreEqual(true, dirtiable.IsDirty);
            }
        }