Einzelnen Beitrag anzeigen

Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
318 Beiträge
 
Delphi 10.4 Sydney
 
#1

Optimierung oder Compilerfehler oder was?

  Alt 16. Jul 2018, 13:51
Delphi-Version: 10.2 Tokyo
Hallo,

ich habe in einem Unit-Test folgenden Code (auskommentierte Zeilen wurden für Debugging eingefügt):

Code:
procedure TestTTyp.TestProgrammZurrschiene;
var
  Stanzprogramm240, Stanzprogramm840:TEinzelSchrittlist;
  count: Integer;
  z240,z840: Integer;
begin
  SetupStandardBlech;

//  z240:=FTypList[0].FilteredEinzelschritte[gWkz.Werkzeug['Zurr_240']].Count;
//  z840:=FTypList[0].FilteredEinzelschritte[gWkz.Werkzeug['Zurr_840']].Count;

  count:=FTypList[0].FilteredEinzelschritte[gWkz.Werkzeug['Zurr_240']].Count+
         FTypList[0].FilteredEinzelschritte[gWkz.Werkzeug['Zurr_840']].Count;

//  count:=z240+z840;
  assert.areEqual(FTypList[0].ZurrschienenList.Count, Count);
FilteredEinzelschritte ist eine indexed property, die folgende Funktion aufruft:

Code:
function TTyp.GetFilteredEinzelschrittlist(Filter: TWerkzeug): TEinzelSchrittlist;
var
  I, j: Integer;
begin
  FFilteredStanzprogramm.Clear;
  for I := 0 to GesamtSchrittlist.Count - 1 do
  begin
    for j := 0 to GesamtSchrittlist[i].EinzelschrittList.Count - 1 do
    begin
      if FGesamtSchrittlist[i].EinzelschrittList[j].Werkzeugname=Filter.Name then
        FFilteredStanzprogramm.Add(FGesamtSchrittlist[i].EinzelschrittList[j])
    end;
  end;

  result:=FFilteredStanzprogramm;
end;
Es gibt also eine Liste von Bearbeitungsschritten in einem Ablauf, die einzelnen Schritte verwenden unterschiedliche Werkzeuge (Werkzeuge=Objekte mit Namen und weiteren Eigenschaften).
Die Funktion soll mir aus der Gesamtliste die Schritte heraussuchen, die ein Werkzeug mit einem bestimmten Namen verwenden. Diese werden dann in eine zweite Liste eingefügt.
Meine Test-Liste enthält 3 x das Werkzeug Zurr_240 und 2 x das Werkzeug Zurr_840.
count sollte also im Test die Summe 5 ergeben, tatsächlich kommt aber jetzt 4 zurück.

Wenn ich im Debugger nachschaue, bzw. im Programm die Befehle aufsplitte, wie im auskommentierten Quelltext zu sehen, erhalte ich wieder das richtige Ergebnis.

Lief unter älteren Delphi-Versionen bisher auch. Nun habe ich das Projekt auf Tokyo 10.2.3 aktualisiert und bekomme das Problem.
  Mit Zitat antworten Zitat