|
@@ -0,0 +1,170 @@
|
|
|
+{
|
|
|
+ $Id$
|
|
|
+
|
|
|
+ Program to test heap functions, timing doesn't work
|
|
|
+}
|
|
|
+PROGRAM TestHeap;
|
|
|
+
|
|
|
+Procedure InitMSTimer;
|
|
|
+begin
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+{Get MS Timer}
|
|
|
+Function MSTimer:longint;
|
|
|
+begin
|
|
|
+ MSTimer:=0;
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+VAR Dummy,Start, LoopTime,LoopTime2: LONGINT;
|
|
|
+ Delta, TotalTime: LONGINT;
|
|
|
+ L,Choice,K,T: WORD;
|
|
|
+ BlkPtr: ARRAY [1..1000] OF POINTER;
|
|
|
+ BlkSize: ARRAY [1..1000] OF WORD;
|
|
|
+ Permutation: ARRAY [1..1000] OF WORD;
|
|
|
+
|
|
|
+BEGIN
|
|
|
+ INitMSTimer;
|
|
|
+ WriteLn ('Test of TP heap functions');
|
|
|
+ WriteLn;
|
|
|
+ TotalTime := 0;
|
|
|
+ RandSeed := 997;
|
|
|
+ WriteLn ('MaxAvail: ', MaxAvail, ' MemAvail: ', MemAvail);
|
|
|
+ Start :=MSTimer;
|
|
|
+ FOR L := 1 TO 1000 DO BEGIN
|
|
|
+ END;
|
|
|
+ LoopTime := MSTimer-Start;
|
|
|
+ FOR L := 1 TO 1000 DO BEGIN
|
|
|
+ BlkSize [L] := Random (512) + 1;
|
|
|
+ END;
|
|
|
+ Write ('Allocating 1000 blocks at the end of the heap: ');
|
|
|
+ Start := MSTImer;
|
|
|
+ FOR L := 1 TO 1000 DO BEGIN
|
|
|
+ GetMem (BlkPtr [L], BlkSize [L]);
|
|
|
+ END;
|
|
|
+ Delta := MSTimer-Start-LoopTime;
|
|
|
+ Inc (TotalTime, Delta);
|
|
|
+ WriteLn (Delta:5, ' ms');
|
|
|
+ WriteLn ('MaxAvail: ', MaxAvail, ' MemAvail: ', MemAvail);
|
|
|
+ Write ('Deallocating same 1000 blocks in reverse order:');
|
|
|
+ Start := MSTimer;
|
|
|
+ FOR L := 1 TO 1000 DO BEGIN
|
|
|
+ FreeMem (BlkPtr [L], BlkSize [L]);
|
|
|
+ END;
|
|
|
+ Delta := MSTimer-Start-LoopTime;
|
|
|
+ Inc (TotalTime, Delta);
|
|
|
+ WriteLn (Delta:5, ' ms');
|
|
|
+ WriteLn ('MaxAvail: ', MaxAvail, ' MemAvail: ', MemAvail);
|
|
|
+ Write ('Allocating 1000 blocks at the end of the heap: ');
|
|
|
+ Start := MSTimer;
|
|
|
+ FOR L := 1 TO 1000 DO BEGIN
|
|
|
+ GetMem (BlkPtr [L], BlkSize [L]);
|
|
|
+ END;
|
|
|
+ Delta := MSTimer-Start-LoopTime;
|
|
|
+ Inc (TotalTime, Delta);
|
|
|
+ WriteLn (Delta:5, ' ms');
|
|
|
+ WriteLn ('MaxAvail: ', MaxAvail, ' MemAvail: ', MemAvail);
|
|
|
+ FOR L := 1 TO 1000 DO BEGIN
|
|
|
+ Permutation [L] := L;
|
|
|
+ END;
|
|
|
+ Start := MSTimer;
|
|
|
+ FOR L := 1000 DOWNTO 1 DO BEGIN
|
|
|
+ Choice := Random (L)+1;
|
|
|
+ K := Permutation [Choice];
|
|
|
+ Permutation [Choice] := Permutation [L];
|
|
|
+ END;
|
|
|
+ LoopTime2 := MSTimer - Start;
|
|
|
+ FOR L := 1 TO 1000 DO BEGIN
|
|
|
+ Permutation [L] := L;
|
|
|
+ END;
|
|
|
+ Write ('Deallocating same 1000 blocks at random: ');
|
|
|
+ Start := MSTimer;
|
|
|
+ FOR L := 1000 DOWNTO 1 DO BEGIN
|
|
|
+ Choice := Random (L)+1;
|
|
|
+ K := Permutation [Choice];
|
|
|
+ Permutation [Choice] := Permutation [L];
|
|
|
+ FreeMem (BlkPtr [K], BlkSize [K]);
|
|
|
+ END;
|
|
|
+ Delta := MSTimer - Start - LoopTime2;
|
|
|
+ Inc (TotalTime, Delta);
|
|
|
+ WriteLn (Delta:5, ' ms');
|
|
|
+ WriteLn ('MaxAvail: ', MaxAvail, ' MemAvail: ', MemAvail);
|
|
|
+ Write ('Allocating 1000 blocks at the end of the heap: ');
|
|
|
+ Start := MSTimer;
|
|
|
+ FOR L := 1 TO 1000 DO BEGIN
|
|
|
+ GetMem (BlkPtr [L], BlkSize [L]);
|
|
|
+ END;
|
|
|
+ Delta := MSTimer-Start-LoopTime;
|
|
|
+ Inc (TotalTime, Delta);
|
|
|
+ WriteLn (Delta:5, ' ms');
|
|
|
+ WriteLn ('MaxAvail: ', MaxAvail, ' MemAvail: ', MemAvail);
|
|
|
+ FOR L := 1 TO 1000 DO BEGIN
|
|
|
+ Permutation [L] := L;
|
|
|
+ END;
|
|
|
+ Start := MSTimer;
|
|
|
+ FOR L := 1000 DOWNTO 1 DO BEGIN
|
|
|
+ Choice := Random (L)+1;
|
|
|
+ K := Permutation [Choice];
|
|
|
+ T:= Permutation [L];
|
|
|
+ Permutation [L] := Permutation [Choice];
|
|
|
+ Permutation [Choice] := T;
|
|
|
+ END;
|
|
|
+ LoopTime2 := MSTimer - Start;
|
|
|
+ FOR L := 1 TO 1000 DO BEGIN
|
|
|
+ Permutation [L] := L;
|
|
|
+ END;
|
|
|
+ Write ('Deallocating 500 blocks at random: ');
|
|
|
+ Start := MSTimer;
|
|
|
+ FOR L := 1000 DOWNTO 501 DO BEGIN
|
|
|
+ Choice := Random (L)+1;
|
|
|
+ K := Permutation [Choice];
|
|
|
+ T:= Permutation [L];
|
|
|
+ Permutation [L] := Permutation [Choice];
|
|
|
+ Permutation [Choice] := T;
|
|
|
+ SYSTEM.FreeMem (BlkPtr [K], BlkSize [K]);
|
|
|
+ END;
|
|
|
+ Delta := MSTimer-Start-LoopTime2;
|
|
|
+ Inc (TotalTime, Delta);
|
|
|
+ WriteLn (Delta:5, ' ms');
|
|
|
+ WriteLn ('MaxAvail: ', MaxAvail, ' MemAvail: ', MemAvail);
|
|
|
+ Start := MSTimer;
|
|
|
+ FOR L := 1 TO 1000 DO BEGIN
|
|
|
+ Dummy := MaxAvail;
|
|
|
+ END;
|
|
|
+ Delta := MSTimer-Start;
|
|
|
+ Inc (TotalTime, (Delta + 5) DIV 10);
|
|
|
+ WriteLn ('1000 calls to MaxAvail: ', Delta:5, ' ms');
|
|
|
+ Start := MSTimer;
|
|
|
+ FOR L := 1 TO 1000 DO BEGIN
|
|
|
+ Dummy := MemAvail;
|
|
|
+ END;
|
|
|
+ Delta := MSTimer - Start;
|
|
|
+ Inc (TotalTime, (Delta + 5) DIV 10);
|
|
|
+ WriteLn ('1000 calls to MemAvail: ', Delta:5, ' ms');
|
|
|
+ WriteLn ('MaxAvail: ', MaxAvail, ' MemAvail: ', MemAvail);
|
|
|
+ Write ('Reallocating deallocated 500 blocks at random: ');
|
|
|
+ Start := MSTimer;
|
|
|
+ FOR L := 501 TO 1000 DO BEGIN
|
|
|
+ GetMem (BlkPtr [Permutation [L]], BlkSize [Permutation [L]]);
|
|
|
+ END;
|
|
|
+ Delta := MSTimer-Start-LoopTime;
|
|
|
+ Inc (TotalTime, Delta);
|
|
|
+ WriteLn (Delta:5, ' ms');
|
|
|
+ WriteLn ('MaxAvail: ', MaxAvail, ' MemAvail: ', MemAvail);
|
|
|
+ Write ('Deallocating all 1000 blocks at random: ');
|
|
|
+ Start := MSTimer;
|
|
|
+ FOR L := 1000 DOWNTO 1 DO BEGIN
|
|
|
+ FreeMem (BlkPtr [L], BlkSize [L]);
|
|
|
+ END;
|
|
|
+ Delta := MSTimer-Start-LoopTime;
|
|
|
+ Inc (TotalTime, Delta);
|
|
|
+ WriteLn (Delta:5, ' ms');
|
|
|
+ WriteLn ('MaxAvail: ', MaxAvail, ' MemAvail: ', MemAvail);
|
|
|
+ WriteLn;
|
|
|
+ WriteLn ('Total time for benchmark: ', TotalTime, ' ms');
|
|
|
+END.
|
|
|
+
|
|
|
+
|
|
|
+
|