Browse Source

* patch by zeljko to make the test independent of the locale, and fix a
a problem when NegCurrFormat > 10 (from
http://lists.freepascal.org/lists/fpc-devel/2010-September/021865.html)

git-svn-id: trunk@15999 -

Jonas Maebe 15 years ago
parent
commit
4bd21b327b
1 changed files with 29 additions and 22 deletions
  1. 29 22
      tests/test/tstrreal4.pp

+ 29 - 22
tests/test/tstrreal4.pp

@@ -6,29 +6,27 @@ procedure test;
 var
  s: string;
  r: double;
+ DS: Char;
 begin
- {$IFDEF FPC}
- CurrencyFormat := 1;
- NegCurrFormat := 0;
- {$ENDIF}
  DecimalSeparator := '.';
+ DS := DecimalSeparator;
  r := 0.001;
  s := FloatToStrF(r, ffGeneral, 12, 2);
  {must print 0.001  }
  writeln(s);
- if (s <> '0.001') then
+ if (s <> '0'+DS+'001') then
    halt(1);
 
  s := FloatToStrF(r, ffFixed, 12, 2);
  {must print 0.00  }
  writeln(s);
- if (s <> '0.00') then
+ if (s <> '0'+DS+'00') then
    halt(1);
 
  s := FloatToStrF(r, ffNumber, 12, 2);
  {must print 0.00  }
  writeln(s);
- if (s <> '0.00') then
+ if (s <> '0'+DS+'00') then
    halt(1);
 
  r := -0.00001;
@@ -37,7 +35,7 @@ begin
  {must print -0.00001  }
  writeln(s);
  {$IFDEF FPC}
- if (s <> '-0.00001') then
+ if (s <> '-0'+DS+'00001') then
  {$ELSE}
  if (s <> '-1E-05') then // is this DCC bug ?
  {$ENDIF}
@@ -46,25 +44,26 @@ begin
  s := FloatToStrF(r, ffExponent, 12, 2);
  {must print -1.00000000000E-05  }
  writeln(s);
- if (s <> '-1.00000000000E-05') then
+ if (s <> '-1'+DS+'00000000000E-05') then
    halt(1);
 
  s := FloatToStrF(r, ffFixed, 12, 2);
  {must print 0.00  }
  writeln(s);
- if (s <> '0.00') then
+ if (s <> '0'+DS+'00') then
    halt(1);
 
  s := FloatToStrF(r, ffNumber, 12, 2);
  {must print 0.00  }
  writeln(s);
- if (s <> '0.00') then
+ if (s <> '0'+DS+'00') then
    halt(1);
 
  s := FloatToStrF(r, ffCurrency, 12, 2);
  {must print without leading zero  }
  writeln(s);
- if (length(s) > 0) and (Pos('-', s) > 0) then
+ if (length(s) > 0) and 
+  ((Pos('-', s) > 0) or ((Pos('(', s) > 0) and  (Pos(')', s) > 0))) then
    halt(1);
 
  r := -0.00000;
@@ -78,25 +77,26 @@ begin
  s := FloatToStrF(r, ffExponent, 12, 2);
  {must print 0.00  }
  writeln(s);
- if (s <> '0.00000000000E+00') then
+ if (s <> '0'+DS+'00000000000E+00') then
    halt(1);
 
  s := FloatToStrF(r, ffFixed, 12, 2);
  {must print 0.00  }
  writeln(s);
- if (s <> '0.00') then
+ if (s <> '0'+DS+'00') then
    halt(1);
 
  s := FloatToStrF(r, ffNumber, 12, 2);
  {must print 0.00  }
  writeln(s);
- if (s <> '0.00') then
+ if (s <> '0'+DS+'00') then
    halt(1);
 
  s := FloatToStrF(r, ffCurrency, 12, 2);
  {must print without leading zero  }
  writeln(s);
- if (length(s) > 0) and (Pos('-', s) > 0) then
+ if (length(s) > 0) and 
+  ((Pos('-', s) > 0) or ((Pos('(', s) > 0) and  (Pos(')', s) > 0))) then
    halt(1);
 
  // Now check if we remove leading negative sign by mistake
@@ -106,7 +106,7 @@ begin
  {must print -0.00001  }
  writeln(s);
  {$IFDEF FPC}
- if (s <> '-0.00001') then
+ if (s <> '-0'+DS+'00001') then
  {$ELSE}
  if (s <> '-1E-5') then // is this DCC bug ?
  {$ENDIF}
@@ -116,7 +116,7 @@ begin
  {must print -0.00001  }
  writeln(s);
  {$IFDEF FPC}
- if (s <> '-1.00000000000E-0005') then
+ if (s <> '-1'+DS+'00000000000E-0005') then
  {$ELSE}
  if (s <> '-1.00000000000E-5') then
  {$ENDIF}
@@ -125,19 +125,26 @@ begin
  s := FloatToStrF(r, ffFixed, 12, 5);
  {must print 0.00  }
  writeln(s);
- if (s <> '-0.00001') then
+ if (s <> '-0'+DS+'00001') then
    halt(1);
 
  s := FloatToStrF(r, ffNumber, 12, 5);
  {must print 0.00  }
  writeln(s);
- if (s <> '-0.00001') then
+ if (s <> '-0'+DS+'00001') then
    halt(1);
 
  s := FloatToStrF(r, ffCurrency, 12, 5);
- {must print without leading zero  }
+
+ {here we check for various currency negative formats.
+ There's bug in rtl cause NegCurFormat can be > 10
+ and in that case it isn't handled by FloatToStrIntl().
+ So that's why we check NegCurFormat range here.}
+
  writeln(s);
- if (length(s) > 0) and (Pos('-', s) = 0) then
+
+ if (length(s) > 0) and (NegCurrFormat in [0..10]) and
+   (Pos('-', s) = 0) and (Pos('(', s) = 0) and  (Pos(')', s) = 0) then
    halt(1);
  writeln('Tests for FloatToStrF(): SUCCESS');
 end;