<> <> <> <<>> DIRECTORY CD, Core, CoreCDUser, CoreOps, CoreProperties, IO, Logic, Ports, Rope, Rosemary, RosemaryUser, Sisyph, SmallCacheLogic, SmallCacheUtils, TerminalIO; SmallCacheTestCode: CEDAR PROGRAM IMPORTS CoreCDUser, CoreOps, CoreProperties, IO, Logic, Ports, Rope, Rosemary, RosemaryUser, Sisyph, SmallCacheLogic, SmallCacheUtils, TerminalIO ~ BEGIN tester: RosemaryUser.Tester _ NIL; ct: Core.CellType; 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^]; }; <> RunOracleTest: PROC [obName, designName, oracleFileName, initialState, expectedFinalState: Rope.ROPE _ NIL] = { ENABLE { Ports.CheckError => { TerminalIO.PutF["\n***%g\n", IO.rope[msg]]; GOTO done } }; Logic.SetOracleFileName[obName, oracleFileName]; ct _ Sisyph.ES[obName, Sisyph.Create[SmallCacheUtils.GetDesign[designName]]]; [] _ CoreCDUser.SetRootCellTypeDecoration[ct, Sisyph.mode.decoration]; [] _ CoreCDUser.SetDesignRootCellType[SmallCacheUtils.GetDesign[designName], ct]; <> BEGIN testButtons: LIST OF Rope.ROPE _ NIL; public, Vdd, Gnd: Core.Wire; 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]; 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]]]; tester.display.recordSteps _ TRUE; END; <> SmallCacheLogic.ArrayPutState[initialState]; RosemaryUser.StartTest[tester]; IF Rope.Equal[expectedFinalState, SmallCacheLogic.ArrayGetState[]] THEN TerminalIO.PutF["\n***State Check is OK\n"] ELSE { IF SmallCacheLogic.ArrayGetState[]=NIL THEN TerminalIO.PutF["\n***Array state is NIL: state check not performed\n"] ELSE { TerminalIO.PutF["\n***State mismatch\n"]; TerminalIO.PutF[" Expected:\n"]; TerminalIO.PutRope[expectedFinalState]; TerminalIO.PutF["\n Got:\n"]; TerminalIO.PutRope[SmallCacheLogic.ArrayGetState[]]; } }; EXITS done => RETURN }; END.