<> <> <> <<>> DIRECTORY CD, Core, CoreCDUser, CoreOps, CoreProperties, IO, Ports, Rope, Rosemary, RosemaryUser, Sisyph, TerminalIO; SmallCacheTest: CEDAR PROGRAM IMPORTS CoreCDUser, CoreOps, CoreProperties, IO, Ports, Rope, Rosemary, RosemaryUser, Sisyph, TerminalIO ~ BEGIN PortToRope: PROC [level: Ports.Level] RETURNS [r: Rope.ROPE] ~ { r _ SELECT level FROM L => "L", H => "H", X => "X", ENDCASE => ERROR; }; GetBool: PROC [ct: Core.CellType, prop: ATOM, default: BOOL] RETURNS [BOOL] ~ { <> rb: REF BOOL _ NARROW [CoreProperties.GetCellTypeProp[ct, prop]]; RETURN [IF rb=NIL THEN default ELSE rb^]; }; Run: PROC [obName: Rope.ROPE, design: CD.Design] = { ENABLE { Rosemary.Stop => { TerminalIO.PutF["\n***Oracle completed normally\n"]; GOTO done }; Ports.CheckError => { TerminalIO.PutF["\n***%g\n", IO.rope[msg]]; GOTO done } }; ct: Core.CellType; tester: RosemaryUser.Tester _ NIL; public, Vdd, Gnd: Core.Wire; testButtons: LIST OF Rope.ROPE _ NIL; ct _ Sisyph.ES[obName, Sisyph.Create[design]]; [] _ CoreCDUser.SetDesignRootCellType[design, ct]; public _ ct.public; Vdd _ CoreOps.FindWire[public, "Vdd"]; Gnd _ CoreOps.FindWire[public, "Gnd"]; IF Vdd=NIL THEN TerminalIO.PutRope["SmallCacheTest: Couldn't find Vdd\n"] ELSE [] _ Rosemary.SetFixedWire[Vdd, H]; IF Gnd=NIL THEN TerminalIO.PutRope["SmallCacheTest: Couldn't find Gnd\n"] ELSE [] _ Rosemary.SetFixedWire[Gnd, L]; FOR tbl: LIST OF REF ANY _ NARROW[CoreProperties.GetCellTypeProp[ct, $Tests]], tbl.rest UNTIL tbl=NIL DO testButtons _ CONS[CoreOps.FixStupidRef[tbl.first], testButtons]; ENDLOOP; IF testButtons=NIL THEN testButtons _ LIST["Logic Test"]; tester _ RosemaryUser.TestProcedureViewer[ cellType: ct, testButtons: testButtons, name: Rope.Cat[CoreOps.GetCellTypeName[ct], " Test"], displayWires: RosemaryUser.DisplayPortLeafWires[ct], recordDeltas: GetBool[ct, $RecordDeltas, TRUE], cutSet: NARROW[CoreProperties.GetCellTypeProp[ct, $CutSet]]]; RosemaryUser.StartTest[tester]; EXITS done => RETURN }; END.