|
@@ -0,0 +1,47 @@
|
|
|
|
+{ Source provided for Free Pascal Bug Report 3170 }
|
|
|
|
+{ Submitted by "Michalis Kamburelis" on 2004-06-15 }
|
|
|
|
+{ e-mail: [email protected] }
|
|
|
|
+{ Simple test of 4 string comparison routines: [Ansi]Compare(Str|Text)
|
|
|
|
+ with AnsiStrings with #0 chars inside.
|
|
|
|
+
|
|
|
|
+ FPC 1.9.5 fails only at CompareStr + ('hello', 'hello'#0'bye')
|
|
|
|
+ test, passes all other.
|
|
|
|
+ After applying my small patch to sysstr.inc, FPC 1.9.5 passes
|
|
|
|
+ all tests.
|
|
|
|
+
|
|
|
|
+ Delphi note: Kylix 3 does not pass this test with Ansi- functions,
|
|
|
|
+ it seems that in Kylix 3 Ansi- functions consider #0 char to mark
|
|
|
|
+ end of AnsiString (I will not submit this as a compatibility bug,
|
|
|
|
+ as I consider this stupid, FPC behaviour is definitely more
|
|
|
|
+ sensible and consequent here).
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+{$apptype CONSOLE}
|
|
|
|
+{$assertions ON}
|
|
|
|
+{$ifdef FPC} {$mode objfpc} {$endif}
|
|
|
|
+{$longstrings ON}
|
|
|
|
+
|
|
|
|
+uses SysUtils;
|
|
|
|
+
|
|
|
|
+type
|
|
|
|
+ TCompare2Strings = function(const s1, s2:string):Integer;
|
|
|
|
+
|
|
|
|
+procedure Check(CompareFunc:TCompare2Strings);
|
|
|
|
+begin
|
|
|
|
+ Assert(CompareFunc('hello'#0'bye', 'hello'#0'bye') = 0);
|
|
|
|
+ Assert(CompareFunc('hello'#0'seeya', 'hello'#0'bye') > 0);
|
|
|
|
+ Assert(CompareFunc('hello', 'hello'#0'bye') < 0);
|
|
|
|
+
|
|
|
|
+{ alternative:
|
|
|
|
+ Writeln(CompareFunc('hello'#0'bye', 'hello'#0'bye'));
|
|
|
|
+ Writeln(CompareFunc('hello'#0'seeya', 'hello'#0'bye'));
|
|
|
|
+ Writeln(CompareFunc('hello', 'hello'#0'bye'));
|
|
|
|
+}
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+begin
|
|
|
|
+ Writeln('CompareStr'); Check(@CompareStr);
|
|
|
|
+ Writeln('CompareText'); Check(@CompareText);
|
|
|
|
+ Writeln('AnsiCompareStr'); Check(@AnsiCompareStr);
|
|
|
|
+ Writeln('AnsiCompareText'); Check(@AnsiCompareText);
|
|
|
|
+end.
|