PROGRAM setranges6(output); { Written by: Mirsad Todorovac Nov 2001; copying by GPL. ------------------------------------------------------------ Stresses setrange construction and subtraction; checks if there's all IN SET what we haven't subtracted; and whether anything we've subtracted remained mistakenly IN SET. lasts few seconds where I've tested it.} CONST maxN = 255; VAR seta, setb, setc: SET OF 0..maxN value [0..maxN]; i, j, len: Cardinal; start, endr: 0 .. maxN; extra: Boolean = false; missing: Boolean = false; extI, extS, extE, misI, misS, misE: 0..maxN; BEGIN {Test whether the set was initialized properly is mirsad03.pas} FOR len:= 1 TO maxN+1 DO FOR start:= 0 TO maxN-len+1 DO BEGIN endr := start+len-1; {writeln('constr. range = ', start, ',', endr);} setb := seta - [start .. endr]; FOR i:= 0 TO maxN DO BEGIN {It's sufficient for one example to fail to have found a bug!} IF (NOT extra AND (i>=start) AND (i<=endr) AND (i IN setb)) THEN BEGIN extra := true; extI := i; extS := start; extE := endr; END; IF (NOT missing AND((iendr))AND NOT(i IN setb)) THEN BEGIN missing := true; misI := i; misS := start; misE := endr; END END END; IF (NOT extra AND NOT missing) THEN writeln('OK') ELSE BEGIN write('Failed:'); IF (extra) THEN write(' extra: ',extI,' IN [',0,'..',maxN,']-[',extS,'..',extE,']'); IF (missing) THEN write(' miss: ',misI,' NOT IN [',0,'..',maxN,']-[',misS,'..',misE,']'); writeln; END; END.