From 68d15e01af277c6749c793935ec5f79fff27fb79 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 8 Sep 2024 19:16:40 +0200 Subject: [PATCH] DRC: more variants for layer#insert - labels, DBU-unit types --- src/drc/drc/built-in-macros/_drc_layer.rb | 20 +++- src/drc/unit_tests/drcSimpleTests.cc | 5 + testdata/drc/drcSimpleTests_123.drc | 132 ++++++++++++++++++++++ testdata/drc/drcSimpleTests_123.gds | Bin 0 -> 1698 bytes testdata/drc/drcSimpleTests_au123.gds | Bin 0 -> 2534 bytes 5 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 testdata/drc/drcSimpleTests_123.drc create mode 100644 testdata/drc/drcSimpleTests_123.gds create mode 100644 testdata/drc/drcSimpleTests_au123.gds diff --git a/src/drc/drc/built-in-macros/_drc_layer.rb b/src/drc/drc/built-in-macros/_drc_layer.rb index 0592c6e35..c384d82c6 100644 --- a/src/drc/drc/built-in-macros/_drc_layer.rb +++ b/src/drc/drc/built-in-macros/_drc_layer.rb @@ -42,22 +42,38 @@ module DRC @engine._context("insert") do - requires_edges_or_region args.each do |a| if a.is_a?(RBA::DBox) + requires_edges_or_region self.data.insert(RBA::Box::from_dbox(a * (1.0 / @engine.dbu))) elsif a.is_a?(RBA::DPolygon) + requires_edges_or_region self.data.insert(RBA::Polygon::from_dpoly(a * (1.0 / @engine.dbu))) elsif a.is_a?(RBA::DSimplePolygon) + requires_edges_or_region self.data.insert(RBA::SimplePolygon::from_dpoly(a * (1.0 / @engine.dbu))) elsif a.is_a?(RBA::DPath) + requires_edges_or_region self.data.insert(RBA::Path::from_dpath(a * (1.0 / @engine.dbu))) + elsif a.is_a?(RBA::Box) || a.is_a?(RBA::Polygon) || a.is_a?(RBA::SimplePolygon) || a.is_a?(RBA::Path) + requires_edges_or_region + self.data.insert(a) elsif a.is_a?(RBA::DEdge) + requires_edges self.data.insert(RBA::Edge::from_dedge(a * (1.0 / @engine.dbu))) + elsif a.is_a?(RBA::Edge) + requires_edges + self.data.insert(a) + elsif a.is_a?(RBA::DText) + requires_texts + self.data.insert(RBA::CplxTrans::new(@engine.dbu).inverted * a) + elsif a.is_a?(RBA::Text) + requires_texts + self.data.insert(a) elsif a.is_a?(Array) insert(*a) else - raise("Invalid argument type for #{a.inspect}") + raise("Invalid argument type of #{a.inspect}") end end diff --git a/src/drc/unit_tests/drcSimpleTests.cc b/src/drc/unit_tests/drcSimpleTests.cc index a5403178c..79122f690 100644 --- a/src/drc/unit_tests/drcSimpleTests.cc +++ b/src/drc/unit_tests/drcSimpleTests.cc @@ -1954,6 +1954,11 @@ TEST(122_NamedLayers) compare_text_files (output, au_output); } +TEST(123_DirectInsert) +{ + run_test (_this, "123", false); +} + TEST(130_size_inside_outside) { run_test (_this, "130", false); diff --git a/testdata/drc/drcSimpleTests_123.drc b/testdata/drc/drcSimpleTests_123.drc new file mode 100644 index 000000000..1c1079cf2 --- /dev/null +++ b/testdata/drc/drcSimpleTests_123.drc @@ -0,0 +1,132 @@ + +source $drc_test_source +target $drc_test_target + +lp = polygons +le = edges +ll = labels + +lp.insert(RBA::Box::new(0, 0, 100, 200)) +lp.insert(RBA::DBox::new(0.200, 0, 0.300, 0.200)) +lp.insert(RBA::Polygon::new(RBA::Box::new(400, 0, 500, 200))) +lp.insert(RBA::DPolygon::new(RBA::DBox::new(0.600, 0, 0.700, 0.200))) +lp.insert(RBA::SimplePolygon::new(RBA::Box::new(800, 0, 900, 200))) +lp.insert(RBA::DSimplePolygon::new(RBA::DBox::new(1.000, 0, 1.100, 0.200))) +lp.insert(RBA::Path::new([ RBA::Point::new(1200, 100), RBA::Point::new(1300, 100) ], 200)) +lp.insert(RBA::DPath::new([ RBA::DPoint::new(1.400, 0.1), RBA::DPoint::new(1.500, 0.1) ], 0.2)) + +begin + lp.insert(RBA::Edge::new(RBA::Point::new(0, 0), RBA::Point::new(100, 100))) + raise Exception::new("Error expected") +rescue => ex +end + +begin + lp.insert(RBA::DEdge::new(RBA::DPoint::new(0, 0), RBA::DPoint::new(0.1, 0.1))) + raise Exception::new("Error expected") +rescue => ex +end + +begin + lp.insert(RBA::Text::new("ABC", RBA::Trans::new(RBA::Vector::new(0, 0)))) + raise Exception::new("Error expected") +rescue => ex +end + +begin + lp.insert(RBA::DText::new("XYZ", RBA::DTrans::new(RBA::DVector::new(0, 0.1)))) + raise Exception::new("Error expected") +rescue => ex +end + +le.insert(RBA::Box::new(0, 0, 100, 200)) +le.insert(RBA::DBox::new(0.200, 0, 0.300, 0.200)) +le.insert(RBA::Polygon::new(RBA::Box::new(400, 0, 500, 200))) +le.insert(RBA::DPolygon::new(RBA::DBox::new(0.600, 0, 0.700, 0.200))) +le.insert(RBA::SimplePolygon::new(RBA::Box::new(800, 0, 900, 200))) +le.insert(RBA::DSimplePolygon::new(RBA::DBox::new(1.000, 0, 1.100, 0.200))) +le.insert(RBA::Path::new([ RBA::Point::new(1200, 100), RBA::Point::new(1300, 100) ], 200)) +le.insert(RBA::DPath::new([ RBA::DPoint::new(1.400, 0.1), RBA::DPoint::new(1.500, 0.1) ], 0.2)) + +le.insert(RBA::Edge::new(RBA::Point::new(0, 0), RBA::Point::new(100, 100))) +le.insert(RBA::DEdge::new(RBA::DPoint::new(0, 0.1), RBA::DPoint::new(0.1, 0.2))) + +begin + le.insert(RBA::Text::new("ABC", RBA::Trans::new(RBA::Vector::new(0, 0)))) + raise Exception::new("Error expected") +rescue => ex +end + +begin + le.insert(RBA::DText::new("XYZ", RBA::DTrans::new(RBA::DVector::new(0, 0.1)))) + raise Exception::new("Error expected") +rescue => ex +end + +begin + ll.insert(RBA::Box::new(0, 0, 100, 200)) + raise Exception::new("Error expected") +rescue => ex +end + +begin + ll.insert(RBA::DBox::new(0.200, 0, 0.300, 0.200)) + raise Exception::new("Error expected") +rescue => ex +end + +begin + ll.insert(RBA::Polygon::new(RBA::Box::new(400, 0, 500, 200))) + raise Exception::new("Error expected") +rescue => ex +end + +begin + ll.insert(RBA::DPolygon::new(RBA::DBox::new(0.600, 0, 0.700, 0.200))) + raise Exception::new("Error expected") +rescue => ex +end + +begin + ll.insert(RBA::SimplePolygon::new(RBA::Box::new(800, 0, 900, 200))) + raise Exception::new("Error expected") +rescue => ex +end + +begin + ll.insert(RBA::DSimplePolygon::new(RBA::DBox::new(1.000, 0, 1.100, 0.200))) + raise Exception::new("Error expected") +rescue => ex +end + +begin + ll.insert(RBA::Path::new([ RBA::Point::new(1200, 100), RBA::Point::new(1300, 100) ], 200)) + raise Exception::new("Error expected") +rescue => ex +end + +begin + ll.insert(RBA::DPath::new([ RBA::DPoint::new(1.400, 0.1), RBA::DPoint::new(1.500, 0.1) ], 0.2)) + raise Exception::new("Error expected") +rescue => ex +end + +begin + ll.insert(RBA::Edge::new(RBA::Point::new(0, 0), RBA::Point::new(100, 100))) + raise Exception::new("Error expected") +rescue => ex +end + +begin + ll.insert(RBA::DEdge::new(RBA::DPoint::new(0, 0.1), RBA::DPoint::new(0.1, 0.2))) + raise Exception::new("Error expected") +rescue => ex +end + +ll.insert(RBA::Text::new("ABC", RBA::Trans::new(RBA::Vector::new(100, 0)))) +ll.insert(RBA::DText::new("XYZ", RBA::DTrans::new(RBA::DVector::new(0, 0.1)))) + +lp.output(1, 0) +le.output(2, 0) +ll.output(3, 0) + diff --git a/testdata/drc/drcSimpleTests_123.gds b/testdata/drc/drcSimpleTests_123.gds new file mode 100644 index 0000000000000000000000000000000000000000..3546756f7014657a243871d48ce073152774e619 GIT binary patch literal 1698 zcma)+PiPZC6vn^ZB%39TnrcyzEqL(YAz;9QDcE9b@DB#ml0&I_E8-ys4GyA%eq)Xkf`7Lku`{unjGYb!{ zJBh$?)2m1$ft?sc+J1)bdgYVjz(683I(F;OsTcR#!=)z&>UXCq2vYGn&+|$^(g(aP zE<1Z$T>$%X3H}eSVII8n2vD@HWIyZD*vx$_a(6=ad@e!ssh}JUk6a;YH36Z-c}6`; zn4KHy4=er08qwz!Md0{uqHn80qTh93G>B;4Q|}wU&9mlCN>8k;t?KzP(+2!I5v|ex z>5cDsmD6WGe;Loa`a3x|J!T93X8umD77$8$sryiT3$QgG%qZib!hF)mGI+eMviMpw)|&Z?Ds_y?G17)LY0 zJ5rAQYGZJ|0R;kd20&H}KvO4OKC%2g%vQXlhvHG7W#5H5} zc@VwheVFImFFc1+tO+Hq8LKZ9iGKctQ{r{x`kk|ZP~w_#dfm6H=S}}^-Zpxn#F?@B Z5A#GX7Xd|8$Ha+<5@%{Xe@l}|`~wsxVif=Y literal 0 HcmV?d00001 diff --git a/testdata/drc/drcSimpleTests_au123.gds b/testdata/drc/drcSimpleTests_au123.gds new file mode 100644 index 0000000000000000000000000000000000000000..2fc76cdf65d6c8e3715d67f68a01ce573b4a20cf GIT binary patch literal 2534 zcmbW2u};H442GRca!sW|K~zYUI>26u5wRe(uplbI(4lnBL+}7BZ0sy-tc(oIs1Lyd zWMtq0uzilWoSN3hNy&e${mFMZpA8m_S->bUoeH{8zyb7O=+B`rc6K!d7^M064W20aVqw9z7n1k z`E2GX@y_1LXK#*YMLr)mo)xEJZ{_oQ$FmauB|Iq(u`}Ow=Wpcv?Xdv^Mc-w?U`;l} zP#9ZsM@uy`Er#Nq@k>k5>S&OzTsA7chV!m-S{W<20Wnm)Ldo~-D-3RrHdgblX{qMT zjG=H}vQi}#-0Bz#&rE87mTFdv7z+30*O%?*6;vB#te`e&sb(dMp>SV*-BawVqSTdY zr@miY8}YoPW-3=0RM;4*UZMJa1=U#_i)uRVOKQ223MzjLh2i`@vHiS)uAz-Zy@vMX zdW@E8cBB{z!~L^=QEw^Lbsn9$ce#$lE9|*mnSwnuXzg)#Bs)Mcw3F$D