Test suite results for test file test/cg/tprintf.pp

Test run data :

Run ID:
Operating system: linux
Processor: mipsel
Version: 3.3.1
Fails/OK/Total: 185/9025/9210
Version: 3.3.1
Full version: 3.3.1-15584-g2f9ed0576e
Comment: -ao-xgot -fPIC -XR/home/muller/sys-root/mipsel-linux -Xd -Xr/home/muller/sys-root/mipsel-linux
Machine: cfarm421
Category: 1
SVN revisions: 2f9ed0576e:8b7dbb81b1:3f8bbd3b00:2f9ed0576e
Submitter: muller
Date: 2024/04/19 11:23:00 <> 2024/04/18
Previous run: 934335
Next run: 935671

Hide skipped tests

Hide successful tests

Test file "test/cg/tprintf.pp" information:

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

Detailed test run results:

tr_idruntr_oktr_skiptr_result
443736134934980FalseFalseFailed to run

Record count: 1

Log of 934980:

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
Testing with single double argument
Testing with combined pchar argument
Testing with single longint argument and pchar
Testing with single int64 argument and pchar
Testing with single single argument
Testing with single double argument
Runtime error 216 at $00466000
  $00466000
Runtime error 216 at $00446D0C
  $00446D0C
  $00445140
  $00445238
  $00445308
  $00445C04
  $2B2BDBAC
  $2B2F6000

Text containing "Enclosed text" text
Text containing longint: 45
Text containing int64: 345
Text containing single: 32.119999
Text containing double: 45.450000
Text containing "Enclosed text" and "next" text
Text containing longint: 45"next"
Text containing int64: 345"next"
Text containing single: 32.119999"next"
Text containing double: 45.450000"next"

Source:

{ %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.

Link to SVN view of test/cg/tprintf.pp source.