anchor.diff:        procedure AfterExecute(const Command : TCommand); virtual;
         procedure BeforeExecute(const Command : TCommand); virtual;
         function  FindTransition(const FromState : TState; const OnCommand : TCommand) : TTransition;
  +      function  GetReachableState(const FromState : TState; const OnCommand : TCommand;
  +        out Transition : TTransition) : TState; overload;
         function  HasTransition(const FromState : TState; const OnCommand : TCommand;
           out Found : TTransition) : Boolean; overload;
       public
  
positive.code: 
  function TFiniteStateMachine<TState, TCommand, ErrorClass>.GetReachableState(const FromState : TState;
    const OnCommand : TCommand) : TState;
  begin
    //TODO: implement
  end;
  
  function TFiniteStateMachine<TState, TCommand, ErrorClass>.GetReachableState(const OnCommand : TCommand) : TState;
  begin
    Result := GetReachableState(FCurrentState, OnCommand);
  end;
  
  function TFiniteStateMachine<TState, TCommand, ErrorClass>.HasTransition(const FromState : TState;
  
negative.code: end;
  
  function TFiniteStateMachine<TState, TCommand, ErrorClass>.Execute(const Command : TCommand) : IFiniteStateMachine;
    var
      NewState : TState;
      Transition : TTransition;
  begin
    Result := Self;
    NewState := GetReachableState(FCurrentState, Command, Transition);
  
    BeforeExecute(Command);
    Transition.PerformExitStateAction(NewState);
    FPreviousState := FCurrentState;
    FCurrentState  := NewState;
    Transition.PerformEnterStateAction(NewState);
    AfterExecute(Command);
  
    //TODO: raise outer exception
  end;
  
  function TFiniteStateMachine<TState, TCommand, ErrorClass>.FindTransition(const FromState : TState;
  