diff --git a/src/drc/drc/built-in-macros/_drc_layer.rb b/src/drc/drc/built-in-macros/_drc_layer.rb index 6c119936d..7eee5f905 100644 --- a/src/drc/drc/built-in-macros/_drc_layer.rb +++ b/src/drc/drc/built-in-macros/_drc_layer.rb @@ -5079,6 +5079,7 @@ CODE # # This method works both on edge or polygon layers. Edge merging forms # single, continuous edges from coincident and connected individual edges. + # The overlap count is only available on polygon layers. # # A version that modifies the input layer is \merge. # @@ -5106,7 +5107,13 @@ CODE def merged(overlap_count = 1) @engine._context("merged") do requires_edges_or_region - aa = [ @engine._prep_value(overlap_count) ] + oc = @engine._prep_value(overlap_count) + if self.data.is_a?(RBA::Edges) + oc == 1 || raise("'overlap_count' (merged) is only available on polygon layers") + aa = [] + else + aa = [ oc ] + end DRCLayer::new(@engine, @engine._tcmd(self.data, 0, self.data.class, :merged, *aa)) end end @@ -5114,7 +5121,13 @@ CODE def merge(overlap_count = 1) @engine._context("merge") do requires_edges_or_region - aa = [ @engine._prep_value(overlap_count) ] + oc = @engine._prep_value(overlap_count) + if self.data.is_a?(RBA::Edges) + oc == 1 || raise("'overlap_count' (merged) is only available on polygon layers") + aa = [] + else + aa = [ oc ] + end if @engine.is_tiled? # in tiled mode, no modifying versions are available self.data = @engine._tcmd(self.data, 0, self.data.class, :merged, *aa) diff --git a/src/drc/unit_tests/drcSimpleTests.cc b/src/drc/unit_tests/drcSimpleTests.cc index 8e46d2d74..85547ab6b 100644 --- a/src/drc/unit_tests/drcSimpleTests.cc +++ b/src/drc/unit_tests/drcSimpleTests.cc @@ -2044,3 +2044,14 @@ TEST(144d_combined_antennas) run_test (_this, "144", true); } +// issue 2134 +TEST(145_edges_merge) +{ + run_test (_this, "145", false); +} + +TEST(145d_edges_merge) +{ + run_test (_this, "145", true); +} + diff --git a/testdata/drc/drcSimpleTests_145.drc b/testdata/drc/drcSimpleTests_145.drc new file mode 100644 index 000000000..c5c5e094e --- /dev/null +++ b/testdata/drc/drcSimpleTests_145.drc @@ -0,0 +1,22 @@ + +source $drc_test_source +target $drc_test_target + +if $drc_test_deep + deep +end + +l1 = input(1, 0) +l2 = input(2, 0) +l3 = input(3, 0) + +l1.output(1, 0) +l2.output(2, 0) +l3.output(3, 0) + +l1.raw.edges.merged.output(100, 0) +l2.raw.edges.merged.output(101, 0) +l3e = l3.raw.edges +l3e.merge +l3e.output(102, 0) + diff --git a/testdata/drc/drcSimpleTests_145.gds b/testdata/drc/drcSimpleTests_145.gds new file mode 100644 index 000000000..5ded0984e Binary files /dev/null and b/testdata/drc/drcSimpleTests_145.gds differ diff --git a/testdata/drc/drcSimpleTests_au145.gds b/testdata/drc/drcSimpleTests_au145.gds new file mode 100644 index 000000000..3e5c58ed7 Binary files /dev/null and b/testdata/drc/drcSimpleTests_au145.gds differ diff --git a/testdata/drc/drcSimpleTests_au145d.gds b/testdata/drc/drcSimpleTests_au145d.gds new file mode 100644 index 000000000..243f03859 Binary files /dev/null and b/testdata/drc/drcSimpleTests_au145d.gds differ