Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: DUnit und Fließkommazahlen Problem

  Alt 25. Sep 2022, 13:13
Verwende besser DUnitX, nicht mehr DUnit.

Das DUnit im Delphi 11.2 ist scheinbar 11 Jahre alt
und selbst https://sourceforge.net/projects/dunit/ ist seit 8 Jahren tot.

Wobei DUnitX, im Delphi mitgeliefert, ist auch 7 Jahre alt ,
also besser gleich von https://github.com/VSoftTechnologies/DUnitX/


ich wüsste jetzt nichtmal, wo man hier die Fehler melden sollte. (von Emba erwarte icht keine Fehlerbehebung)

alleine diese eine Funktion:
Zitat von BugReport:
bitte Delta beachten oder Math.SameValue verwenden
Delphi-Quellcode:
procedure TAbstractTest.CheckEquals( expected,
                                     actual : extended;
                                     delta : extended;
                                     msg : string = '');
begin
  FCheckCalled := True;
  if delta = 0 then
    delta := DoubleResolution;
  if not ((expected = Infinity) and (actual = Infinity)) then
    if ((expected = Infinity) and (actual <> Infinity)) or
       ((expected <> Infinity) and (actual = Infinity)) or
       (abs(expected-actual) > delta) then
      FailNotEquals(FloatToStr(expected), FloatToStr(actual), msg, ReturnAddress);
end;
Aber falls wirklich jemand "genau" prüfen will, dann
Delphi-Quellcode:
procedure TAbstractTest.CheckEquals( expected,
                                     actual : extended;
                                     delta : extended;
                                     msg : string = '');
begin
  FCheckCalled := True;
  if delta = NaN then
    delta := DoubleResolution;
  if not ((expected = Infinity) and (actual = Infinity)) then
    if ((expected = Infinity) and (actual <> Infinity)) or
       ((expected <> Infinity) and (actual = Infinity)) or
       (abs(expected-actual) > delta) then
      FailNotEquals(FloatToStr(expected), FloatToStr(actual), msg, ReturnAddress);
end;

procedure TAbstractTest.CheckEquals(expected, actual: extended; msg: string);
begin
  CheckEquals(expected, actual, NaN, msg);
end;

Zitat:
  if not ((expected = Infinity) and (actual = Infinity)) then
Was ist mit NaN und NegInfinity?


Zitat:
Delphi-Quellcode:
procedure TAbstractTest.CheckEquals( expected,
                                     actual : extended;
                                     delta : extended;
                                     msg : string = '');
const
  Infinity = 1.0 / 0.0;
begin
Warum wird Infinity hier neu deklariert, anstatt System.Math.Infinity zu verwenden?
$2B or not $2B
  Mit Zitat antworten Zitat