anchor.diff:    );
   end;
   
  +{ TestTFiniteStateMachine.TStateRecComparer }
  +
  +function TestTFiniteStateMachine.TStateRecComparer.Equals(const Left, Right : TStateRec) : Boolean;
  +begin
  +  Result := (Left.ID = Right.ID) and (Left.Flag = Right.Flag);
  +end;
  +
  +function TestTFiniteStateMachine.TStateRecComparer.GetHashCode(const Value : TStateRec) : Integer;
  +begin
  +  Result := THashBobJenkins.GetHashValue(Value, SizeOf(Value));
  +end;
  +
  +{ TestTFiniteStateMachine.TCommandRecComparer }
  +
  +function TestTFiniteStateMachine.TCommandRecComparer.Equals(const Left, Right : TCommandRec) : Boolean;
  +begin
  +  Result := (Left.ID = Right.ID) and (Left.Flag = Right.Flag);
  +end;
  +
  +function TestTFiniteStateMachine.TCommandRecComparer.GetHashCode(const Value : TCommandRec) : Integer;
  +begin
  +  Result := THashBobJenkins.GetHashValue(Value, SizeOf(Value));
  +end;
  +
   initialization
     // Register any test cases with the test runner
     RegisterTest(TestTFiniteStateMachine.Suite);
  
positive.code: 
  uses
    TestFramework,
    FIToolkit.Base.FiniteStateMachine.FSM, FIToolkit.Base.Exceptions;
  
  type
  
negative.code: 
        IFiniteStateMachine = IFiniteStateMachine<TStateType, TCommandType, ETestException>;
        TFiniteStateMachine = class (TFiniteStateMachine<TStateType, TCommandType, ETestException>);
  
        TStateRec = record
          ID : Integer;
          Flag : Boolean;
        end;
  
        TCommandRec = record
          ID : Integer;
          Flag : Boolean;
        end;
  
        TStateRecComparer = class (TEqualityComparer<TStateRec>)
          public
            function Equals(const Left, Right : TStateRec) : Boolean; override;
            function GetHashCode(const Value : TStateRec) : Integer; override;
        end;
  
        TCommandRecComparer = class (TEqualityComparer<TCommandRec>)
          public
            function Equals(const Left, Right : TCommandRec) : Boolean; override;
            function GetHashCode(const Value : TCommandRec) : Integer; override;
        end;
  
      const
        START_STATE  = stStart;
        FINISH_STATE = stFinish;
  
        STATE_RECS : array [0..2] of TStateRec =
          (
            (ID: 1; Flag: True),
            (ID: 2; Flag: False),
            (ID: 3; Flag: False)
          );
  
        COMMAND_RECS : array [0..1] of TCommandRec =
          (
            (ID: 1; Flag: False),
            (ID: 2; Flag: True)
          );
    strict private
      FFiniteStateMachine: IFiniteStateMachine;
    private
  