📄 oadeftest.cpp
字号:
DefTest53::preTest(){ DefTest::preTest(); if (copyRefFiles) { oaString refFile = getName() + ".def.gz"; oaString tmp; getRelPath(refFile, tmp); if (!tmp.isEmpty() && tmp != refFile) { copyFile(tmp, refFile); } }}// *****************************************************************************// DefTest53::testClass()//// This is tester for the DEF import-export test case.// *****************************************************************************oaBooleanDefTest53::testClass(){ return testLefIn(getName() + ".lef") && testDefIn(getName() + ".def.gz") && testDefOut(getName() + ".def.out") && testReread(getName() + ".def.out");}// *****************************************************************************// DefTest53::testDefOut()//// This function exports DEF from the test library.// *****************************************************************************oaBooleanDefTest53::testDefOut(const oaString &fileName){ DefOutOptions options; options.setFileName(fileName); options.setLibName(libName); options.setCellName("cell"); options.setViewName("layout"); options.setVersion(LefDefVersion("5.3")); defOut.run(&options); return result;}// *****************************************************************************// DefTest54::testDefOut()//// This function exports DEF from the test library.// *****************************************************************************oaBooleanDefTest54::testDefOut(const oaString &fileName){ DefOutOptions options; options.setFileName(fileName); options.setLibName(libName); options.setCellName("cell"); options.setViewName("layout"); options.setVersion(cLefDefVersion54); defOut.run(&options); return result;}// *****************************************************************************// DefTest55::testDefOut()//// This function exports DEF from the test library.// *****************************************************************************oaBooleanDefTest55::testDefOut(const oaString &fileName){ DefOutOptions options; options.setFileName(fileName); options.setLibName(libName); options.setCellName("cell"); options.setViewName("layout"); options.setVersion(cLefDefVersion55); // Create an oaRect to test rect output (cannot be created by def input) oaDesign *design = oaDesign::open(options.getLibName(), options.getCellName(), options.getViewName(), 'a'); oaBlock *blk = design->getTopBlock(); oaNet *net = oaNet::find(blk, oaName(oaLefNS(), "VDD")); oaRect *rect; rect = oaRect::create(design->getTopBlock(), 0, oavPurposeNumberDrawing, oaBox(0, 0, 100, 500)); rect->addToNet(net); rect = oaRect::create(design->getTopBlock(), 0, oavPurposeNumberDrawing, oaBox(0, 0, 500, 100)); rect->addToNet(net); // Create illegal nets oaString newl("A"); newl += '\n'; newl += "B"; oaStringProp::create(net, newl, "aString"); oaStringProp::create(net, "AB1", newl); oaStringProp::create(net, "#AB", "aString"); oaStringProp::create(net, "A#B", "aString"); oaStringProp::create(net, "AB2", "A#B"); oaStringProp::create(net, "AB3", "10 10 10"); oaStringProp::create(net, "AB4", "a[1::9]"); // Create non rectangular blockages oaPointArray points(8); points[0].x() = 0; points[0].y() = 0; points[1].x() = 0; points[1].y() = 200; points[2].x() = 200; points[2].y() = 200; points[3].x() = 200; points[3].y() = 300; points[4].x() = 300; points[4].y() = 300; points[5].x() = 300; points[5].y() = 100; points[6].x() = 100; points[6].y() = 100; points[7].x() = 100; points[7].y() = 0; points.setNumElements(8); oaAreaBlockage::create(blk, points); design->save(); design->close(); defOut.run(&options); return result;}// *****************************************************************************// DefTest56::testDefOut()//// This function exports DEF from the test library.// *****************************************************************************oaBooleanDefTest56::testDefOut(const oaString &fileName){ DefOutOptions options; options.setFileName(fileName); options.setLibName(libName); options.setCellName("cell"); options.setViewName("layout"); options.setVersion(cLefDefVersion56); // Create an oaPath to test path output (cannot be created by def input) oaDesign *design = oaDesign::open(options.getLibName(), options.getCellName(), options.getViewName(), 'a'); oaBlock *blk = design->getTopBlock(); oaNet *net = oaNet::find(blk, oaName(oaLefNS(), "VDD")); oaPointArray points(3); points.append(oaPoint(0, 0)); points.append(oaPoint(100, 0)); points.append(oaPoint(100, 100)); oaPath *path; path = oaPath::create(design->getTopBlock(), 0, oavPurposeNumberDrawing, 50, points); path->addToNet(net); path = oaPath::create(design->getTopBlock(), 0, oavPurposeNumberDrawing, 50, points, oacExtendPathStyle); path->addToNet(net); path = oaPath::create(design->getTopBlock(), 0, oavPurposeNumberDrawing, 50, points, oacVariablePathStyle, 10, 40); path->addToNet(net); // Test invalid property names and values oaStringProp::create(net, "A\nB", "aString"); oaStringProp::create(net, "AB", "A\nB"); oaStringProp::create(design, "A\nB", "aString"); oaStringProp::create(design, "AB", "A\nB"); // Create non rectangular blockages points.setSize(8); points[0].x() = 0; points[0].y() = 0; points[1].x() = 0; points[1].y() = 200; points[2].x() = 200; points[2].y() = 200; points[3].x() = 200; points[3].y() = 300; points[4].x() = 300; points[4].y() = 300; points[5].x() = 300; points[5].y() = 100; points[6].x() = 100; points[6].y() = 100; points[7].x() = 100; points[7].y() = 0; points.setNumElements(8); oaAreaBlockage::create(blk, points); design->save(); design->close(); defOut.run(&options); return result;}// *****************************************************************************// DefTestError::testDefIn()//// This function imports a DEF file to create design data for this test.// *****************************************************************************oaBooleanDefTestError::testDefIn(const oaString &fileName){ DefInOptions options; options.addFileName(fileName); try { defIn.run(&options); } catch (oaException &err) { verify(err.getMsgId() == cLibNotSpecified); } DefInOptions options2; options2.addFileName(fileName); options2.setLibName(libName); options2.setCellName("cell"); options2.addMasterLibName("undef"); defIn.run(&options2); DefInOptions options3; options3.addFileName(fileName); options3.setLibName(libName); options3.setCellName("cell"); options3.addMasterViewName("undef"); options3.setOverwrite(true); defIn.run(&options3); DefInOptions options4; options4.addFileName(fileName); options4.setLibName(libName); options4.setCellName("cell"); options4.setOverwrite(true); defIn.run(&options4); return result;}// *****************************************************************************// DefTestError::testDefOut()//// This function exports DEF from the test library.// *****************************************************************************oaBooleanDefTestError::testDefOut(const oaString &fileName){ DefOutOptions options; FILE *file = fopen(fileName, "w"); try { defOut.run(file, &options); } catch (oaException &err) { verify(err.getMsgId() == cLibNotSpecified); } options.setLibName(libName); try { defOut.run(file, &options); } catch (oaException &err) { verify(err.getMsgId() == cCellNotSpecified); } options.setCellName("cell"); try { defOut.run(file, &options); } catch (oaException &err) { verify(err.getMsgId() == cViewNotSpecified); } options.setViewName("layout"); defOut.run(file, &options); fclose(file); return result;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -