-- beadstest.mesa

DIRECTORY IODefs:FROM"IODefs",
BeadsInlines:FROM"BeadsInlines",
InlineDefs:FROM"InlineDefs",
BeadsDefs:FROM"BeadsDefs";
BeadsTest:PROGRAM IMPORTS BeadsInlines, IODefs, InlineDefs, BeadsDefs
EXPORTS BeadsDefs =
BEGIN OPEN BeadsDefs, BeadsInlines;

Error:SIGNAL=CODE;

FullTest:PUBLIC PROCEDURE=BEGIN
testFail:BOOLEAN←FALSE;
OneTest:PROCEDURE[i:Desc]=BEGIN
IF Height[i]<=0 OR Width[i]<=0 OR Type[i]=none THEN RETURN;
FOR jj:CARDINAL IN (i.z..topBead] DO
j:Desc←GetDesc[jj];
delta:Coord←Delta[i,j];
IF Type[j]=none
OR Height[j]<=0 OR Width[j]<=0
OR Lfm[j]>=Rtm[i]+delta.x
OR Lfm[i]>=Rtm[j]+delta.x
OR Bot[j]>=Top[i]+delta.y
OR Bot[i]>=Top[i]+delta.y
OR ~SameLevel[i,j]
OR SameCircuit[i,j]
OR TouchingBeads[i,j] THEN LOOP;
BEGIN OPEN IODefs;
beadi:Bead←i.p↑;
beadj:Bead←j.p↑;
IF ~testFail THEN {testFail←TRUE; Error;};
WriteChar[CR];
WriteString["conflict between"];
WriteNumber[i.z, [10,FALSE,TRUE,4]];
WriteString[" and "];
WriteNumber[j.z,[10,FALSE,TRUE,4]];
END; ENDLOOP;
END;
EnumerateBeads[OneTest];
END;

END..