anchor.diff:      procedure TestRemoveAndPack;
       {$ENDIF}
       procedure TestAddIterateRemovingCurrentNode;
  +    procedure TestIterateWithInvalidIterator_Fails;
  +    procedure TestIterateTryRemoveNonExistingNode_Success;
       procedure TestStressRemoveAndPack;
     end;
   
  
positive.code:   CheckEquals('Hello World', AKey, 'AKey doesn''t match');
    Check(AValue = Pointer(Self), 'Value of AValue doesn''t match');
    Check(not FStrHashTrie.Next(AIterator, AKey, AValue), 'Value of FStrHashTrie.Next doesn''t match');
  end;
  
  procedure TStringHashTrieTest.TestAutoFreeValue;
  
negative.code:   CheckEquals(0, FStrHashTrie.Count, 'There should be no nodes left');
  end;
  
  procedure TStringHashTrieTest.TestIterateWithInvalidIterator_Fails;
  var
    It : THashTrieIterator;
    AKey : AnsiString;
    AValue : Pointer;
  begin
    ExpectedException := EHashTrie;
    FStrHashTrie.Add('Hello World');
    FStrHashTrie.Add('Hello World2');
    FStrHashTrie.InitIterator(It);
    Check(FStrHashTrie.Next(It, AKey, AValue), 'First call to Next should be true');
    FStrHashTrie.Remove('Hello World');
    FStrHashTrie.Next(It, AKey, AValue);
  end;
  
  procedure TStringHashTrieTest.TestIterateTryRemoveNonExistingNode_Success;
  var
    It : THashTrieIterator;
    AKey : AnsiString;
    AValue : Pointer;
  begin
    FStrHashTrie.Add('Hello World');
    FStrHashTrie.Add('Hello World2');
    FStrHashTrie.InitIterator(It);
    Check(FStrHashTrie.Next(It, AKey, AValue), 'First call to Next should be true');
    FStrHashTrie.Remove('Hello World3');
    Check(FStrHashTrie.Next(It, AKey, AValue), 'Second call should succeed');
  end;
  
  procedure TStringHashTrieTest.TestRemoveAndPack;
  var
    Value : Pointer;
  