Browse Source

Add TESTS to AbstractMem library (Initial commit)

PascalCoin 4 years ago
parent
commit
aa3c7cff4f

+ 1 - 5
src/libraries/abstractmem/UCacheMem.pas

@@ -225,7 +225,6 @@ end;
 
 procedure TCacheMem.Clear;
 var P, PCurr : PCacheMemData;
-  i : Integer;
 begin
   PCurr := FCacheData.FindLowest;
   while (Assigned(PCurr)) do begin
@@ -637,7 +636,7 @@ begin
 end;
 
 function TCacheMem.ToString: String;
-var i : Integer;
+var
   LLines : TStrings;
   LPct : Double;
   PCurrent : PCacheMemData;
@@ -676,9 +675,6 @@ begin
         inc(FPendingToSaveBytes,PCurrent^.GetSize);
       end;
       PCurrent^.MarkAsUsed(Self,PCurrent);
-      {$IFDEF ABSTRACTMEM_ENABLE_STATS}
-//      inc(FCacheMemStats.reusedCacheMemDataCount); XXXXXXXXXXXXXX
-      {$ENDIF}
       Exit;
     end;
   end;

+ 66 - 0
src/libraries/abstractmem/tests/AbstractMem.Tests.dpr

@@ -0,0 +1,66 @@
+program AbstractMem.Tests;
+
+{$IFDEF FPC}
+  {$MODE Delphi}
+{$ENDIF}
+
+// Enable for Console tests
+{.$DEFINE CONSOLE_TESTRUNNER}
+
+{$IFDEF CONSOLE_TESTRUNNER}
+  {$APPTYPE CONSOLE}
+{$ENDIF}
+
+uses
+  {$IFDEF FPC}
+  {$IFDEF CONSOLE_TESTRUNNER}
+  Classes,
+  {$ELSE}
+  Interfaces,
+  Forms,
+  GUITestRunner,
+  {$ENDIF }
+  {$ELSE}
+  Forms,
+  TestFramework,
+  GUITestRunner,
+  TextTestRunner,
+  {$ENDIF }
+  UAbstractBTree in '..\UAbstractBTree.pas',
+  UAbstractMem in '..\UAbstractMem.pas',
+  UAbstractMemTList in '..\UAbstractMemTList.pas',
+  UAVLCache in '..\UAVLCache.pas',
+  UCacheMem in '..\UCacheMem.pas',
+  UFileMem in '..\UFileMem.pas',
+  UOrderedList in '..\UOrderedList.pas',
+  UCacheMem.Tests in 'src\UCacheMem.Tests.pas';
+
+{$IF Defined(FPC) and (Defined(CONSOLE_TESTRUNNER))}
+type
+  TFreePascalConsoleRunner = class(TTestRunner)
+  protected
+  end;
+var
+  Application : TFreePascalConsoleRunner;
+{$ENDIF}
+
+begin
+  {$IF Defined(FPC) and (Defined(CONSOLE_TESTRUNNER))}
+  Application := TFreePascalConsoleRunner.Create(nil);
+  {$ENDIF}
+
+  Application.Initialize;
+  {$IFDEF FPC}
+  {$IF Not Defined(CONSOLE_TESTRUNNER)}
+  Application.CreateForm(TGuiTestRunner, TestRunner);
+  {$ENDIF}
+  Application.Run;
+  {$ELSE}
+  if IsConsole then
+    TextTestRunner.RunRegisteredTests
+  else
+    GUITestRunner.RunRegisteredTests;
+  {$ENDIF}
+end.
+
+

+ 79 - 0
src/libraries/abstractmem/tests/AbstractMem.Tests.lpi

@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="11"/>
+    <PathDelim Value="\"/>
+    <General>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <Title Value="fpcunitproject1"/>
+      <ResourceType Value="res"/>
+      <UseXPManifest Value="True"/>
+    </General>
+    <BuildModes Count="1">
+      <Item1 Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <UseFileFilters Value="True"/>
+    </PublishOptions>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes Count="0"/>
+    </RunParams>
+    <RequiredPackages Count="3">
+      <Item1>
+        <PackageName Value="fpcunittestrunner"/>
+      </Item1>
+      <Item2>
+        <PackageName Value="LCL"/>
+      </Item2>
+      <Item3>
+        <PackageName Value="FCL"/>
+      </Item3>
+    </RequiredPackages>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="AbstractMem.Tests.dpr"/>
+        <IsPartOfProject Value="True"/>
+      </Unit0>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <PathDelim Value="\"/>
+    <SearchPaths>
+      <IncludeFiles Value="..;src"/>
+      <OtherUnitFiles Value="..;src"/>
+      <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+    <Parsing>
+      <SyntaxOptions>
+        <SyntaxMode Value="delphi"/>
+      </SyntaxOptions>
+    </Parsing>
+    <Linking>
+      <Options>
+        <Win32>
+          <GraphicApplication Value="True"/>
+        </Win32>
+      </Options>
+    </Linking>
+    <Other>
+      <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL"/>
+    </Other>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 87 - 0
src/libraries/abstractmem/tests/src/UCacheMem.Tests.pas

@@ -0,0 +1,87 @@
+unit UCacheMem.Tests;
+
+{$IFDEF FPC}
+  {$MODE Delphi}
+{$ENDIF}
+
+interface
+ 
+ uses
+   SysUtils,
+   {$IFDEF FPC}
+   fpcunit, testutils, testregistry,
+   {$ELSE}
+   TestFramework,
+   {$ENDIF}
+   UCacheMem;
+ type
+   // Test methods for class TCalc
+   TestTCacheMem = class(TTestCase)
+   strict private
+     FCurrentMem : TBytes;
+     function OnNeedDataProc(var ABuffer; AStartPos : Integer; ASize : Integer) : Boolean;
+     function OnSaveDataProc(const ABuffer; AStartPos : Integer; ASize : Integer) : Boolean;
+   public
+     procedure SetUp; override;
+     procedure TearDown; override;
+   published
+     procedure TestCacheMem;
+   end;
+
+ implementation
+
+function TestTCacheMem.OnNeedDataProc(var ABuffer; AStartPos, ASize: Integer): Boolean;
+begin
+  if (High(FCurrentMem) >= AStartPos + ASize) then begin
+    Result := True;
+    Move(FCurrentMem[AStartPos],ABuffer,ASize);
+  end else Result := False;
+end;
+
+function TestTCacheMem.OnSaveDataProc(const ABuffer; AStartPos, ASize: Integer): Boolean;
+begin
+  if (High(FCurrentMem) >= AStartPos + ASize) then begin
+    Result := True;
+    Move(ABuffer,FCurrentMem[AStartPos],ASize);
+  end else Result := False;
+end;
+
+procedure TestTCacheMem.SetUp;
+var i : Integer;
+begin
+  SetLength(FCurrentMem,100000);
+  for i :=0 to High(FCurrentMem) do begin
+    FCurrentMem[i] := i MOD 89;
+  end;
+end;
+
+procedure TestTCacheMem.TearDown;
+begin
+  SetLength(FCurrentMem,0);
+end;
+
+procedure TestTCacheMem.TestCacheMem;
+Var LCMem : TCacheMem;
+  LBuff : TBytes;
+  i : Integer;
+begin
+  LCMem := TCacheMem.Create(OnNeedDataProc,OnSaveDataProc);
+  Try
+    SetLength(LBuff,Length(FCurrentMem));
+    CheckTrue( LCMem.LoadData(LBuff[0],0,100) );
+    // Incremental round
+    i := 1;
+    while (i+i < High(FCurrentMem)) do begin
+      CheckTrue( LCMem.LoadData(LBuff[0],i,i) );
+      inc(i);
+    end;
+    CheckFalse( LCMem.LoadData( LBuff[0],i,i) );
+    LCMem.ConsistencyCheck;
+  Finally
+    LCMem.Free;
+  End;
+end;
+
+initialization
+  RegisterTest(TestTCacheMem{$IFNDEF FPC}.Suite{$ENDIF});
+end.