public void TestStates() { StateManager manager = new StateManager(new TestState(0)); manager.push(new TestState(1)); Assert.AreEqual(((TestState)manager.pop()).value, 1); Assert.AreEqual(((TestState)manager.top).value, 0); manager.push(new TestState(1)); manager.push(new TestState(2)); manager.push(new TestState(3)); manager.push(new TestState(4)); manager.push(new TestState(5)); manager.push(new TestState(6)); manager.push(new TestState(7)); Assert.AreEqual(manager.update(StateManager.UpdateType.BeforeInput), false); Assert.IsTrue(Enumerable.SequenceEqual(TestState.stateUpdateOrder, new List<int>() { 7, 6, 5, 4 })); TestState.stateUpdateOrder = new List<int>(); Assert.AreEqual(manager.update(StateManager.UpdateType.AfterInput), true); Assert.IsTrue(Enumerable.SequenceEqual(TestState.stateUpdateOrder, new List<int>() { 7, 6, 5, 4, 3, 2 })); TestState.stateUpdateOrder = new List<int>(); Assert.AreEqual(manager.update(StateManager.UpdateType.AfterFrame), true); Assert.IsTrue(Enumerable.SequenceEqual(TestState.stateUpdateOrder, new List<int>() { 7, 6, 5, 4, 3, 2, 1, 0 })); TestState.stateUpdateOrder = new List<int>(); manager.draw(); Assert.IsTrue(Enumerable.SequenceEqual(TestState.stateDrawOrder, new List<int>() { 0, 1, 2, 3, 4, 5, 6 })); TestState.stateDrawOrder = new List<int>(); manager.pop(); manager.pop(); manager.pop(); manager.draw(); Assert.IsTrue(Enumerable.SequenceEqual(TestState.stateDrawOrder, new List<int>() { 0, 1, 2, 3, 4 })); TestState.stateDrawOrder = new List<int>(); }