public void Should_manage_transactions_4() { var stack = new StackWithTransactions <int>(); stack.Push(2); stack.Push(4); stack.Push(9); stack.Begin(); stack.Push(6); stack.Push(5); Assert.True(stack.Commit()); Assert.False(stack.Rollback()); Assert.Equal(5, stack.Top()); stack.Begin(); stack.Push(4); stack.Push(3); stack.Begin(); stack.Push(2); stack.Push(1); Assert.Equal(1, stack.Top()); stack.Pop(); Assert.Equal(2, stack.Top()); Assert.True(stack.Rollback()); Assert.Equal(3, stack.Top()); Assert.True(stack.Commit()); stack.Pop(); Assert.Equal(4, stack.Top()); Assert.False(stack.Commit()); }
public void Should_return_false_when_rollbacking_empty_stack() { var stack = new StackWithTransactions <int>(); Assert.False(stack.Rollback()); Assert.False(stack.Rollback()); Assert.False(stack.Rollback()); Assert.False(stack.Rollback()); Assert.False(stack.Rollback()); }
public void Should_manage_embedded_transactions() { var stack = new StackWithTransactions <int>(); stack.Push(4); stack.Begin(); // start transaction 1 stack.Push(7); // stack: [4,7] stack.Begin(); // start transaction 2 stack.Push(2); // stack: [4,7,2] Assert.True(stack.Rollback()); // rollback transaction 2 Assert.Equal(7, stack.Top()); // stack: [4,7] stack.Begin(); // start transaction 3 stack.Push(10); // stack: [4,7,10] Assert.True(stack.Commit()); // transaction 3 is committed Assert.Equal(10, stack.Top()); Assert.True(stack.Rollback()); // rollback transaction 1 Assert.Equal(4, stack.Top()); // stack: [4] Assert.False(stack.Commit()); // there is no open transaction }
public void Should_manage_transactions_with_begin_rollback_and_commit() { var stack = new StackWithTransactions <int>(); stack.Begin(); stack.Push(1); stack.Push(2); // stack [1, 2] Assert.Equal(2, stack.Top()); Assert.True(stack.Rollback()); // stack [] Assert.Equal(0, stack.Top()); stack.Push(1); stack.Begin(); stack.Push(1); stack.Push(2); // stack [1, 1,2] Assert.Equal(2, stack.Top()); stack.Pop(); // stack [1, 1] Assert.Equal(1, stack.Top()); stack.Push(5); // stack [1,1,5] Assert.Equal(5, stack.Top()); Assert.True(stack.Commit()); // stack [1,1, 5] Assert.Equal(5, stack.Top()); Assert.False(stack.Rollback()); // no transaction Assert.Equal(5, stack.Top()); stack.Pop(); Assert.Equal(1, stack.Top()); stack.Pop(); Assert.Equal(1, stack.Top()); stack.Pop(); Assert.Equal(0, stack.Top()); stack.Pop(); Assert.Equal(0, stack.Top()); }