From 69329772733b63363fe3d6868d88bcb42202f15d Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 9 Mar 2019 19:40:38 +0100 Subject: [PATCH] A few bug fixes and test updates - edge pairs are normalized before turning them into polygons. This makes flat and deep implementation more consistent. - deep region and flat regions were not cooperating in geo checks - unnamed layers are not registered in make_layer - this does not make sense and will just hold a fake ref - tests now use GDS to represent texts after transformation (with orientation, OASIS can't do this) - texts are more consistently handled in the tests - test debug output is not written in the same format than golden data unless special normalization is requested. - a non-orientable polygon was converted to orientable in a text because this can be represented in GDS consistently - DRC testsuite uses "polygons" instead of "input" to achieve identical behavior for deep and flat mode with respect to texts - dbRegionTests are updated because texts are not allowed for non-original layers too --- src/db/db/dbAsIfFlatEdgePairs.cc | 2 +- src/db/db/dbDeepRegion.cc | 2 +- src/db/db/dbDeepShapeStore.cc | 2 +- src/db/db/dbFlatEdgePairs.cc | 2 +- src/db/db/dbLayoutToNetlist.cc | 8 +++-- src/db/db/dbLayoutToNetlist.h | 36 +++++++++++++------- src/db/db/dbTestSupport.cc | 6 +++- src/db/unit_tests/dbLayoutToNetlistTests.cc | 6 +++- src/drc/unit_tests/drcBasicTests.cc | 2 +- src/drc/unit_tests/drcSimpleTests.cc | 16 ++++----- testdata/drc/drcBasicTests_au.gds | Bin 0 -> 2138 bytes testdata/drc/drcBasicTests_au.oas | Bin 669 -> 0 bytes testdata/drc/drcSimpleTests_1.drc | 2 +- testdata/drc/drcSimpleTests_au1.gds | Bin 0 -> 426 bytes testdata/drc/drcSimpleTests_au1.oas | Bin 431 -> 0 bytes testdata/drc/drcSimpleTests_au2.gds | Bin 0 -> 12460 bytes testdata/drc/drcSimpleTests_au2.oas | Bin 1869 -> 0 bytes testdata/drc/drcSimpleTests_au3.gds | Bin 0 -> 316 bytes testdata/drc/drcSimpleTests_au3.oas | Bin 437 -> 0 bytes testdata/drc/drcSimpleTests_au4.gds | Bin 0 -> 10580 bytes testdata/drc/drcSimpleTests_au4.oas | Bin 1458 -> 0 bytes testdata/drc/drcSimpleTests_au5.gds | Bin 0 -> 1708 bytes testdata/drc/drcSimpleTests_au5.oas | Bin 464 -> 0 bytes testdata/drc/drcSimpleTests_au6.gds | Bin 0 -> 1626 bytes testdata/drc/drcSimpleTests_au6.oas | Bin 514 -> 0 bytes testdata/drc/drcSimpleTests_au7.gds | Bin 0 -> 3290 bytes testdata/drc/drcSimpleTests_au7.oas | Bin 611 -> 0 bytes testdata/drc/drcSimpleTests_au8.gds | Bin 0 -> 2792 bytes testdata/drc/drcSimpleTests_au8.oas | Bin 656 -> 0 bytes testdata/drc/drcSuiteTests.drc | 12 +++---- testdata/ruby/dbRegionTest.rb | 16 +++------ 31 files changed, 64 insertions(+), 48 deletions(-) create mode 100644 testdata/drc/drcBasicTests_au.gds delete mode 100644 testdata/drc/drcBasicTests_au.oas create mode 100644 testdata/drc/drcSimpleTests_au1.gds delete mode 100644 testdata/drc/drcSimpleTests_au1.oas create mode 100644 testdata/drc/drcSimpleTests_au2.gds delete mode 100644 testdata/drc/drcSimpleTests_au2.oas create mode 100644 testdata/drc/drcSimpleTests_au3.gds delete mode 100644 testdata/drc/drcSimpleTests_au3.oas create mode 100644 testdata/drc/drcSimpleTests_au4.gds delete mode 100644 testdata/drc/drcSimpleTests_au4.oas create mode 100644 testdata/drc/drcSimpleTests_au5.gds delete mode 100644 testdata/drc/drcSimpleTests_au5.oas create mode 100644 testdata/drc/drcSimpleTests_au6.gds delete mode 100644 testdata/drc/drcSimpleTests_au6.oas create mode 100644 testdata/drc/drcSimpleTests_au7.gds delete mode 100644 testdata/drc/drcSimpleTests_au7.oas create mode 100644 testdata/drc/drcSimpleTests_au8.gds delete mode 100644 testdata/drc/drcSimpleTests_au8.oas diff --git a/src/db/db/dbAsIfFlatEdgePairs.cc b/src/db/db/dbAsIfFlatEdgePairs.cc index 7803bbb23..0876cdc0d 100644 --- a/src/db/db/dbAsIfFlatEdgePairs.cc +++ b/src/db/db/dbAsIfFlatEdgePairs.cc @@ -292,7 +292,7 @@ AsIfFlatEdgePairs::insert_into_as_polygons (Layout *layout, db::cell_index_type db::Shapes &shapes = layout->cell (into_cell).shapes (into_layer); for (EdgePairsIterator e (begin ()); ! e.at_end (); ++e) { - shapes.insert (e->to_simple_polygon (enl)); + shapes.insert (e->normalized ().to_simple_polygon (enl)); } } diff --git a/src/db/db/dbDeepRegion.cc b/src/db/db/dbDeepRegion.cc index 5fa74efe3..0ee8b7195 100644 --- a/src/db/db/dbDeepRegion.cc +++ b/src/db/db/dbDeepRegion.cc @@ -247,7 +247,7 @@ DeepRegion::has_valid_polygons () const bool DeepRegion::has_valid_merged_polygons () const { - return merged_semantics (); + return false; } const db::RecursiveShapeIterator * diff --git a/src/db/db/dbDeepShapeStore.cc b/src/db/db/dbDeepShapeStore.cc index 6ee3172bf..b2788f090 100644 --- a/src/db/db/dbDeepShapeStore.cc +++ b/src/db/db/dbDeepShapeStore.cc @@ -873,7 +873,7 @@ DeepShapeStore::insert_as_polygons (const DeepLayer &deep_layer, db::Layout *int if (s->is_edge_pair ()) { - out.insert (s->edge_pair ().to_simple_polygon (enl)); + out.insert (s->edge_pair ().normalized ().to_simple_polygon (enl)); } else if (s->is_path () || s->is_polygon () || s->is_box ()) { diff --git a/src/db/db/dbFlatEdgePairs.cc b/src/db/db/dbFlatEdgePairs.cc index e4a8d50f8..87d8eb689 100644 --- a/src/db/db/dbFlatEdgePairs.cc +++ b/src/db/db/dbFlatEdgePairs.cc @@ -185,7 +185,7 @@ FlatEdgePairs::insert_into_as_polygons (Layout *layout, db::cell_index_type into { db::Shapes &out = layout->cell (into_cell).shapes (into_layer); for (EdgePairsIterator p (begin ()); ! p.at_end (); ++p) { - out.insert (p->to_simple_polygon (enl)); + out.insert (p->normalized ().to_simple_polygon (enl)); } } diff --git a/src/db/db/dbLayoutToNetlist.cc b/src/db/db/dbLayoutToNetlist.cc index 9028e5abe..97cce0100 100644 --- a/src/db/db/dbLayoutToNetlist.cc +++ b/src/db/db/dbLayoutToNetlist.cc @@ -129,7 +129,9 @@ db::Region *LayoutToNetlist::make_layer (const std::string &n) si.shape_flags (db::ShapeIterator::Nothing); std::auto_ptr region (new db::Region (si, dss ())); - register_layer (*region, n); + if (! n.empty ()) { + register_layer (*region, n); + } return region.release (); } @@ -140,7 +142,9 @@ db::Region *LayoutToNetlist::make_layer (unsigned int layer_index, const std::st si.shape_flags (db::ShapeIterator::All); std::auto_ptr region (new db::Region (si, dss ())); - register_layer (*region, n); + if (! n.empty ()) { + register_layer (*region, n); + } return region.release (); } diff --git a/src/db/db/dbLayoutToNetlist.h b/src/db/db/dbLayoutToNetlist.h index 95649d014..9bca6b617 100644 --- a/src/db/db/dbLayoutToNetlist.h +++ b/src/db/db/dbLayoutToNetlist.h @@ -305,6 +305,30 @@ public: */ void set_netlist_extracted (); + /** + * @brief Gets the internal DeepShapeStore object + * + * This method is intended for special cases, i.e. for the master + * LayoutToNetlist object in the DRC environment. The DSS provided + * for DRC needs to be initialized properly for text representation. + */ + db::DeepShapeStore &dss () + { + tl_assert (mp_dss.get () != 0); + return *mp_dss; + } + + /** + * @brief Gets the internal DeepShapeStore object (const version) + * + * See the non-const version for details. + */ + const db::DeepShapeStore &dss () const + { + tl_assert (mp_dss.get () != 0); + return *mp_dss; + } + /** * @brief Gets the internal layout */ @@ -526,18 +550,6 @@ private: bool m_is_flat; db::DeepLayer m_dummy_layer; - db::DeepShapeStore &dss () - { - tl_assert (mp_dss.get () != 0); - return *mp_dss; - } - - const db::DeepShapeStore &dss () const - { - tl_assert (mp_dss.get () != 0); - return *mp_dss; - } - void init (); size_t search_net (const db::ICplxTrans &trans, const db::Cell *cell, const db::local_cluster &test_cluster, std::vector &rev_inst_path); void build_net_rec (const db::Net &net, db::Layout &target, db::Cell &target_cell, const std::map &lmap, const char *net_cell_name_prefix, const char *cell_name_prefix, const char *device_cell_name_prefix, std::map, db::cell_index_type> &cmap, const ICplxTrans &tr) const; diff --git a/src/db/db/dbTestSupport.cc b/src/db/db/dbTestSupport.cc index 3f7798bef..b8b1af7d5 100644 --- a/src/db/db/dbTestSupport.cc +++ b/src/db/db/dbTestSupport.cc @@ -59,9 +59,13 @@ void compare_layouts (tl::TestBase *_this, const db::Layout &layout, const std:: if (norm == WriteGDS2) { tmp_file = _this->tmp_file (tl::sprintf ("tmp_%x.gds", hash)); options.set_format ("GDS2"); - } else { + } else if (norm == WriteOAS) { tmp_file = _this->tmp_file (tl::sprintf ("tmp_%x.oas", hash)); options.set_format ("OASIS"); + } else { + // write the temp file in the same format than the au file + tmp_file = _this->tmp_file (tl::sprintf ("tmp_%x." + tl::extension (au_file), hash)); + options.set_format_from_filename (tmp_file); } { diff --git a/src/db/unit_tests/dbLayoutToNetlistTests.cc b/src/db/unit_tests/dbLayoutToNetlistTests.cc index 681dff981..730d31ae0 100644 --- a/src/db/unit_tests/dbLayoutToNetlistTests.cc +++ b/src/db/unit_tests/dbLayoutToNetlistTests.cc @@ -2111,7 +2111,11 @@ TEST(9_FlatExtractionWithExternalDSS) db::Cell &tc = ly.cell (*ly.begin_top_down ()); - db::DeepShapeStore dss; + // NOTE: we use a DSS from a LayoutToNetlist object - this one is initialized properly + // with the text representation settings. + db::LayoutToNetlist l2n_master; + db::DeepShapeStore &dss = l2n_master.dss (); + db::LayoutToNetlist l2n (&dss); std::auto_ptr rbulk (new db::Region ()); diff --git a/src/drc/unit_tests/drcBasicTests.cc b/src/drc/unit_tests/drcBasicTests.cc index a5978b6d6..98401cb0c 100644 --- a/src/drc/unit_tests/drcBasicTests.cc +++ b/src/drc/unit_tests/drcBasicTests.cc @@ -30,7 +30,7 @@ TEST(1) std::string input = tl::testsrc (); input += "/testdata/drc/drctest.gds"; std::string au = tl::testsrc (); - au += "/testdata/drc/drcBasicTests_au.oas"; + au += "/testdata/drc/drcBasicTests_au.gds"; std::string output = this->tmp_file ("tmp.gds"); diff --git a/src/drc/unit_tests/drcSimpleTests.cc b/src/drc/unit_tests/drcSimpleTests.cc index 4d8c6b11d..a8f69fb4f 100644 --- a/src/drc/unit_tests/drcSimpleTests.cc +++ b/src/drc/unit_tests/drcSimpleTests.cc @@ -31,7 +31,7 @@ TEST(1) rs += "/testdata/drc/drcSimpleTests_1.drc"; std::string au = tl::testsrc (); - au += "/testdata/drc/drcSimpleTests_au1.oas"; + au += "/testdata/drc/drcSimpleTests_au1.gds"; std::string output = this->tmp_file ("tmp.gds"); @@ -71,7 +71,7 @@ TEST(2) input += "/testdata/drc/drctest.gds"; std::string au = tl::testsrc (); - au += "/testdata/drc/drcSimpleTests_au2.oas"; + au += "/testdata/drc/drcSimpleTests_au2.gds"; std::string output = this->tmp_file ("tmp.gds"); @@ -111,7 +111,7 @@ TEST(3_Flat) input += "/testdata/drc/drctest.gds"; std::string au = tl::testsrc (); - au += "/testdata/drc/drcSimpleTests_au3.oas"; + au += "/testdata/drc/drcSimpleTests_au3.gds"; std::string output = this->tmp_file ("tmp.gds"); @@ -151,7 +151,7 @@ TEST(4_Hierarchical) input += "/testdata/drc/drctest.gds"; std::string au = tl::testsrc (); - au += "/testdata/drc/drcSimpleTests_au4.oas"; + au += "/testdata/drc/drcSimpleTests_au4.gds"; std::string output = this->tmp_file ("tmp.gds"); @@ -191,7 +191,7 @@ TEST(5_FlatAntenna) input += "/testdata/drc/antenna_l1.gds"; std::string au = tl::testsrc (); - au += "/testdata/drc/drcSimpleTests_au5.oas"; + au += "/testdata/drc/drcSimpleTests_au5.gds"; std::string output = this->tmp_file ("tmp.gds"); @@ -231,7 +231,7 @@ TEST(6_HierarchicalAntenna) input += "/testdata/drc/antenna_l1.gds"; std::string au = tl::testsrc (); - au += "/testdata/drc/drcSimpleTests_au6.oas"; + au += "/testdata/drc/drcSimpleTests_au6.gds"; std::string output = this->tmp_file ("tmp.gds"); @@ -271,7 +271,7 @@ TEST(7_AntennaWithDiodes) input += "/testdata/drc/antenna_l1.gds"; std::string au = tl::testsrc (); - au += "/testdata/drc/drcSimpleTests_au7.oas"; + au += "/testdata/drc/drcSimpleTests_au7.gds"; std::string output = this->tmp_file ("tmp.gds"); @@ -311,7 +311,7 @@ TEST(8_TextsAndPolygons) input += "/testdata/drc/texts.gds"; std::string au = tl::testsrc (); - au += "/testdata/drc/drcSimpleTests_au8.oas"; + au += "/testdata/drc/drcSimpleTests_au8.gds"; std::string output = this->tmp_file ("tmp.gds"); diff --git a/testdata/drc/drcBasicTests_au.gds b/testdata/drc/drcBasicTests_au.gds new file mode 100644 index 0000000000000000000000000000000000000000..594ba23d0655028da94e71289f1c31982e1983c8 GIT binary patch literal 2138 zcmcJQv2GJV5QfKR`*MImL0CW}KLA2Vq=*EOA`~NvAS{t0MT96)P*CsyDJfEbL_tqO zfs{M~1qDTvIt2vy?9TqPGrO}CQV=Xttq@E! zsYqw&5>3&y(fBC24OUoV_jI2G3GC(S*$I-Gm`G;;^jBO0!zrCL7gV0BfjnLQee0_{V2ZS#CjbzUrp&3{rz_NLyhgjT^Rk${@3|S`MWbFI-s00 z`6WbLI-b%$JF0)UE;(+ACdZ? zhoep);#2?p_5VZvu=rj6U4M``tbZVX=pP{B)A7vsj@8fZtud#5DgA%wKPi7`pvGWU l|Iu-c-@kEH3QzsUWz0pz+;R4CduxWH!_@V0gjKfDB|rrGn#q9V6m{J>C6WUE)3cLR{TlgW|(I zT|zuKSY&u*Akv|J*c8Z!as|hS_y@#0yZZR>Fauf4AcB?2(GiHXSQ(vo8APoa8CX~j z6?7OicpqED*eJQvK&0XZ%M#v+%m?j6EtwcuW(aQJe969n^918dOHm6(jsw(Zgo&{_hl@8j86rADM!`kT}QZa=qrQ%)rSY%pk|0hs^+>@@d2w)}&o%MSeo zv!g;7WLWX&V`B^P4`5(m;b353<7HytVqoKAVqjoU5nu+AP{90xfdPcsFTg~=G>ae( zeatWZ|9>$7q~`zsHx(d#5E?3uO`i_PKK=z@bHOyz9tH-X7zPFy4U&P%+;R4CduxWH!_@V0gjKfDB|rrGn#q9V6m{J>C6WUE)3cLR{TlgW|(I zT|zuKSY&u*Akv|J*c8Z!as|hS_y@#0yZZR>Fauf4AcB`c)S8Qdg{iBy;TPit{)e%m y7A#C1wSBb=3?dm9_)jptR1mqbhxLFRgQy`l1Iq>e1@ag8FY+@mHH>7yzyJV#FRG^i diff --git a/testdata/drc/drcSimpleTests_au2.gds b/testdata/drc/drcSimpleTests_au2.gds new file mode 100644 index 0000000000000000000000000000000000000000..44b1433abf5ad1c9da5b54d3cc47d26a6acf10ae GIT binary patch literal 12460 zcmb_iU94PX6+L%m?({aPTCkQ@%R>{z1Zax}D1^pP;{$577eOdcpehgbC-|h{fuvPQ zltc+iqlr9NjER`|0-9iq38Zs&G>+I#QkUT1%6&bQB;b7tln zn@ra2K4+b^*WUYl=VvBqCbin3WXDWx!Y)r09b|%}xzmvII^S~!Ro+Ml9vme|4 zNs`>Sx$a#573bP# z6}v~ByFBk)ujky_^BHn``)tyfMmYUQ&lNm!e}``rhDJ`%T6*@B9E1;TD+z+sEyvvrpXL;2g2N z!&k~9d359}%i|x$@h>enckT(rg)Qokc>Z>c6Bp<7_yc@HJFw`H$2s>zp`U%5>r%%@ zoLm0B;>EuuN$n5L5v6mZ|Fo28DH2^&PV-FXCUgoz9~b-OX{EIk6c&o(45m=pYlByWPIh0a{Z-M)dxZ! z93u2}dpRF<0u7`4bt>@$3HlPV1NUSmqQceU^V2 zVy<<&$=~qNV}7s}gdfK3{M9e0{>&zv{}=x*^%k9rI|WaP-U;z@r|K?l^!U2?lKEQt zuHe^2Px^G>CDmPC_IRt{ul2Kxza=kj>-Feg4C>wbrv`)_+)^L*TeqS4S)42<)APU}X2IWQ$av?i zu>O{R`QOS1g1`Ey48hm!hR-`E)t`9&8ipU?znS@$^F(H@eaz$Af4 zqd&R-fG>KJ``NCO?{4uA{E_(oQ-F-`HvB8|_3yo^_3vM&^(Qjkd$pVo|D89r{@uM= zef@OXz>?8+!f$p^Nj62z}jd`WNt}-w(>X?NVgj ziHsNO`~0KzQ+|~G`$GR=|60#z{{~pRei(j!{lNTS{Q{QsPx%G?8|X5RDt*t7(BGQ* z*Xs}ZgzFI2PuzbDka0Ud0bkdD_{4P>zH$FSWIQ*&%J=QI-+cuxPS z(0@3;!`F|&djshW-1=$w zm_M%5T(^jf=hkoK`~2*r|`ko)5zdiG>b1(kV`Nz72`6n`-^B?ea?%@-22;Z20 zBI7y#%J==p{8NXzM8*sCy?^LZhq^?@bNcTO{bT;11B5Q_pNNd-^aH-mJ#;XK&<(F2 zj2G&A|Izy1KXj=xrv3*q|2qHeV;Gs2xBdgZ_8tDw2lz(+2gtbful%6@QTjpuC)B?> z^RMq4I*T)ZG6VzWa;ROYYx+7ax%IGpDd#QOE2Dd#8P59UMf9r+5L-#r#TzXyED{~_6bx5uI9|H1a~{15oj zzo&Hl;`@jG1z88=Jp{1i{e$7JeN*=X7QMgF?PmTBAMY*jo)(DrxA0G7Joo-L;Hy8` zp4Opzv!J~HATnOgm;OoKz0->QYX#-~3z6~OX_Nl})4yA!{_zdPhd=zo4n{ykIj?~UdAsXOHP1?PpG z9&=udV6g|BwNY9_6C0ivrCQ3Omh?Mh-52GnlvSBwDND~lW|*r+DJ#yGuxIe02BUmMsFJ)DBc?64ExjB5G+?V~GnW^CjR{k36Ygoz} zx>AQ-9>JoPT;D_1;V54tSk&UZgZEX+s`NF2MXj8#2cvwAU{NdQtCUsgYXpm0IbRP& z`5M8ZR?b%`tJ2p97PaWhU;mGIU+M1}`Y+3U`5AeiaZv7W`*L6Vs|*p>?K;O*eC#*) zMX5i|IDF`FzdWD$w9kyG|K;lZ{kcK^L)UL{i@U(1QjK}3LeHGNr7XD{emc9i&-JyG zRoT}HmS!eCpU*NZ>WkYeIXx^Yg56ok@rM~Q-g?;7^$SzZMInEJxiI{QxiEarb*ew! zT#!H6T$HjZ=c1HVITsbIin$;wJ>Mhd;)`Z34$B-hA8*p0QUCw| literal 0 HcmV?d00001 diff --git a/testdata/drc/drcSimpleTests_au2.oas b/testdata/drc/drcSimpleTests_au2.oas deleted file mode 100644 index 787eddb7abd4fcfd974d3c28eb8de982f48b8902..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1869 zcmd^ScqhMC|Rz=M;?o~go;d9 zV$yD~7Ioon8B^knG<$IynpLBLq;q9++TzN9xs4^7h-k3*_ncc0#6KbN(VLu;b3Whi z@6SCww-5Vj_SZhvSnaFzS&YD!m$}fqjMhKJN|DdMzq-ZmtKHjBv&UcC&{VUx<{AI9 zwR@WOVWHSkoRgay{?1UW7=8Yx#;5&H)zsIUdAj1+By!c&bUZ4;lNO{@0uqD|+k4$z zb)TGupyPsz1X98oOPG&)^E(01q%B*L|2%ifnIAw4O14BP=Rmq_p0xdFoXLxuH7T}T zsQ|1=DIq1Kg%Hn1(l$b}&6EpK`>5f*JZcz+`yLYLH>#5d!VM%5;rK^=urIA~=v zNsWnVA>Bw?G--syy(BO%YtlshLKz7p@R-`-UCV7LK)4FO4{PyxL5IfCkxKo zViczA=ecjWxk5Hi*%|q&a2+3j7!^|XSt`s7z^ph3)Aks*z}+om^E4F(HwXi8o+>wK zu0goEBix{rFUkVneK=`*X&HitCvAviewMjK<);!8s8w##^NVakA$|)9|0-X%k%8aj zMTL60uzI5)Q%YAsth?#z2yQ#n?KUBGmz88*!KxZ`Q`)OjM0!FPkt09{hseP&MxWw) zj-hhW@`1R-zqy+nfDPaUE`ilMj+4|fCjP(=?{jVY*gDX89HX{n zqn^9ss8!GXIBWow{TMA9BSu=EdM=8zKJ)wuLP$i~DK6nSGcsa3aho}`V! z$K0#R@FOH}0!H}f=z(O;;5PPRCRuIu(wUVA;Y!d%KJB=iB7OU*&5a~$Z z)lYzQT%lL{YinBQt0MH&3$j-+5&_a%=jGV;f*lCr=Dw4NaAs+ z-xd^OG;R`;z{_&d_P+QHRj#eeetpf=@!1-O8<@c7bbNseJShw?vMq%B^m<`SOs^NR z1Vu&w-r7cqC%xu!Az&)&Dr^a1s=Anq5dh7}x?r96TCY6BlvB~63@*|xiXt_O>fFIg9Yey2Oad6p#8)Qnne3} zVzo09V)sd@5cs(H9MS6To`!D6C71G`z+Y>Ry6@z@Lll?5zwJC~jk-g1?;6-{u6@L* zNxGE;ri8PWA`7%N*nAO-;?>Sd(pa1{> diff --git a/testdata/drc/drcSimpleTests_au3.gds b/testdata/drc/drcSimpleTests_au3.gds new file mode 100644 index 0000000000000000000000000000000000000000..5f919587f5900e8c583bb68aa4779e13c5bdaf55 GIT binary patch literal 316 zcmZQzV_;&6V31*CVt>rQ%)rSY#GuF^iOgo;U}E#}bYfr-VP>^+>@@d2w)~By%MSeo zv!enSWLRhA@ecqZ1{Mwm1~y(M=9dg?d`t`s3_1eLKr-e3|BpQo`s)n_2F3~h p|HEjQIFM!$WME)nXTWO{2OFE8YdBCH)Sef#vj^lIuzOfo7yz_yLhAqk literal 0 HcmV?d00001 diff --git a/testdata/drc/drcSimpleTests_au3.oas b/testdata/drc/drcSimpleTests_au3.oas deleted file mode 100644 index 7f496f52f3da5fd028c71bb6cb4ee75ddd3ce88b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 437 zcmY!lcJ=kt^>+;R4CduxWH!_@V0gjKfDB|rrGn#q9V6m{J>C6WUE)3cLR{TlgW|(I zT|zuKSY&u*Akv|J*c8Z!as|hS_y@#0yZZR>FaudKf;`NAuHit64afr`W*7|;W(FzY iW#VNNsRp`Z4bvHp6O1n{c^O2iUn00n4I>#aFaQ8BM5);T diff --git a/testdata/drc/drcSimpleTests_au4.gds b/testdata/drc/drcSimpleTests_au4.gds new file mode 100644 index 0000000000000000000000000000000000000000..1f3124594f337cea35454c64a5235480b0df1445 GIT binary patch literal 10580 zcmbuFUuay%6~>Qtuhwg8Wvyhb{#hx3rcjC?3N=KgZn0w*9IDhQ6{$&G;?xRFA<&fe zArF0U!B7YC;L<`1X~Bg+QfR@@l=vZ~E`*YYJ_MSF1OjPD03ON{rmZ)y@$@K-Xw29C=VAX^J!kYtko;oi!2J)2^rK%7rvteouMh z@ihJH!8Gl5)AaKfa$5WHdy))qe$EV^lg_2-(sAXDM5OObni|c%bX@hV^*F{DM~nKK zr(OTXWaGerc(2uo^PMmmHts? zMrr-PUe7z`MsPVzFP*|jz{}7wR^yfZYByeOYR1?3nr8fJMtjbsQ$797(;sJxnI)G` zhJT;#!|ctbsd0Hao9T?Evl+=&hULf2=-TTVKY8^volzslrR_cAb9&~1en|RXYvnY1 zk^jqYrRnv|h{$f4n zk$UEfdZXDR^Xu~W@sj!{>7R3Kqi6cASeB6d)z4&6W>WyZzg|g>znLd&&mAO^!3$Tk9Gec za=sfJ0N+P_|5>>5PzWWzODUM{;9f~e^RdeOYPbo=&$+y)4geW?Irkq9{t}{ zcJILs4f~CL<+YbozfB5HkhVKPaELte-3JcL&r7mHq&cFeN{hK3dqJf03w_qcwuw2B zyUuTFYfSZV@1O3!?_rQ1Jc%n#WcSfvR9;p@Mh=SX{F%tEFNzF(9bWHIj($h&S-ZbW z4`f-vc_-3-Tx9!kWedCea2L9t<50x`X|#4Q@*G`BoeAzL9KCW9p|9=UruWWd&T2cJNx&)rMlKh5oX0^h?D%rdf%CAVl8w#Zt3RXZ zHdL662l?UMg*i}u0p}ri3gewP+dg|y#AyAHvtIGK`{vq{tT^1Oz)6gcxiF3$Lat`8 zGi79T@?#u3g#CYx?Mi#jhMmgdM}81@!W<}foyNI#7k4Wq_1rOxBNuqzR$zpnm_riRZEb%=gyhM&?TMUb2c!NQZs{&y_pr2nivs^?g_#!3EB zV>CNhs26;wVZNw0nw`zwH(Xo)Zv2dyen>up`-9Q!MgFPdhooQXjb;a<{@I6q_^~k< z&0geRmHJ=$_5ZxKLjQf&wI|+G;QKM+$!K;kqSt+DYDS6E#O+T;vro;$_1tf`Uy+lG zy5AVh9@!5te|i&Z;yV~`WG#Fj>~?dSy}75@|GUbf^qMc8OWfC~YqTTtYj{c2ikL%TMa!%RU z@7#;g?8&*}@uS`Or;h%OW-rpqBI*WulKYjsn$zq>dfsbzevmvDc*8ZC9gNN&&l~RZ zB=>!uVMenT?fW(TAGv9_Iml73q!bJBm-9@TTd_W_veR(L;mcasIZNA$jrhx(28Gp>K$)5zZU zF<&3vfBDUl_g!P}`)=~U*5VKK<>UADRpPH-+FJafzI^-Y5z?w#%pA87Yb((IkZn19uc&SlT(X5X7L zntgOGrq{gj+-Cm#xwLx(?P!mVe|SRAdy@K*H*)g1S-YpNf9}uU(65lc-y#1$Lf#%l z|NE8gAFDlUkLrhilj;AaI=->xb4LHJ_N+asA32EiQ|isHA3yT_CHT4*`TsuVYdqtM z+B=ih?&mMmJKYJ@P4;R3$;Xsq2eap$i0P59apeEM;0@&ckI4U<%HfsFuI61r;`76Kv1AT@13-lH0-_s+%$1s28>SvSQ>XhFbZ=-%a{d#@4 zI=Q|23G<)TXNmf)ule&=p?(5=h58Nj73$B^TYY79a(nd`=quEpr^j8rbp33|f9d*7 ze(29%h58Bf70$0fU!ndyeWm)_q%T>2o?g$rlILHbuWMzh&s6S6%sr~|e`SUY5;m==%`U~_G>Mzh&s6S6%ss1+UOV*#KuT+15zI^>95Bc-Q zUo82Kio|cZ?)Mp^*+KvQ!aPNIYIrvw-$F+W`M0-S!xQB4x!_Re}ehqQ|8u34^T={|8wLPXs wyg$X?PvGZm^nX@4eNpYZ|FPcg`A@#*$6q1;p1xB4Jw4(rk$?REEJ-5&2M_dtS^xk5 literal 0 HcmV?d00001 diff --git a/testdata/drc/drcSimpleTests_au4.oas b/testdata/drc/drcSimpleTests_au4.oas deleted file mode 100644 index 3a6f5f206a560e7042bc91cf01caaa88e640e779..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1458 zcmd^8(Q6Y)9G=Ncb~l^El4h1*2v{o8Vo_@44wv@Ir8f0K)3j$2T6>ke5>z@Q~B>Q`YE5X zK3+|^LB1K@H2>>db8*Fx1C;gK!-{x0=)t~JGe$|m3tb7UlKSFj=K)%fwm1Ga(tY(8s zSrwODMNe(7-YxZfF6rU`02KdE(%FeZhykCtp&g;snIY>*H;u$p0QS#If z-DOidbk|aA^)yjdoF!p7uy}wd8fWw6cDsdP8n+zCoggZ;i}fi{GS@^CTFvB10RaFZ zV2+SEO1KA*xp~SS0?1O4Co9fsO5@y+D*7IFk_nAl9JmvxD@;^oX>M1p4G@)OFoTpU zk+-O+bv7z9xBgXR>Y-2)8o6z=C32$W{1XokEcXo8^mEM0J z-QWzg5W3D4(cQqS5pwRCKx;s|kJYDzv%*@?Op$g2(ekQ+Ot?*L?4`5Lb?PsnDi+XY zM>a#$0;-DIw{{DVBwHpSfop=QE7Jj$h&4=-(}XOg(P&-jV%34*)&@ D+5QXd diff --git a/testdata/drc/drcSimpleTests_au5.gds b/testdata/drc/drcSimpleTests_au5.gds new file mode 100644 index 0000000000000000000000000000000000000000..3578cc1c0ac95210d59cce0b0d7231e51abc3b8b GIT binary patch literal 1708 zcmbuQR+_jQk*+ z8Xp4EvBbdOQP1T4#cS{Ib^F=r$}DOUx+@IB`SIz|86chygv9|i5tal1T2rwo`WQ2d z8ENtXSlI(y-Flcoyj1hIQS{kpyy@3|6h-FP)vbRvYTjHlMKAr@2MTuSrEWc!FIgAQ z(v{!&(%ZRm|3KxXc$U64?MrXxs&9aJmcDtzm)_1*-!?0rrSH7*rMGj{_ne7m>HFip z^meZL!8h?N{pf-(y`8ImDkGkypF8)Zw{z7m9*bw`SKoc%oow{v|u;%{y;OS9Id*)^qvN1Mw_<#fvY!oh$bbRGa@C&tvK9yL{bxuKk+;R4CduxWH!_@V0gjKfDB|rrGn#q9V6m{J>C6WUE)3cLR{TlgW|(I zT|zuKSY&u*Akv|J*c8Z!as|hS_y@#0yZZR>um*Yhx%)FiC|(AU>QsgehZrX?f0SyF z6sdW_b%Ui*a;G>G#|04)nS(q(xWKH+OoW;WkeUb2n0|1HROVq5W@;G8fPn!3akILa diff --git a/testdata/drc/drcSimpleTests_au6.gds b/testdata/drc/drcSimpleTests_au6.gds new file mode 100644 index 0000000000000000000000000000000000000000..75a2525f92b9902d417442aeb59fab4ecc708d74 GIT binary patch literal 1626 zcmbu9ze@sP7{?#a^VJRu6$vVd1PP)b=?76zXc%dQib<3NwKTMZLqkJ@LrYsjTZ>z3 zV}pZ3G&l4I2sJjiCermh_ulL4k*^UQ9G{o>`+nZ%o_mi22AZ}H5trtD12+sn2%<33 zJqDk~b~5V#VYg>3dA+p#eE+eWdYrA^mGThrs6B(RVj-E`1<<|FccqW9Om=S$bOXQ$ z35$)oDggd~8^Cn~bm>97`>ipWJ=Wk3rukJ??9fSt>jPke8k_(d($JY9`?GGEtr%zf z(lkvR3yS$xjMx69S9~jlOm;KJJMo2h=T?{26Ur_fnUQxqzatA*)!BGcolPaw*}U_O zJL;`A)LuHS&I%QEcK9N*o+psTV@co%AicP@bRj9`S%RNHFTdRY&}w*UNKY8YDM>M} z)l@##!oD!KNWTA;`$RF{&kt7kIwJYQ?~>%(x%Gwre13p2?3vaP$&W5biur!^Cnva1 zB!Bu!l6*T?){mFDPb7cwRg!!=SNbb;?i0yR#3aeLbEUr#;69Q3t#e88?Of^Sj=4`H zzxX6czMU)mg9q*t$v?tdkbFDu_D>yukiUPwU4CbOtB$BEsHlJT&-z{d-|FKZP}kub DD=q1k literal 0 HcmV?d00001 diff --git a/testdata/drc/drcSimpleTests_au6.oas b/testdata/drc/drcSimpleTests_au6.oas deleted file mode 100644 index 3b7878d85eae121c459bade432c3f79559ba1fdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 514 zcmY!lcJ=kt^>+;R4CduxWH!_@V0gjKfDB|rrGn#q9V6m{J>C6WUE)3cLR{TlgW|(I zT|zuKSY&u*Akv|J*c8Z!as|hS_y@#0yZZR>um*Yhx%)G-h6FkK1v9gF`h^)WL&SI) zco_v>GAv-@X80f~B$%;~jX|V3mEj534VFg9o#MPqf+rZcIWC9@zyL^g!y(2A%pav1 pBt>dK3J>!9;9>%*5vj~X$W(x29z0|E!6j0ehfSENVI%_v1^`Gf#ZLeL diff --git a/testdata/drc/drcSimpleTests_au7.gds b/testdata/drc/drcSimpleTests_au7.gds new file mode 100644 index 0000000000000000000000000000000000000000..3fa5aff17b83cbcb37c740b82b4f877d121ae996 GIT binary patch literal 3290 zcmbuBu}fP~6vj_plAH8lMMDs5rBn!lRH$gBC{$vxXljWPrBo5>;?SiyI5>33;Ns@c z&Be{tu|tLoBD7E_;vXQiV+U77`aI{|cfIdmZmj189^d1B_xH{_x!(x^1)lc-`chu* zH>BYK6rdk^{zEVrIsp=v?CI@YI z=9Q{c-;Y4X2k;AqQjbz~fR3&-Kx!B0lj+8*-5&qE#U6Y@5d7P4JmJPQY#u;8^x!+F zP7j$OqA!|3a9PrN^(6=byf%BPG7)k5%F$KTP=T_Xl{4 zJ<~o?;`?7%HS6u_4?NX8De=#?tr8#k&ica}nkOZG?9?jpk?-UunwlpizFe|OeB?X% zH(i=1CI0QERpKMx$+;R4CduxWH!_@V0gjKfDB|rrGn#q9V6m{J>C6WUE)3cLR{TlgW|(I zT|zuKSY&u*Akv|J*c8Z!as|hS_y@#0yZZR>um*Yhx%)G-h6FkK1v9gF`h^)WL&SI) zco_v>GAv-@X80f~B$%;~jX|XPBqPHUt{W_kk~_tDnFLQTa&ue|5r6@(^oB!>6PQ0r zHAsrofK(pj`N72mR3uWFibaM&q%spBTmjPX;2F~oE|JPS?82uQ5#n(3fu@{A5=S=X N5>|1hhLH>y7yw1R>{tK* diff --git a/testdata/drc/drcSimpleTests_au8.gds b/testdata/drc/drcSimpleTests_au8.gds new file mode 100644 index 0000000000000000000000000000000000000000..86825b3c5a1030dd0e2d5e566d939dd96107e245 GIT binary patch literal 2792 zcmbtVJ!=$E6umpM^D@dR8pO{nQUwb^uvycH2{vLti>PaA4XB{;2gHD#f55^-un5># zX#{&eaAT(tENo&*6Im33$5?ZR+&?z}Vao_p@QLyCf+N%cxFvPmIr zqfr{CG50^kfto%&MYJc3PE6iyoO%7|`^2f|M;|WD&QLx2KTjz&NmQ*7sT~2mA+{0LCLY2m5poz68pzioQw{Dq6QcY1l>Yn}B@)V^~S?_1D1 z#YNzC+%s}~L3k%>SB76uyI852v*)_iLmji~9ZRc|o|10$(pn`Si4aMj*cx26{jc^_ zC?Z?qL($3cx%8Kvzs@o=_O9Uod}Ol<{%3i92i^Z)zZ2uo#UlIHvW_CyX37*oVJL6k(RNfwiXAzaHnv z@kq`x?4QmuUoQvX_w}-nU&716cNKU!H>8(>@8PB7m+;cgoEv%msQFX${D#F%;4|Da za(qMdlEX*Oo0-+HH~};>i;?4vKKvIrGx#ng2JyX0UOC8d`MtWC=Z_h=g#FBHG`I+S z;2_84%yjr(`W?R2%{o~(BgdtF$uF;eKG*M+zr**+U-HZ6e=E=5%Rh(jrQhLu>6iQx K`ti-JR_QM)tm19} literal 0 HcmV?d00001 diff --git a/testdata/drc/drcSimpleTests_au8.oas b/testdata/drc/drcSimpleTests_au8.oas deleted file mode 100644 index 869056430012c16bbd644d832c12c03c2209b5dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 656 zcmY!lcJ=kt^>+;R4CduxWH!_@V0gjKfDB|rrGn#q9V6m{J>C6WUE)3cLR{TlgW|(I zT|zuKSY&u*Akv|J*c8Z!as|hS_y@#0yZZR>Fauf4jE>BVPRt-CD|19-6f1LRSU4|( za5cjTMh4BdEF#q>85w@?U*kO~@K;b+@g$=N<0(dwo0k}wwBNIcG+t&DX}ki&R~dO3 z1wS$T)qlw(Sg?j^1B-AqBhY}gVy#SIO}8&IGBB+dYi9y0WfJ_ra8aW{L+}G*3dpJy zhP7G~nT2g$Fxhf5Xv}6R60Tr8DcZ^;Qk}|hjrRxtNsEobA~hga?BqQQbX+AvDqI5t zOl@Tv7NsJ0^O)9aO=jk1 ex - end - assert_equal(ex.to_s, "Texts can only be identified on an original layer in Region::texts") + t = r.texts("*", true) + assert_equal(t.to_s, "") r.insert(RBA::Box::new(1, 2, 3, 4)) - ex = nil - begin - t = r.texts("*", true) - rescue => ex - end - assert_equal(ex.to_s, "Texts can only be identified on an original layer in Region::texts") + t = r.texts("*", true) + assert_equal(t.to_s, "") ly = RBA::Layout::new top = ly.create_cell("TOP")