123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751 |
- { Program to test system unit string routines
- Tested against Delphi 3 and (where possible)
- against Borland Pascal v7.01
- }
- program tstring;
- {$R+}
- {$Q+}
- {$ifndef MACOS}
- {$APPTYPE CONSOLE}
- {$else}
- {$APPTYPE TOOL}
- {$endif}
- {$ifdef fpc}
- {$ifndef ver1_0}
- {$define haswidestring}
- {$endif}
- {$else}
- {$ifndef ver70}
- {$define haswidestring}
- {$endif}
- {$endif}
- var
- str1 : shortstring;
- str2 : ansistring;
- {$ifdef haswidestring}
- str3 : widestring;
- {$endif}
- procedure fail;
- begin
- WriteLn('Failed!');
- Halt(1);
- end;
- procedure test_stringofchar;
- var
- _result : boolean;
- i: integer;
- begin
- Write('StringOfChar tests...');
- _result := true;
- {************************* shortstring ************************}
- { try to fill a shortstring with a null character }
- str1:='';
- str1:=stringofchar(#0,0);
- if length(str1)<>0 then
- _result := false;
- str1:='';
- str1:='';
- str1:=stringofchar('a',-1);
- if length(str1)<>0 then
- _result := false;
- str1:='';
- { try to fill a shortstring with more chars than possible }
- str1:=stringofchar('c',300);
- if length(str1)<>255 then
- _result := false;
- { try to fill a shortstring with no chars }
- str1:='';
- str1:=stringofchar('c',0);
- if length(str1)<>0 then
- _result := false;
- { try to fill a shortstring chars }
- str1:='';
- str1:=stringofchar('a',255);
- for i:=1 to 255 do
- if str1[i] <> 'a' then
- _result := false;
- {************************* ansistring *************************}
- { try to fill a ansistring with a null character }
- str2:='';
- str2:=stringofchar(#0,0);
- if length(str2)<>0 then
- _result := false;
- str2:='';
- str2:=stringofchar('a',-1);
- if length(str2)<>0 then
- _result := false;
- { try to fill a ansistring with no chars }
- str2:='';
- str2:=stringofchar('c',0);
- if length(str2)<>0 then
- _result := false;
- { try to fill an ansistring chars }
- str2:='';
- str2:=stringofchar('a',1024);
- for i:=1 to 1024 do
- if str2[i] <> 'a' then
- _result := false;
- {************************* widestring *************************}
- {$ifdef haswidestring}
- { try to fill a widestring with a null character }
- str3:='';
- str3:=stringofchar(#0,0);
- if length(str3)<>0 then
- _result := false;
- str3:='';
- { try to fill a widestring with no chars }
- str3:='';
- str3:=stringofchar('c',0);
- if length(str3)<>0 then
- _result := false;
- { try to fill an widestring chars }
- str3:='';
- str3:=stringofchar('a',1024);
- for i:=1 to 1024 do
- if str3[i] <> 'a' then
- _result := false;
- str3:='';
- str3:=stringofchar('a',-1);
- if length(str3)<>0 then
- _result := false;
- {$endif}
- if not _result then
- fail
- else
- WriteLn('Success!');
- end;
- procedure test_delete;
- var
- _result : boolean;
- i: integer;
- begin
- Write('Delete tests...');
- _result := true;
- {************************* shortstring ************************}
- { try to delete from an empty string }
- str1:='';
- Delete(str1,0,12);
- if str1<>'' then
- _result := false;
- str1:='Hello';
- Delete(str1,0,12);
- if str1<>'Hello' then
- _result := false;
- str1:='Hello';
- Delete(str1,1,12);
- if str1<>'' then
- _result := false;
- str1:='Hello';
- Delete(str1,12,255);
- if str1<>'Hello' then
- _result := false;
- str1:='Hello';
- Delete(str1,-1,255);
- if str1<>'Hello' then
- _result := false;
- str1:='Hello';
- Delete(str1,1,-12);
- if str1<>'Hello' then
- _result := false;
- {************************* ansistring *************************}
- { try to delete from an empty string }
- str2:='';
- Delete(str2,0,12);
- if str2<>'' then
- _result := false;
- str2:='Hello';
- Delete(str2,0,12);
- if str2<>'Hello' then
- _result := false;
- str2:='Hello';
- Delete(str2,1,12);
- if str2<>'' then
- _result := false;
- str2:='Hello';
- Delete(str2,12,255);
- if str2<>'Hello' then
- _result := false;
- STR2:='Hello';
- Delete(STR2,-1,255);
- if STR2<>'Hello' then
- _result := false;
- STR2:='Hello';
- Delete(STR2,1,-12);
- if STR2<>'Hello' then
- _result := false;
- {************************* widestring *************************}
- {$ifdef haswidestring}
- { try to delete from an empty string }
- str3:='';
- Delete(str3,0,12);
- if str3<>'' then
- _result := false;
- str3:='Hello';
- Delete(str3,0,12);
- if str3<>'Hello' then
- _result := false;
- str3:='Hello';
- Delete(str3,1,12);
- if str3<>'' then
- _result := false;
- str3:='Hello';
- Delete(str3,12,255);
- if str3<>'Hello' then
- _result := false;
- str3:='Hello';
- Delete(str3,-1,255);
- if str3<>'Hello' then
- _result := false;
- str3:='Hello';
- Delete(str3,1,-12);
- if str3<>'Hello' then
- _result := false;
- {$endif}
- if not _result then
- fail
- else
- WriteLn('Success!');
- end;
- procedure test_copy;
- var
- _result : boolean;
- i: integer;
- begin
- Write('Copy tests...');
- _result := true;
- {************************* shortstring ************************}
- { try to copy from an empty string }
- str1:='';
- str1:=Copy(str1,1,12);
- if str1<>'' then
- _result := false;
- str1:='';
- str1:=Copy('Hello world',0,12);
- if str1<>'Hello world' then
- _result := false;
- str1:='';
- str1:=Copy('Hello world',1,12);
- if str1<>'Hello world' then
- _result := false;
- str1:='';
- str1:=Copy('Hello world',-12,12);
- if str1<>'Hello world' then
- _result := false;
- str1:='';
- str1:=Copy('Hello world',64,128);
- if str1<>'' then
- _result := false;
- str1:='';
- str1:=Copy('Hello world',1,-12);
- if str1<>'' then
- _result := false;
- str1:='';
- str1:=Copy('Hello world',-12,0);
- if str1<>'' then
- _result := false;
- str1:='';
- str1:=Copy('Hello world',7,11);
- if str1<>'world' then
- _result := false;
- str1:='';
- str1:=Copy('Hello world',1,11);
- if str1<>'Hello world' then
- _result := false;
- str1:='';
- str1:=Copy('',0,12);
- if str1<>'' then
- _result := false;
- {************************* ansistring *************************}
- { try to copy from an empty string }
- str2:='';
- str2:=Copy(str2,1,12);
- if str2<>'' then
- _result := false;
- str2:='';
- str2:=Copy('Hello world',0,12);
- if str2<>'Hello world' then
- _result := false;
- str2:='';
- str2:=Copy('Hello world',1,12);
- if str2<>'Hello world' then
- _result := false;
- str2:='';
- str2:=Copy('Hello world',-12,12);
- if str2<>'Hello world' then
- _result := false;
- str2:='';
- str2:=Copy('Hello world',64,128);
- if str2<>'' then
- _result := false;
- str2:='';
- str2:=Copy('Hello world',1,-12);
- if str2<>'' then
- _result := false;
- str2:='';
- str2:=Copy('Hello world',-12,0);
- if str2<>'' then
- _result := false;
- str2:='';
- str2:=Copy('Hello world',7,11);
- if str2<>'world' then
- _result := false;
- str2:='';
- str2:=Copy('Hello world',1,11);
- if str2<>'Hello world' then
- _result := false;
- str2:='';
- str2:=Copy('',0,12);
- if str2<>'' then
- _result := false;
- {************************* widestring *************************}
- {$ifdef haswidestring}
- { try to copy from an empty string }
- str3:='';
- str3:=Copy(str3,1,12);
- if str3<>'' then
- _result := false;
- str3:='';
- str3:=Copy('Hello world',0,12);
- if str3<>'Hello world' then
- _result := false;
- str3:='';
- str3:=Copy('Hello world',1,12);
- if str3<>'Hello world' then
- _result := false;
- str3:='';
- str3:=Copy('Hello world',-12,12);
- if str3<>'Hello world' then
- _result := false;
- str3:='';
- str3:=Copy('Hello world',64,128);
- if str3<>'' then
- _result := false;
- str3:='';
- str3:=Copy('Hello world',1,-12);
- if str3<>'' then
- _result := false;
- str3:='';
- str3:=Copy('Hello world',-12,0);
- if str3<>'' then
- _result := false;
- str3:='';
- str3:=Copy('Hello world',7,11);
- if str3<>'world' then
- _result := false;
- str3:='';
- str3:=Copy('Hello world',1,11);
- if str3<>'Hello world' then
- _result := false;
- str3:='';
- str3:=Copy('',0,12);
- if str3<>'' then
- _result := false;
- {$endif}
- if not _result then
- fail
- else
- WriteLn('Success!');
- end;
- procedure test_insert;
- var
- _result : boolean;
- i: integer;
- begin
- Write('Insert tests...');
- _result := true;
- {************************* shortstring ************************}
- str1:='Hello world';
- Insert(' this is my ',str1,-12);
- if str1<>' this is my Hello world' then
- _result := false;
- str1:='Hello world';
- Insert(' this is my ',str1,0);
- if str1<>' this is my Hello world' then
- _result := false;
- str1:='Hello world';
- Insert(' this is my ',str1,64);
- if str1<>'Hello world this is my ' then
- _result := false;
- str1:='Hello world';
- Insert(' this is my ',str1,300);
- if str1<>'Hello world this is my ' then
- _result := false;
- str1:='Hello world';
- Insert(' this is my ',str1,length(str1)+1);
- if str1<>'Hello world this is my ' then
- _result := false;
- str1:='Hello world';
- Insert('this is my ',str1,7);
- if str1<>'Hello this is my world' then
- _result := false;
- str1:='';
- Insert(' this is my ',str1,0);
- if str1<>' this is my ' then
- _result := false;
- str1:='';
- Insert(' this is my ',str1,length(str1));
- if str1<>' this is my ' then
- _result := false;
- str1:='';
- Insert(' this is my ',str1,32);
- if str1<>' this is my ' then
- _result := false;
- str1:='Hello world';
- Insert('',str1,0);
- if str1<>'Hello world' then
- _result := false;
- str1:='Hello world';
- Insert('',str1,7);
- if str1<>'Hello world' then
- _result := false;
- {************************* ansistring *************************}
- str2:='Hello world';
- Insert(' this is my ',str2,-12);
- if str2<>' this is my Hello world' then
- _result := false;
- str2:='Hello world';
- Insert(' this is my ',str2,0);
- if str2<>' this is my Hello world' then
- _result := false;
- str2:='Hello world';
- Insert(' this is my ',str2,64);
- if str2<>'Hello world this is my ' then
- _result := false;
- str2:='Hello world';
- Insert(' this is my ',str2,300);
- if str2<>'Hello world this is my ' then
- _result := false;
- str2:='Hello world';
- Insert(' this is my ',str2,length(str2)+1);
- if str2<>'Hello world this is my ' then
- _result := false;
- str2:='Hello world';
- Insert('this is my ',str2,7);
- if str2<>'Hello this is my world' then
- _result := false;
- str2:='';
- Insert(' this is my ',str2,0);
- if str2<>' this is my ' then
- _result := false;
- str2:='';
- Insert(' this is my ',str2,length(str2));
- if str2<>' this is my ' then
- _result := false;
- str2:='';
- Insert(' this is my ',str2,32);
- if str2<>' this is my ' then
- _result := false;
- str2:='Hello world';
- Insert('',str2,0);
- if str2<>'Hello world' then
- _result := false;
- str2:='Hello world';
- Insert('',str2,7);
- if str2<>'Hello world' then
- _result := false;
- {************************* widestring *************************}
- {$ifdef haswidestring}
- str3:='Hello world';
- Insert(' this is my ',str3,-12);
- if str3<>' this is my Hello world' then
- _result := false;
- str3:='Hello world';
- Insert(' this is my ',str3,0);
- if str3<>' this is my Hello world' then
- _result := false;
- str3:='Hello world';
- Insert(' this is my ',str3,64);
- if str3<>'Hello world this is my ' then
- _result := false;
- str3:='Hello world';
- Insert(' this is my ',str3,300);
- if str3<>'Hello world this is my ' then
- _result := false;
- str3:='Hello world';
- Insert(' this is my ',str3,length(str3)+1);
- if str3<>'Hello world this is my ' then
- _result := false;
- str3:='Hello world';
- Insert('this is my ',str3,7);
- if str3<>'Hello this is my world' then
- _result := false;
- str3:='';
- Insert(' this is my ',str3,0);
- if str3<>' this is my ' then
- _result := false;
- str3:='';
- Insert(' this is my ',str3,length(str3));
- if str3<>' this is my ' then
- _result := false;
- str3:='';
- Insert(' this is my ',str3,32);
- if str3<>' this is my ' then
- _result := false;
- str3:='Hello world';
- Insert('',str3,0);
- if str3<>'Hello world' then
- _result := false;
- str3:='Hello world';
- Insert('',str3,7);
- if str3<>'Hello world' then
- _result := false;
- {$endif}
- if not _result then
- fail
- else
- WriteLn('Success!');
- end;
- procedure test_pos;
- var
- _result : boolean;
- position: integer;
- begin
- Write('Pos tests...');
- _result := true;
- {************************* shortstring ************************}
- str1:='Hello world';
- position:=Pos('',str1);
- if position <> 0 then
- _result := false;
- str1:='';
- position:=Pos('',str1);
- if position <> 0 then
- _result := false;
- str1:='Hello world';
- position:=Pos('world',str1);
- if position <> 7 then
- _result := false;
- str1:='Hello world';
- position:=Pos('world',str1);
- if position <> 7 then
- _result := false;
- str1:='Hello world';
- position:=Pos('worldx',str1);
- if position <> 0 then
- _result := false;
- str1:='';
- position:=Pos('worldx',str1);
- if position <> 0 then
- _result := false;
- {************************* ansistring *************************}
- str2:='Hello world';
- position:=Pos('',str2);
- if position <> 0 then
- _result := false;
- str2:='';
- position:=Pos('',str2);
- if position <> 0 then
- _result := false;
- str2:='Hello world';
- position:=Pos('world',str2);
- if position <> 7 then
- _result := false;
- str2:='Hello world';
- position:=Pos('world',str2);
- if position <> 7 then
- _result := false;
- str2:='Hello world';
- position:=Pos('worldx',str2);
- if position <> 0 then
- _result := false;
- str2:='';
- position:=Pos('worldx',str2);
- if position <> 0 then
- _result := false;
- {************************* widestring *************************}
- {$ifdef haswidestring}
- str3:='Hello world';
- position:=Pos('',str3);
- if position <> 0 then
- _result := false;
- str3:='';
- position:=Pos('',str3);
- if position <> 0 then
- _result := false;
- str3:='Hello world';
- position:=Pos('world',str3);
- if position <> 7 then
- _result := false;
- str3:='Hello world';
- position:=Pos('world',str3);
- if position <> 7 then
- _result := false;
- str3:='Hello world';
- position:=Pos('worldx',str3);
- if position <> 0 then
- _result := false;
- str3:='';
- position:=Pos('worldx',str3);
- if position <> 0 then
- _result := false;
- {$endif}
- if not _result then
- fail
- else
- WriteLn('Success!');
- end;
- procedure test_chr;
- var
- c: char;
- _result : boolean;
- begin
- Write('Chr tests...');
- _result := true;
- { c:=chr($3074);
- if c<>'t' then
- _result := false;
- The above statement compile under Delphi, and it
- should not imho. Freepascal gives a range-check
- error, as it should.
- }
- if chr(76)<>'L' then
- _result := false;
- if _result = false then
- fail
- else
- WriteLn('Success!');
- end;
- procedure test_concat;
- var
- _result : boolean;
- i: integer;
- begin
- Write('Concat tests...');
- _result := true;
- if not _result then
- fail
- else
- WriteLn('Success!');
- end;
- Begin
- test_delete;
- test_stringofchar;
- test_copy;
- test_insert;
- test_pos;
- test_chr;
- end.
|