123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- {
- Program to test heap functions, timing doesn't work
- }
- PROGRAM TestHeap;
- uses
- erroru;
- const
- {$ifdef cpusparc}
- Blocks = 1000;
- {$else}
- Blocks = 10000;
- {$endif}
- Procedure InitMSTimer;
- begin
- end;
- {Get MS Timer}
- Function MSTimer:longint;
- begin
- MSTimer:=0;
- end;
- procedure ShowHeap;
- var
- hstatus : TFPCHeapstatus;
- begin
- hstatus:=GetFPCHeapStatus;
- WriteLn ('Used: ', hstatus.CurrHeapUsed, ' Free: ', hstatus.CurrHeapFree,' Size: ',hstatus.CurrHeapSize);
- end;
- VAR Start, LoopTime,LoopTime2: LONGINT;
- Delta, TotalTime: LONGINT;
- L,Choice,K,T: WORD;
- BlkPtr: ARRAY [1..Blocks] OF POINTER;
- BlkSize: ARRAY [1..Blocks] OF WORD;
- Permutation: ARRAY [1..Blocks] OF WORD;
- BEGIN
- INitMSTimer;
- WriteLn ('Test of TP heap functions');
- WriteLn;
- TotalTime := 0;
- RandSeed := 997;
- ShowHeap;
- Start :=MSTimer;
- FOR L := 1 TO Blocks DO BEGIN
- END;
- LoopTime := MSTimer-Start;
- FOR L := 1 TO Blocks DO BEGIN
- BlkSize [L] := Random (512) + 1;
- END;
- Write ('Allocating ',Blocks,' blocks at the end of the heap: ');
- Start := MSTImer;
- FOR L := 1 TO Blocks DO BEGIN
- GetMem (BlkPtr [L], BlkSize [L]);
- END;
- Delta := MSTimer-Start-LoopTime;
- Inc (TotalTime, Delta);
- WriteLn (Delta:5, ' ms');
- ShowHeap;
- Write ('Deallocating same ',Blocks,' blocks in reverse order:');
- Start := MSTimer;
- FOR L := 1 TO Blocks DO BEGIN
- FreeMem (BlkPtr [L], BlkSize [L]);
- END;
- Delta := MSTimer-Start-LoopTime;
- Inc (TotalTime, Delta);
- WriteLn (Delta:5, ' ms');
- ShowHeap;
- Write ('Allocating ',Blocks,' blocks at the end of the heap: ');
- Start := MSTimer;
- FOR L := 1 TO Blocks DO BEGIN
- GetMem (BlkPtr [L], BlkSize [L]);
- END;
- Delta := MSTimer-Start-LoopTime;
- Inc (TotalTime, Delta);
- WriteLn (Delta:5, ' ms');
- ShowHeap;
- FOR L := 1 TO Blocks DO BEGIN
- Permutation [L] := L;
- END;
- Start := MSTimer;
- FOR L := Blocks DOWNTO 1 DO BEGIN
- Choice := Random (L)+1;
- K := Permutation [Choice];
- Permutation [Choice] := Permutation [L];
- END;
- LoopTime2 := MSTimer - Start;
- FOR L := 1 TO Blocks DO BEGIN
- Permutation [L] := L;
- END;
- Write ('Deallocating same ',Blocks,' blocks at random: ');
- Start := MSTimer;
- FOR L := Blocks 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');
- ShowHeap;
- Write ('Allocating ',Blocks,' blocks at the end of the heap: ');
- Start := MSTimer;
- FOR L := 1 TO Blocks DO BEGIN
- GetMem (BlkPtr [L], BlkSize [L]);
- END;
- Delta := MSTimer-Start-LoopTime;
- Inc (TotalTime, Delta);
- WriteLn (Delta:5, ' ms');
- ShowHeap;
- FOR L := 1 TO Blocks DO BEGIN
- Permutation [L] := L;
- END;
- Start := MSTimer;
- FOR L := Blocks 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 Blocks DO BEGIN
- Permutation [L] := L;
- END;
- Write ('Deallocating ',(Blocks div 2 + 1),' blocks at random: ');
- Start := MSTimer;
- FOR L := Blocks DOWNTO (Blocks div 2 + 1) 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');
- ShowHeap;
- Write ('Reallocating deallocated ',(Blocks div 2 + 1),' blocks at random: ');
- Start := MSTimer;
- FOR L := (Blocks div 2+1) TO Blocks DO BEGIN
- GetMem (BlkPtr [Permutation [L]], BlkSize [Permutation [L]]);
- END;
- Delta := MSTimer-Start-LoopTime;
- Inc (TotalTime, Delta);
- WriteLn (Delta:5, ' ms');
- ShowHeap;
- Write ('Deallocating all ',Blocks,' blocks at random: ');
- Start := MSTimer;
- FOR L := Blocks DOWNTO 1 DO BEGIN
- FreeMem (BlkPtr [L], BlkSize [L]);
- END;
- Delta := MSTimer-Start-LoopTime;
- Inc (TotalTime, Delta);
- WriteLn (Delta:5, ' ms');
- ShowHeap;
- WriteLn;
- WriteLn ('Total time for benchmark: ', TotalTime, ' ms');
- END.
|