home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume35
/
m2-splay22
/
part01
/
splayTest.mod
< prev
Wrap
Text File
|
1993-01-20
|
4KB
|
217 lines
MODULE splayTest;
(*
Title:
Last Edit: Mon Dec 21 11:43:13 1992
Author: Johan Persson at my9
SCCS: %Z%%M% %I% %E%
*)
IMPORT splay, splayItem, std, string, int, card, randomstrm;
CONST
MaxC = 25000;
MaxR = 25000.0;
VAR t:splay.T;
i,r,rank,tests:CARDINAL;
tmp:splayItem.T;
bf:BOOLEAN;
v : ARRAY [1..MaxC] OF BOOLEAN;
rnd : randomstrm.Obj;
idx:CARDINAL;
PROCEDURE printsplayItem(i:splayItem.T);
BEGIN (* printsplayItem *)
int.write(std.out,i,0);
string.writef(std.out,",");
END printsplayItem;
PROCEDURE msg(s:ARRAY OF CHAR);
BEGIN (* msg *)
string.writef(std.out,s);
END msg;
PROCEDURE testRank ();
VAR i,idx:CARDINAL;
BEGIN (* testRank *)
idx:=1;
FOR i := 1 TO MaxC DO
IF v[i] THEN
rank:=splay.getRank(t,i);
IF idx#rank THEN
string.writef(std.out,"** ERROR IN RANK.\n");
string.writef(std.out," (i=");
card.write(std.out,i,0);
string.writef(std.out,")\n");
string.writef(std.out," rank=");
card.write(std.out,rank,0);
string.writef(std.out,"\n");
string.writef(std.out," idx=");
card.write(std.out,idx,0);
string.writef(std.out,"\n");
msg("Number OF tests: ");
card.write(std.out,tests,0);
string.writef(std.out,"\n");
splay.mapIn(t,printsplayItem);
HALT;
END;
INC(idx);
ELSE
(* card.write(std.out,i,0);
msg(": F, ");*)
END;
END;
END testRank;
BEGIN
msg("Create the structure ...");
splay.create(t);
msg("done.\n");
msg("Beginning with insertions\n");
FOR i := 0 TO 255 DO
splay.insert(t,i);
END (* for *);
msg("Done with insertions\n");
IF splay.find(t,13,tmp) THEN
msg("found 13 (tmp=");
int.write(std.out,tmp,0);
msg(") OK.\n");
splay.mapPre(t,printsplayItem);
msg("\n");
ELSE
msg("****** ERROR IN find routine!\n");
END (* if *);
IF splay.find(t,18,tmp) THEN
msg("found 18 (tmp=");
int.write(std.out,tmp,0);
msg(") OK.\n");
splay.mapPre(t,printsplayItem);
msg("\n");
ELSE
msg("**** ERROR IN exist routine!\n");
END (* if *);
IF splay.find(t,300,tmp) THEN
msg("ERROR IN exist routine! ");
msg("found 300 (tmp=");
int.write(std.out,tmp,0);
msg(")\n");
ELSE
msg("Didn't find 300. OK.\n");
splay.mapPre(t,printsplayItem);
msg("\n");
END (* if *);
msg("Print a sorted version ...\n");
splay.mapIn(t,printsplayItem);
msg("\n\n Print some rank's\n");
IF splay.getRankElement(t,3,tmp) THEN
msg("3=> "); int.write(std.out,tmp,0); msg("\n");
ELSE
msg("ERROR didn't find rank 3\n\n");
END;
IF splay.getRankElement(t,1,tmp) THEN
msg("1=> "); int.write(std.out,tmp,0); msg("\n");
ELSE
msg("ERROR didn't find rank 1\n\n");
END;
IF splay.getRankElement(t,6,tmp) THEN
msg("6=> "); int.write(std.out,tmp,0); msg("\n");
ELSE
msg("ERROR didn't find rank 6\n\n");
END;
IF splay.getRank(t,255)#256 THEN
msg("**** ERROR IN getRank\n");
ELSE
msg("\n 255 has rank 256\n");
END;
msg("\n and now we delete som element");
msg("\n 6 ..");
splay.delete(t,6);
msg("\n Print a sorted version ...\n");
splay.mapIn(t,printsplayItem);
msg("\n");
splay.destroy(t);
msg("\n Finished first part. Starting exhaustive test (hit Ctrl-C TO abort)\n");
splay.create(t);
msg("Beginning with insertions ... \n");
FOR i := 1 TO MaxC DO
splay.insert(t,i);
v[i]:=TRUE;
END (* for *);
msg("done.\n");
IF splay.find(t,MaxC DIV 2,tmp) THEN
msg("Starting test: of insert... ");
testRank;
msg("done.\n Passed test 1.\n");
ELSE
msg("Failed 'find' test 1\n");
END;
msg("Starting test sequence ...\n");
tests:=0;
rnd:=randomstrm.uniform(1.0, MaxR, 837 );
LOOP
INC(tests);
IF tests=10000 THEN
msg(".\n");
tests:=0;
END;
r:= TRUNC(randomstrm.next(rnd));
IF v[r] THEN
IF TRUNC(randomstrm.next(rnd)) > (MaxC DIV 2) THEN
IF NOT splay.find(t,r,tmp) THEN
msg("Error 'find'\n");
END;
ELSE
splay.delete(t,r);
v[r]:=FALSE;
END;
testRank;
ELSE
splay.insert(t,r);
v[r]:=TRUE;
testRank;
END (* if *);
END (* loop *);
END splayTest.