public void TestTransitionEquals() { var firstState = new State(); var secondState = new State(); var testTransition1 = new StateTransition(firstState, secondState, "TransitionTrigger"); var testTransition2 = new StateTransition(firstState, secondState, "TransitionTrigger"); var testTransition3 = new StateTransition(secondState, firstState, "TransitionTrigger"); Assert.True(testTransition1.Equals(testTransition2)); Assert.True(!testTransition1.Equals(testTransition3)); }
public void TestStateTransitionEquals() { var s1 = new StateTransition<SystemState, SystemStateEvent>(SystemState.WaitingForEvaluator, SystemStateEvent.AllContextsAreReady); var s2 = new StateTransition<SystemState, SystemStateEvent>(SystemState.WaitingForEvaluator, SystemStateEvent.AllContextsAreReady); Assert.True(s1.Equals(s2), "The two transitions should be equal"); }
public void TestStateTransitionEquals() { var s1 = new StateTransition <SystemState, SystemStateEvent>(SystemState.WaitingForEvaluator, SystemStateEvent.AllContextsAreReady); var s2 = new StateTransition <SystemState, SystemStateEvent>(SystemState.WaitingForEvaluator, SystemStateEvent.AllContextsAreReady); Assert.True(s1.Equals(s2), "The two transitions should be equal"); }
public void Equals_VariousStateTransitionsAndOperators_TestsCorrectly() { // Arrange var stateTransition1 = new StateTransition(new State(OrderStatus.Initialized), new Trigger(OrderEvent.Accepted)); var stateTransition2 = new StateTransition(new State(OrderStatus.Initialized), new Trigger(OrderEvent.Accepted)); var stateTransition3 = new StateTransition(new State(OrderStatus.Accepted), new Trigger(OrderEvent.Working)); // Act var result1 = stateTransition1.Equals(stateTransition2); var result2 = !stateTransition1.Equals(stateTransition3); var result3 = stateTransition1 == stateTransition2; var result4 = stateTransition1 != stateTransition3; var result5 = stateTransition1.GetHashCode() == stateTransition2.GetHashCode(); // Assert Assert.True(result1); Assert.True(result2); Assert.True(result3); Assert.True(result4); Assert.True(result5); }
private void ChangeStateInternal(T newState, StateTransition transition, float enterDuration, float exitDuration) { if (_stateLookup == null) { throw new Exception("States have not been configured, please call initialized before trying to set state"); } if (!_stateLookup.ContainsKey(newState)) { throw new Exception("No state with the name " + newState.ToString() + " can be found. Please make sure you are called the correct type the statemachine was initialized with"); } var nextState = _stateLookup[newState]; if (_currentState != null && _currentState == nextState) { return; } //if (_StateInQeue != null && _StateInQeue == nextState) return; if (transition.Equals(StateTransition.Safe)) { if (_currentState == null) //for initial run { _queHistory.Add(nextState.CreateNewRoutine(nextState.HasEnterRoutine ? enterDuration : 0f, true)); _StateInQeue = nextState; return; } if (_currentState.ExitInQue) //if current one has exit routine waiting { _queHistory.Add(_currentState.CreateNewRoutine(_currentState.HasExitRoutine ? exitDuration : 0f, false)); _queHistory.Add(nextState.CreateNewRoutine(nextState.HasEnterRoutine ? enterDuration : 0f, true)); _StateInQeue = nextState; } else //already in current exit routine { if (!_StateInQeue.GetState().Equals(nextState.GetState())) //if next state is not in qeue { _queHistory.Add(nextState.CreateNewRoutine(nextState.HasEnterRoutine ? enterDuration : 0f, true)); _StateInQeue = nextState; } } } else if (transition.Equals(StateTransition.Overwrite)) { if (_currentState == null) //for initial run { _queHistory.Add(nextState.CreateNewRoutine(nextState.HasEnterRoutine ? enterDuration : 0f, true)); _StateInQeue = nextState; } else { //todo test more on OnCancle.Invoke //_StateInQeue.EnterCancel.Invoke(); _queHistory.Cancle(); _currentState.Finally.Invoke(); _queHistory.Add(nextState.CreateNewRoutine(nextState.HasEnterRoutine ? enterDuration : 0f, true)); _StateInQeue = nextState; } } else //blend { if (_currentState == null) //for initial run { _queHistory.Add(nextState.CreateNewRoutine(nextState.HasEnterRoutine ? enterDuration : 0f, true)); _StateInQeue = nextState; return; } if (_currentState.ExitInQue) //if current one has exit routine, waiting { _queHistory.AddPair(_currentState.CreateNewRoutine(_currentState.HasExitRoutine ? exitDuration : 0f, false), nextState.CreateNewRoutine(nextState.HasEnterRoutine ? enterDuration : 0f, true)); _StateInQeue = nextState; } } }