Skip to content
Snippets Groups Projects
uutlAlgorithmTests.pas 3.35 KiB
Newer Older
bergmann's avatar
bergmann committed
unit uutlAlgorithmTests;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, TestFramework,
  uutlComparer;

type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  TutlAlgorithmTest = class(TTestCase)
  published
    procedure BinarySearch;
    procedure QuickSort;
  end;

implementation

uses
bergmann's avatar
bergmann committed
  uutlTypes, uutlGenerics, uutlAlgorithm;
bergmann's avatar
bergmann committed

type
  TIntArray = specialize TutlArray<Integer>;
  TQuickSort = specialize TutlQuickSort<Integer>;
  TBinarySearch = specialize TutlBinarySearch<Integer>;
  TIntComparer = specialize TutlComparer<Integer>;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//TutlAlgorithmTest/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TutlAlgorithmTest.BinarySearch;
var
  arr: TIntArray;
  index: Integer;
  ret: Boolean;
begin
bergmann's avatar
bergmann committed
  SetLength(arr, 10);
bergmann's avatar
bergmann committed
  arr[0] := 1;
  arr[1] := 4;
  arr[2] := 5;
  arr[3] := 6;
  arr[4] := 10;
  arr[5] := 11;
  arr[6] := 13;
  arr[7] := 20;
  arr[8] := 21;
  arr[9] := 22;

bergmann's avatar
bergmann committed
  ret := TBinarySearch.Search(arr[0], Length(arr), TIntComparer.Create, 4, index);
bergmann's avatar
bergmann committed
  AssertTrue  (ret);
  AssertEquals(1, index);

bergmann's avatar
bergmann committed
  ret := TBinarySearch.Search(arr[0], Length(arr), TIntComparer.Create, 7, index);
bergmann's avatar
bergmann committed
  AssertFalse (ret);
  AssertEquals(4, index);

bergmann's avatar
bergmann committed
  ret := TBinarySearch.Search(arr[0], Length(arr), TIntComparer.Create, 13, index);
bergmann's avatar
bergmann committed
  AssertTrue  (ret);
  AssertEquals(6, index);

bergmann's avatar
bergmann committed
  ret := TBinarySearch.Search(arr[0], Length(arr), TIntComparer.Create, 19, index);
bergmann's avatar
bergmann committed
  AssertFalse (ret);
  AssertEquals(7, index);

bergmann's avatar
bergmann committed
  ret := TBinarySearch.Search(arr[0], Length(arr), TIntComparer.Create, 25, index);
bergmann's avatar
bergmann committed
  AssertFalse (ret);
  AssertEquals(10, index);
end;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TutlAlgorithmTest.QuickSort;
var
  arr: TIntArray;
begin
bergmann's avatar
bergmann committed
  SetLength(arr, 20);
bergmann's avatar
bergmann committed
  arr[ 0] := 134;
  arr[ 1] := 314;
  arr[ 2] := 721;
  arr[ 3] := 672;
  arr[ 4] := 831;
  arr[ 5] := 163;
  arr[ 6] := 126;
  arr[ 7] := 732;
  arr[ 8] := 175;
  arr[ 9] := 274;
  arr[10] := 462;
  arr[11] := 627;
  arr[12] := 633;
  arr[13] := 672;
  arr[14] := 752;
  arr[15] := 367;
  arr[16] := 263;
  arr[17] := 456;
  arr[18] := 678;
  arr[19] := 832;
bergmann's avatar
bergmann committed
  TQuickSort.Sort(arr[0], Length(arr), TIntComparer.Create);
bergmann's avatar
bergmann committed
  AssertEquals(126, arr[ 0]);
  AssertEquals(134, arr[ 1]);
  AssertEquals(163, arr[ 2]);
  AssertEquals(175, arr[ 3]);
  AssertEquals(263, arr[ 4]);
  AssertEquals(274, arr[ 5]);
  AssertEquals(314, arr[ 6]);
  AssertEquals(367, arr[ 7]);
  AssertEquals(456, arr[ 8]);
  AssertEquals(462, arr[ 9]);
  AssertEquals(627, arr[10]);
  AssertEquals(633, arr[11]);
  AssertEquals(672, arr[12]);
  AssertEquals(672, arr[13]);
  AssertEquals(678, arr[14]);
  AssertEquals(721, arr[15]);
  AssertEquals(732, arr[16]);
  AssertEquals(752, arr[17]);
  AssertEquals(831, arr[18]);
  AssertEquals(832, arr[19]);
end;

initialization
  RegisterTest(TutlAlgorithmTest.Suite);
end.