with Ada.Text_IO; use Ada.Text_IO;
with Ada.Calendar; use Ada.Calendar;
with GNATCOLL.OMP.Generic_Array_Sort;
with Ada.Numerics.Discrete_Random;
with Test_Assert; use Test_Assert;
function Test return Integer is
Timing : constant Boolean := False;
type Index is range 1 .. 5_000_000;
type My_Array is array (Index range <>) of Integer;
procedure My_Sort is new GNATCOLL.OMP.Generic_Array_Sort
(Index, Integer, My_Array);
package Random is new Ada.Numerics.Discrete_Random (Integer);
procedure Randomize (Container : in out My_Array) is
Seed : Random.Generator;
begin
for J in Container'Range loop
Container (J) := Random.Random (Seed);
end loop;
end Randomize;
procedure Check_Array_Sorted (Container : My_Array) is
begin
for J in Container'First + 1 .. Container'Last loop
if Container (J) < Container (J - 1) then
Assert (False);
end if;
end loop;
end Check_Array_Sorted;
Arr : access My_Array := new My_Array (Index);
Start : Time;
Time : Duration;
begin
Randomize (Arr.all);
Start := Clock;
My_Sort (Arr.all);
Time := Clock - Start;
Check_Array_Sorted (Arr.all);
if Timing then
Put_Line ("time: " & Time'Image);
end if;
return Report;
end Test;