home *** CD-ROM | disk | FTP | other *** search
/ TopWare Tools / TOOLS.iso / tools / top1654 / gepackt.exe / GAR.MOD < prev    next >
Encoding:
Text File  |  1994-01-15  |  2.2 KB  |  99 lines

  1. MODULE Garbage;
  2. (* Garbage.Test testet die Geschwindigkeit des G Collectors *)
  3.  
  4. IMPORT
  5.    Out, Oberon, Kernel;
  6.  
  7. CONST
  8.    THRESHOLD= 65536;    (* Bytes freilassen *)
  9.    TICKS= 300;          (* je Sekunde *)
  10.  
  11. PROCEDURE Info(VAR t: LONGINT);
  12. BEGIN
  13.    Out.Int(Kernel.Available(), 1);
  14.    Out.String(" Bytes frei. ");
  15.    IF t # 0 THEN
  16.       Out.Int((Oberon.Time() - t) * 100 DIV TICKS, 1);
  17.       Out.String("/100 Sekunden vergangen.");
  18.    END;
  19.    t := Oberon.Time();
  20.    Out.Ln;
  21. END Info;
  22.  
  23. PROCEDURE CallGC(VAR t: LONGINT);
  24. BEGIN
  25.    (* Information *)
  26.    Kernel.GC;
  27.    Out.String("Nach GC-Aufruf: ");
  28.    Info(t);
  29. END CallGC;
  30.  
  31. PROCEDURE Test*;
  32. VAR
  33.    time: LONGINT;
  34.  
  35.    PROCEDURE Liste;
  36.    TYPE
  37.       aRec= POINTER TO aDesc;
  38.       aDesc= RECORD link, back: aRec END;
  39.    VAR
  40.       root, e: aRec;
  41.       i: LONGINT;
  42.    BEGIN
  43.       (* Liste erzeugen *)
  44.       NEW(root); e := root; i := 0;
  45.       WHILE Kernel.Available() > THRESHOLD DO
  46.          NEW(e.link); INC(i); (* Vorwärts- *)
  47.          e.link.back := e;    (* Ràckwärts-Verkettung *)
  48.          e.link.link := NIL;     (* Vorwärts-Init *)
  49.          e := e.link;            (* Der nächste... *)
  50.       END;
  51.  
  52.       (* Elemente entfernen (FIFO) *)
  53.       WHILE root # NIL DO
  54.          root := root.link;
  55.       END;
  56.       e := NIL; (* => alle Referenzen auf die Liste gelöst *)
  57.  
  58.       (* Information *)
  59.       Out.Int(i, 1);
  60.       Out.String(" Elts eingefügt, wieder geläscht: ");
  61.       Info(time);
  62.    END Liste;
  63.  
  64.    PROCEDURE Zirkel;
  65.    CONST
  66.       N= 7;
  67.    TYPE
  68.       aRec= POINTER TO aDesc;
  69.       aDesc= RECORD link: ARRAY N OF aRec END;
  70.    VAR
  71.       e: aRec;
  72.       i: LONGINT;
  73.       j: INTEGER;
  74.    BEGIN
  75.       (* Zirkel-Records (selbstverweisend) erzeugen *)
  76.       i := 0;
  77.       WHILE Kernel.Available() > THRESHOLD DO
  78.          NEW(e); INC(i);
  79.          j := 0;
  80.          WHILE j < N DO e.link[j] := e; INC(j) END;
  81.       END;
  82.       e := NIL;
  83.  
  84.       (* Information *)
  85.       Out.Int(i, 1);
  86.       Out.String(" Zirkel-Records erzeugt: ");
  87.       Info(time);
  88.    END Zirkel;
  89.  
  90. BEGIN
  91.    time := 0; CallGC(time);
  92.    Liste; CallGC(time);
  93.    Zirkel; CallGC(time);
  94. END Test;
  95.  
  96. BEGIN
  97. END Garbage.
  98.  
  99.