| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- { $HDR$}
- {**********************************************************************}
- { Unit archived using Team Coherence }
- { Team Coherence is Copyright 2002 by Quality Software Components }
- { }
- { For further information / comments, visit our WEB site at }
- { http://www.TeamCoherence.com }
- {**********************************************************************}
- {}
- { $Log: 11267: IdStreamTest.pas
- {
- { Rev 1.0 11/12/2002 09:19:20 PM JPMugaas
- { Initial check in. Import from FTP VC.
- }
- unit IdStreamTest;
- interface
- uses IndyBox, classes;
- type
- TIdStreamTest = class(TIndyBox)
- procedure MakeFile(const AFileName, AEOL : String);
- procedure MakeFiles(APath : String);
- procedure TestStrings(const AStrings: String; ARes : TStrings);
- procedure TestStr(const AString : String);
- procedure FileReadTimeTest(const AFileName : String);
- procedure FileReadReliabilityTest(const AFileName : String);
- procedure FileTests;
- procedure Test; override;
- end;
- const
- FileNumLines = 10000; //10,000 lines for a speed test - INSANE!!!
- FileTextLine = 'test';
- implementation
- uses IdCoreGlobal, IdGlobal, IdStream, IdReadLineStream, SysUtils;
- const FNameEOL = 'CRLF.txt';
- FNameLFCR = 'LFCR.txt';
- FNameLF = 'LF.txt';
- FNameCR = 'CR.txt';
- const
- Line1 = 'Test';
- Line2 = 'Test Two';
- Line3 = 'Test Three';
- EmtrpyString : String = '';
- RegularString : String = Line1+EOL+Line2+EOL+Line3+EOL;
- LFCRString : String = Line1+LF+CR+Line2+LF+CR+Line3+LF+CR;
- CRString : String = Line1+CR+Line2+CR+Line3+CR;
- LFString : String = Line1+LF+Line2+LF+Line3+LF;
- CRLFString : String = Line1+LF+Line2+CR+Line3+LF;
- { TIdStreamTest }
- procedure TIdStreamTest.FileReadReliabilityTest(const AFileName: String);
- var m : TMemoryStream;
- sp : TIdReadLineStream;
- s : String;
- // StartTime : Cardinal;
- LineCount : Cardinal;
- const MaxLines = FileNumLines + 1;
- begin
- { m := TMemoryStream.Create;
- try
- m.LoadFromFile( AFileName );
- m.Position := 0;
- LineCount := 0;
- repeat
- s := TIdStream(m).ReadLn;
- Check(s=FileTextLine,Format('%s does not match %s - Line %d',[s,FileTextLine,LineCount]));
- inc(LineCount);
- until LineCount = MaxLines;
- Dec(LineCount);//correct for empty line returned at end
- Status(Format('TIdStream typecast- FileName: %s - %d millaseconds for %d line(s)',[AFileName,StartTime,LineCount]));
- finally
- FreeAndNil(m);
- end;
- }
- m := TMemoryStream.Create;
- try
- m.LoadFromFile( AFileName );
- m.Position := 0;
- LineCount := 0;
- sp := TIdReadLineStream.Create(m);
- repeat
- s := sp.ReadLn;
- inc(LineCount);
- until LineCount = MaxLines;
- // Dec(LineCount);//correct for empty line returned at end
- finally
- FreeAndNil(m);
- FreeAndNil(sp);
- end;
- end;
- procedure TIdStreamTest.FileReadTimeTest(const AFileName : String);
- var m : TMemoryStream;
- sp : TIdReadLineStream;
- s : String;
- StartTime : Cardinal;
- LineCount : Cardinal;
- const MaxLines = FileNumLines + 1;
- begin
- m := TMemoryStream.Create;
- try
- m.LoadFromFile( AFileName );
- m.Position := 0;
- LineCount := 0;
- StartTime := GetTickCount;
- repeat
- s := TIdStream(m).ReadLn;
- inc(LineCount);
- until LineCount = MaxLines;
- StartTime := GetTickCount - StartTime;
- Dec(LineCount);//correct for empty line returned at end
- Status(Format('TIdStream typecast- FileName: %s - %d millaseconds for %d line(s)',[AFileName,StartTime,LineCount]));
- finally
- FreeAndNil(m);
- end;
- m := TMemoryStream.Create;
- try
- m.LoadFromFile( AFileName );
- m.Position := 0;
- LineCount := 0;
- sp := TIdReadLineStream.Create(m);
- StartTime := GetTickCount;
- repeat
- s := sp.ReadLn;
- inc(LineCount);
- until LineCount = MaxLines;
- StartTime := GetTickCount - StartTime;
- Dec(LineCount);//correct for empty line returned at end
- Status(Format('TIdReadLineStream - FileName: %s - %d millaseconds for %d line(s)',[AFileName,StartTime,LineCount]));
- finally
- FreeAndNil(m);
- FreeAndNil(sp);
- end;
- end;
- procedure TIdStreamTest.FileTests;
- var
- LPath : String;
- begin
- LPath := IncludeTrailingSlash(GetTempDir);
- MakeFiles(LPath);
- end;
- procedure TIdStreamTest.MakeFile(const AFileName, AEOL: String);
- var i : Cardinal;
- f : Text;
- begin
- AssignFile(f,AFileName);
- Rewrite(f);
- try
- for i := 1 to FileNumLines do
- begin
- Write(f,FileTextLine+AEOL);
- end;
- finally
- CloseFile(f);
- end;
- end;
- procedure TIdStreamTest.MakeFiles(APath : String);
- begin
- MakeFile(APath+FNameEOL,EOL);
- MakeFile(APath+FNameLFCR,LF+CR);
- MakeFile(APath+FNameLF,LF);
- MakeFile(APath+FNameCR,CR);
- FileReadTimeTest(APath+FNameEOL);
- FileReadReliabilityTest(APath+FNameEOL);
- FileReadTimeTest(APath+FNameLFCR);
- FileReadReliabilityTest(APath+FNameLFCR);
- FileReadTimeTest(APath+FNameLF);
- FileReadReliabilityTest(APath+FNameLF);
- FileReadTimeTest(APath+FNameCR);
- FileReadReliabilityTest(APath+FNameCR);
- DeleteFile(APath+FNameEOL);
- DeleteFile(APath+FNameLFCR);
- DeleteFile(APath+FNameLF);
- DeleteFile(APath+FNameCR);
- end;
- procedure TIdStreamTest.Test;
- var st : TStrings;
- begin
- inherited;
- // emtpy string test
- Status('Emtpy string');
- TestStr(EmtrpyString);
- st := TStringList.Create;
- try
- st.Add(Line1);
- st.Add(Line2);
- st.Add(Line3);
- // Status('Lines with CRLF endings');
- // TestStrings(RegularString,st);
- Status('Lines with CR endings');
- TestStrings(CRString,st);
- Status('Lines with LF endings');
- TestStrings(LFString,st);
- Status('Lines with CR or LF endings');
- TestStrings(CRLFString,st);
- st.Text := StringReplace(st.Text,EOL,EOL+EOL,[rfReplaceAll]);
- Status('Lines with LFCR line-ending');
- TestStrings(LFCRString,st);
- finally
- FreeAndNil(st);
- end;
- FileTests;
- end;
- procedure TIdStreamTest.TestStr(const AString : String);
- var M : TStream;
- s : String;
- begin
- m := TMemoryStream.Create;
- try
- if AString<>'' then
- begin
- m.Write(AString[1],Length(AString));
- end;
- m.Position := 0;
- s := TIdStream(m).ReadLn;
- Check((s = AString),Format('%s does not match %s',[s, AString]));
- finally
- FreeAndNil(m);
- end;
- end;
- procedure TIdStreamTest.TestStrings(const AStrings: String; ARes : TStrings);
- var M : TStream;
- s : String;
- i : Integer;
- sp : TIdReadLineStream;
- begin
- sp := nil;
- m := TMemoryStream.Create;
- try
- if AStrings<>'' then
- begin
- m.Write(AStrings[1],Length(AStrings));
- end;
- m.Position := 0;
- for i := 0 to ARes.Count-1 do
- begin
- s := TIdStream(m).ReadLn;
- Check((s = ARes[i]),Format('%s does not match %s',[s, ARes[i] ]));
- end;
- finally
- FreeAndNil(m);
- end;
- m := TMemoryStream.Create;
- try
- if AStrings<>'' then
- begin
- m.Write(AStrings[1],Length(AStrings));
- end;
- m.Position := 0;
- sp := TIdReadLineStream.Create(m);
- for i := 0 to ARes.Count-1 do
- begin
- s := sp.ReadLn;
- Check((s = ARes[i]),Format('%s does not match %s',[s, ARes[i] ]));
- end;
- finally
- FreeAndNil(m);
- FreeAndNil(sp);
- end;
- end;
- initialization
- TIndyBox.RegisterBox(TIdStreamTest, 'IdStream Test', 'Misc');
- end.
|