anchor.diff:  function TFiniteStateMachine<TState, TCommand, ErrorClass>.AddTransition(const FromState, ToState : TState;
     const OnCommand : TCommand; const OnEnter : TOnEnterStateProc; const OnExit : TOnExitStateProc) : IFiniteStateMachine;
   begin
  +  Result := Self;
  +
     FTransitionTable.Add(
       TTransition.Create(FromState, OnCommand, FStateComparer, FCommandComparer, OnEnter, OnExit), ToState);
   end;
  
positive.code: 
  constructor TFiniteStateMachine<TState, TCommand, ErrorClass>.TTransition.Create(const AFromState : TState;
    const AOnCommand : TCommand; const StateComparer : IStateComparer; const CommandComparer : ICommandComparer;
    const OnEnter : TOnEnterStateMethod; const OnExit : TOnExitStateMethod);
  begin
    Create(AFromState, AOnCommand, StateComparer, CommandComparer);
  
    FOnEnterMethod := OnEnter;
    FOnExitMethod := OnExit;
  end;
  
  constructor TFiniteStateMachine<TState, TCommand, ErrorClass>.TTransition.Create(const AFromState : TState;
    const AOnCommand : TCommand; const StateComparer : IStateComparer; const CommandComparer : ICommandComparer;
    const OnEnter : TOnEnterStateProc; const OnExit : TOnExitStateProc);
  begin
    Create(AFromState, AOnCommand, StateComparer, CommandComparer);
  
    FOnEnterProc := OnEnter;
    FOnExitProc := OnExit;
  end;
  
  function TFiniteStateMachine<TState, TCommand, ErrorClass>.TTransition.Equals(Obj : TObject) : Boolean;
  
negative.code:         end;
  
          TTransitionTable = class (TObjectDictionary<TTransition, TState>);
      strict private
        FCommandComparer : ICommandComparer;
        FCurrentState : TState;
  