unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, EpikTimer,
contnrs, fgl;
type
TMyMap = specialize TFPGMap<Int64, Byte>;
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ private declarations }
tm: TEpikTimer;
l1: TList;
l2: TStringList;
l3: TFPHashList;
l4: TMyMap;
public
{ public declarations }
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
const
MAX_ITEMS = 1000000;
FIND_ITEM = 500000;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
tm.Clear();
tm.Start();
for i:=1 to MAX_ITEMS do
l1.Add(Pointer(i));
tm.Stop();
WriteLn('List fill time: ', tm.ElapsedStr);
tm.Clear();
tm.Start();
l1.IndexOf(pointer(FIND_ITEM));
tm.Stop();
WriteLn('List find time: ', tm.ElapsedStr);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
begin
tm.Clear();
tm.Start();
for i:=1 to MAX_ITEMS do
l2.Add(IntToStr(i));
tm.Stop();
WriteLn('String fill time: ', tm.ElapsedStr);
tm.Clear();
tm.Start();
l2.Find(IntToStr(FIND_ITEM), i);
tm.Stop();
WriteLn('String find time: ', tm.ElapsedStr);
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i: Integer;
begin
tm.Clear();
tm.Start();
for i:=1 to MAX_ITEMS do
l3.Add(IntToStr(i), nil);
tm.Stop();
WriteLn('Hash fill time: ', tm.ElapsedStr);
tm.Clear();
tm.Start();
l3.Find(IntToStr(FIND_ITEM));
tm.Stop();
WriteLn('Hash find time: ', tm.ElapsedStr);
end;
procedure TForm1.Button4Click(Sender: TObject);
var
i: Integer;
begin
tm.Clear();
tm.Start();
for i:=1 to MAX_ITEMS do
l4.Add(i, 0);
tm.Stop();
WriteLn('Map fill time: ', tm.ElapsedStr);
tm.Clear();
tm.Start();
Writeln(l4.Find(FIND_ITEM+1, i));
writeln(i);
tm.Stop();
WriteLn('Map find time: ', tm.ElapsedStr);
end;
procedure TForm1.AfterConstruction;
begin
inherited AfterConstruction;
tm := TEpikTimer.Create(nil);
l1 := TList.Create;
l2 := TStringList.Create;
l3 := TFPHashList.Create;
l4 := TMyMap.Create;
end;
procedure TForm1.BeforeDestruction;
begin
l1.Free;
l2.Free;
l3.Free;
l4.Free;
tm.Free;
inherited BeforeDestruction;
end;
end.