DIRECTORY Intervals, Random; TestIntervals: CEDAR PROGRAM IMPORTS Intervals, Random SHARES Intervals = BEGIN OPEN Intervals; Int: TYPE = INT _ 0; Results: TYPE = RECORD [c: SEQUENCE size: NAT OF Int]; ValueInterval: PROC [table: Table, value: REF] RETURNS [interval: Interval] = { sizeOfValues: REF INT _ NARROW [table.userData]; pos: REF INT _ NARROW [value]; interval _ [pos^-sizeOfValues^, pos^+sizeOfValues^]; }; Test: PROC [numberOfValues: NAT, rangeMax: NAT] RETURNS [table: Table, results: REF Results, intervs: LIST OF Interval _ NIL] = { sizeOfValues: NAT _ 2; rs: Random.RandomStream _ Random.Create[rangeMax, rangeMax]; last: REF; pos: INT; count: INT _ 0; Count: PROC [table: Table, v: Value] RETURNS [BOOL _ FALSE] = {count _ count+1}; Each: PROC [table: Table, value: Value] RETURNS [BOOL _ FALSE] = {intervs _ CONS [ValueInterval[table, value], intervs]}; MakeError: PROC [table: Table, v: Value] RETURNS [BOOL _ FALSE] = {ERROR}; table _ Create[range: [-sizeOfValues, rangeMax+sizeOfValues], valueInterval: ValueInterval, userData: NEW [INT _ sizeOfValues]]; THROUGH [0 .. numberOfValues] DO pos _ Random.NextInt[rs]; Insert[table, (last _ NEW [INT _ pos])]; ENDLOOP; IF table.size#numberOfValues+1 THEN ERROR; Delete[table, last]; IF table.size#numberOfValues THEN ERROR; Delete[table, last]; IF table.size#numberOfValues THEN ERROR; results _ NEW [Results[table.data.hashSize]]; FOR i: NAT IN [0 .. table.data.hashSize) DO FOR list: LIST OF Value _ table.data[i], list.rest WHILE list#NIL DO results[i] _ results[i]+1; ENDLOOP; ENDLOOP; [] _ Enumerate[table, Count]; IF count#numberOfValues THEN ERROR; [] _ Enumerate[table, Each, [rangeMax/2-10*sizeOfValues, rangeMax/2+10*sizeOfValues]]; [] _ Enumerate[table, MakeError, [-sizeOfValues-10, -sizeOfValues-5]]; }; END. ϊTestIntervals.mesa Copyright c 1985 by Xerox Corporation. All rights reversed. Created by Bertrand Serlet, November 16, 1985 7:22:05 pm PST Bertrand Serlet, March 12, 1986 11:27:31 pm PST Test program to shake a little bit the implementation ΚΤ– "cedar" style˜codešœ™Kšœ Οmœ1™