DIRECTORY CoreClasses, CoreCreate, CoreFlat, CoreOps, Static, TerminalIO; TestStatic: CEDAR PROGRAM IMPORTS CoreClasses, CoreCreate, CoreFlat, CoreOps, Static, TerminalIO = BEGIN CreateInverter: PROC [] RETURNS [cellType: CoreCreate.CellType] = { In: CoreCreate.Wire _ CoreOps.CreateWire[name: "In"]; Out: CoreCreate.Wire _ CoreOps.CreateWire[name: "Out"]; Gnd: CoreCreate.Wire _ CoreOps.CreateWire[name: "Gnd"]; Vdd: CoreCreate.Wire _ CoreOps.CreateWire[name: "Vdd"]; ntrans: CoreClasses.CellInstance _ NEW [CoreClasses.CellInstanceRec _ [ actual: CoreOps.CreateWire[LIST [In, Out, Gnd]], type: CoreClasses.CreateTransistor[nE] ]]; ptrans: CoreClasses.CellInstance _ NEW [CoreClasses.CellInstanceRec _ [ actual: CoreOps.CreateWire[LIST [In, Out, Vdd, Vdd]], type: CoreClasses.CreateTransistor[pE] ]]; cellType _ CoreClasses.CreateRecordCell[ public: CoreOps.CreateWire[LIST [In, Out, Gnd, Vdd]], internal: CoreOps.CreateWire[LIST [In, Out, Gnd, Vdd]], instances: LIST [ntrans, ptrans], name: "Inverter" ]; }; Create2Inverter: PROC [] RETURNS [cellType: CoreCreate.CellType] = { In: CoreCreate.Wire _ CoreOps.CreateWire[name: "In"]; Out: CoreCreate.Wire _ CoreOps.CreateWire[name: "Out"]; Gnd: CoreCreate.Wire _ CoreOps.CreateWire[name: "Gnd"]; Vdd: CoreCreate.Wire _ CoreOps.CreateWire[name: "Vdd"]; Intern: CoreCreate.Wire _ CoreOps.CreateWire[name: "Intern"]; InInternOut: CoreCreate.Wire _ CoreCreate.WireList[LIST[In, Intern, Out], "InInternOut"]; inverter: CoreCreate.CellType _ CreateInverter[]; first: CoreClasses.CellInstance _ NEW [CoreClasses.CellInstanceRec _ [ actual: CoreOps.CreateWire[LIST [In, Intern, Gnd, Vdd]], type: inverter ]]; second: CoreClasses.CellInstance _ NEW [CoreClasses.CellInstanceRec _ [ actual: CoreOps.CreateWire[LIST [Intern, Out, Gnd, Vdd]], type: inverter ]]; cellType _ CoreClasses.CreateRecordCell[ public: CoreOps.CreateWire[LIST [In, Out, Gnd, Vdd]], internal: CoreOps.CreateWire[LIST [In, Out, Gnd, Vdd, Intern, InInternOut]], instances: LIST [first, second], name: "Inverter2" ]; }; CreateBrokeInverter2: PROC [] RETURNS [cellType: CoreCreate.CellType] = { In: CoreCreate.Wire _ CoreOps.CreateWire[name: "In"]; Out: CoreCreate.Wire _ CoreOps.CreateWire[name: "Out"]; Gnd: CoreCreate.Wire _ CoreOps.CreateWire[name: "Gnd"]; Vdd: CoreCreate.Wire _ CoreOps.CreateWire[name: "Vdd"]; InternA: CoreCreate.Wire _ CoreOps.CreateWire[name: "InternA"]; InternB: CoreCreate.Wire _ Static.UnconnectedOK[CoreOps.CreateWire[name: "InternB"]]; inverter: CoreCreate.CellType _ CreateInverter[]; first: CoreClasses.CellInstance _ NEW [CoreClasses.CellInstanceRec _ [ actual: CoreOps.CreateWire[LIST [In, InternA, Gnd, Vdd]], type: inverter ]]; second: CoreClasses.CellInstance _ NEW [CoreClasses.CellInstanceRec _ [ actual: CoreOps.CreateWire[LIST [InternB, Out, Gnd, Vdd]], type: inverter ]]; cellType _ CoreClasses.CreateRecordCell[ public: CoreOps.CreateWire[LIST [In, Out, Gnd, Vdd]], internal: CoreOps.CreateWire[LIST [In, Out, Gnd, Vdd, InternA, InternB]], instances: LIST [first, second], name: "BrokeInverter2" ]; }; Test: PROC = { Check: Static.ConnectionCountProc = { TerminalIO.PutRope[CoreOps.GetFullWireName[wireRoot, wire]]; TerminalIO.PutRope[IF public THEN " of cell " ELSE " in cell "]; TerminalIO.PutRope[CoreOps.GetCellTypeName[cellType]]; TerminalIO.PutF[" has %g connections\n", [integer[count]]]; }; cellType: CoreCreate.CellType _ Create2Inverter[]; cutSet: CoreFlat.CutSet _ CoreFlat.CreateCutSet[cellTypes: LIST["Inverter"]]; TerminalIO.PutRope["\n"]; Static.CountLeafConnections[cellType, Static.CheckCount, cutSet]; TerminalIO.PutRope["\n"]; Static.CountLeafConnections[cellType, Static.CheckCount]; TerminalIO.PutRope["\n"]; cellType _ CreateBrokeInverter2[]; Static.CountDirectConnections[cellType, Static.CheckCount]; TerminalIO.PutRope["\n"]; Static.CountDirectConnections[cellType, Static.CheckCount, cutSet]; }; END. TestStatic.mesa Copyright Σ 1986, 1987 by Xerox Corporation. All rights reserved. Barth, April 16, 1987 9:05:59 pm PDT Bertrand Serlet April 5, 1987 7:04:27 pm PDT Static.CountLeafConnections[cellType, Check, cutSet]; Static.CountLeafConnections[cellType, Check]; Κz˜codešœ™KšœB™BKšœ$™$K™,—K™šΟk œ@˜IK˜—šΟn œœ˜Kšœ?˜FKšœ˜J˜—šžœœœ$˜CJšžœ3˜5Jšžœ4˜7Jšžœ4˜7Jšžœ4˜7šœ#œ!˜GJšœœ˜1Jšœ&˜&Jšœ˜—šœ#œ!˜GJšœœ˜6Jšœ&˜&Jšœ˜—šœ(˜(Jšœœ˜6Jšœœ˜8Jšœ œ˜!J˜J˜—J˜J˜—šžœœœ$˜DJšžœ3˜5Jšžœ4˜7Jšžœ4˜7Jšžœ4˜7Jšžœ7˜=Jšž œ(œ"˜YJšœ1˜1šœ"œ!˜FJšœœ˜9Jšœ˜Jšœ˜—šœ#œ!˜GJšœœ˜:Jšœ˜Jšœ˜—šœ(˜(Jšœœ˜6Jšœœ,˜MJšœ œ˜ J˜J˜—J˜J™—šžœœœ$˜IJšžœ3˜5Jšžœ4˜7Jšžœ4˜7Jšžœ4˜7Jšžœ8˜?JšžœN˜UJšœ1˜1šœ"œ!˜FJšœœ˜:Jšœ˜Jšœ˜—šœ#œ!˜GJšœœ˜;Jšœ˜Jšœ˜—šœ(˜(Jšœœ˜6Jšœœ)˜JJšœ œ˜ J˜J˜—J˜J™—šžœœ˜K˜šžœ ˜%Kšœ<˜