t_id
195
t_version
1.1
t_adddate
2003/10/03
t_result
0
t_knownrunerror
0
t_note
Note: This test requires a C library
tr_id | run | tr_ok | tr_skip | tr_result |
---|---|---|---|---|
525399720 | 948179 | False | False | Failed to run |
Record count: 1
Testing C printf function called from FPC code Testing with single pchar argument Testing with single longint argument Testing with single int64 argument Testing with single single argument The output of sprintf for double is wrong: Text containing single: 0.000000 Testing with single double argument The output of sprintf for double is wrong: Text containing double: 0.000000 Testing with combined pchar argument Testing with single longint argument and pchar Testing with single int64 argument and pchar Testing with single single argument The output of sprintf for double is wrong: Text containing single: 0.000000"next" Testing with single double argument The output of sprintf for double is wrong: Text containing double: 0.000000"next"
{ %version=1.1 } { %NOTE=This test requires a C library } {$mode objfpc} uses strings; {$ifdef win32} {$linklib msvcrt} procedure printf(const formatstr : pchar; const args : array of const);cdecl; external name 'printf'; procedure sprintf(p : pchar;const formatstr : pchar; const args : array of const);cdecl; external name 'sprintf'; const int64prefix='I64'; {$else} {$linklib c} procedure printf(const formatstr : pchar; const args : array of const);cdecl; external; procedure sprintf(p : pchar;const formatstr : pchar; const args : array of const);cdecl; external; const int64prefix='ll'; {$endif} type THandle = longint; const l : longint = 45; ll : int64 = 345; s : pchar = 'Enclosed text'; s2 : pchar = 'next'; si : single = 32.12; d : double = 45.45; e : extended = 74.74; p : pchar = nil; has_errors : boolean = false; begin getmem(p,500); Writeln('Testing C printf function called from FPC code'); // printf('Simple test without arg'#10,[]); Writeln('Testing with single pchar argument'); printf('Text containing "%s" text'#10,[s]); sprintf(p,'Text containing "%s" text'#10,[s]); if strpos(p,'g "Enclosed text" ')=nil then begin writeln('The output of sprintf for pchar is wrong: ',p); has_errors:=true; end; Writeln('Testing with single longint argument'); printf('Text containing longint: %d'#10,[l]); sprintf(p,'Text containing longint: %d'#10,[l]); if strpos(p,'longint: 45')=nil then begin writeln('The output of sprintf for longint is wrong: ',p); has_errors:=true; end; Writeln('Testing with single int64 argument'); printf('Text containing int64: %'+int64prefix+'d'#10,[ll]); sprintf(p,'Text containing int64: %'+int64prefix+'d'#10,[ll]); if strpos(p,'int64: 345')=nil then begin writeln('The output of sprintf for int64 is wrong: ',p); has_errors:=true; end; Writeln('Testing with single single argument'); printf('Text containing single: %f'#10,[si]); sprintf(p,'Text containing single: %f'#10,[si]); if strpos(p,'single: 32.1')=nil then begin writeln('The output of sprintf for double is wrong: ',p); has_errors:=true; end; Writeln('Testing with single double argument'); printf('Text containing double: %f'#10,[d]); sprintf(p,'Text containing double: %f'#10,[d]); if strpos(p,'double: 45.4')=nil then begin writeln('The output of sprintf for double is wrong: ',p); has_errors:=true; end; printf('Text containing long double: %f'#10,[e]); sprintf(p,'Text containing long double: %f'#10,[e]); if strpos(p,'long double: 74.7')=nil then begin writeln('The output of sprintf for long double is wrong:',p); has_errors:=true; end; Writeln('Testing with combined pchar argument'); printf('Text containing "%s" and "%s" text'#10,[s,s2]); sprintf(p,'Text containing "%s" and "%s" text'#10,[s,s2]); if strpos(p,'g "Enclosed text" and "next"')=nil then begin writeln('The output of sprintf for two pchars is wrong: ',p); has_errors:=true; end; Writeln('Testing with single longint argument and pchar'); printf('Text containing longint: %d"%s"'#10,[l,s2]); sprintf(p,'Text containing longint: %d"%s"'#10,[l,s2]); if strpos(p,'longint: 45"next"')=nil then begin writeln('The output of sprintf for longint is wrong: ',p); has_errors:=true; end; Writeln('Testing with single int64 argument and pchar'); printf('Text containing int64: %'+int64prefix+'d"%s"'#10,[ll,s2]); sprintf(p,'Text containing int64: %'+int64prefix+'d"%s"'#10,[ll,s2]); if strpos(p,'int64: 345"next"')=nil then begin writeln('The output of sprintf for int64 is wrong: ',p); has_errors:=true; end; Writeln('Testing with single single argument'); printf('Text containing single: %f"%s"'#10,[si,s2]); sprintf(p,'Text containing single: %f"%s"'#10,[si,s2]); if (strpos(p,'single: 32.1')=nil) or (strpos(p,'"next"')=nil) then begin writeln('The output of sprintf for double is wrong: ',p); has_errors:=true; end; Writeln('Testing with single double argument'); printf('Text containing double: %f"%s"'#10,[d,s2]); sprintf(p,'Text containing double: %f"%s"'#10,[d,s2]); if (strpos(p,'double: 45.4')=nil) or (strpos(p,'"next"')=nil) then begin writeln('The output of sprintf for double is wrong: ',p); has_errors:=true; end; printf('Text containing long double: %f"%s"'#10,[e,s2]); sprintf(p,'Text containing long double: %f"%s"'#10,[e,s2]); if (strpos(p,'long double: 74.7')=nil) or (strpos(p,'"next"')=nil) then begin writeln('The output of sprintf for long double is wrong:',p); has_errors:=true; end; if has_errors then halt(1); end.