language-Modula2-0.1: examples/Modula-2_Libraries/PMOS/sources/tests/sorttest.mod
MODULE SortTest;
(********************************************************)
(* *)
(* Test of module QuickSort *)
(* *)
(* Programmer: P. Moylan *)
(* Last edited: 6 March 1995 *)
(* Status: Working *)
(* *)
(********************************************************)
FROM QuickSortModule IMPORT
(* proc *) QuickSort;
FROM RandCard IMPORT
(* proc *) RandCardinal;
FROM Windows IMPORT
(* type *) Window, Colour, FrameType, DividerType,
(* proc *) OpenWindow, CloseWindow, WriteLn, PressAnyKey,
WriteString, OpenSimpleWindow;
FROM NumericIO IMPORT
(* proc *) WriteRJLongCard;
(************************************************************************)
CONST testing = TRUE;
VAR debug: Window;
TYPE
Datum = LONGCARD;
DataPtr = POINTER TO Datum;
(************************************************************************)
PROCEDURE GreaterOrEqual (p1, p2: DataPtr): BOOLEAN;
(* Comparison of two data elements. Returns TRUE iff p1^ >= p2^. *)
BEGIN
(*
IF testing THEN
WriteLn (debug); WriteString (debug, "Comparing ");
WriteRJCard (debug, p1^, 8);
WriteRJCard (debug, p2^, 8);
END (*IF*);
*)
RETURN p1^ >= p2^;
END GreaterOrEqual;
(************************************************************************)
PROCEDURE RunTheTest;
CONST TestSize = 300;
VAR data: ARRAY [0..TestSize-1] OF Datum;
w: Window;
j: CARDINAL;
BEGIN
OpenWindow (w, cyan, blue, 0, 24, 0, 79,
noframe, nodivider);
(* Generate some test data *)
FOR j := 0 TO TestSize-1 DO
data[j] := RandCardinal();
END (*FOR*);
(* Write out the test data *)
WriteLn (w); WriteString (w, "Original data");
FOR j := 0 TO TestSize-1 DO
IF j MOD 5 = 0 THEN
WriteLn (w);
END (*IF*);
WriteRJLongCard (w, data[j], 14);
END (*FOR*);
WriteLn (w);
PressAnyKey (w);
(* Perform the sort *)
QuickSort (data, TestSize-1, SIZE(Datum), GreaterOrEqual);
(* Write out the sorted array *)
WriteLn (w); WriteString (w, "Sorted data");
FOR j := 0 TO TestSize-1 DO
IF j MOD 5 = 0 THEN
WriteLn (w);
END (*IF*);
WriteRJLongCard (w, data[j], 14);
END (*FOR*);
PressAnyKey (w);
CloseWindow (w);
END RunTheTest;
(************************************************************************)
(* MAIN PROGRAM *)
(************************************************************************)
BEGIN
IF testing THEN
OpenSimpleWindow (debug, 8, 15, 0, 79);
END (*IF*);
RunTheTest;
END SortTest.