packages feed

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.