From f9b4bb13c8c0ed8e866a2070d0800f32dbe5e733 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 3 Mar 2024 23:24:51 +0100 Subject: [PATCH] aligning deep and flat edge collections with respect to handling of degenerated edges --- src/db/db/dbDeepEdges.cc | 8 +++++--- src/db/unit_tests/dbDeepEdgesTests.cc | 10 +++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/db/db/dbDeepEdges.cc b/src/db/db/dbDeepEdges.cc index 2ba23f01c..9343ae457 100644 --- a/src/db/db/dbDeepEdges.cc +++ b/src/db/db/dbDeepEdges.cc @@ -606,7 +606,7 @@ private: for (std::list >::const_iterator i = merged_child_clusters.begin (); i != merged_child_clusters.end (); ++i) { for (db::Shapes::shape_iterator s = i->first->begin (db::ShapeIterator::All); ! s.at_end (); ++s) { - if (s->is_edge ()) { + if (s->is_edge () && ! s->edge ().is_degenerate ()) { heap.push_back (s->edge ().transformed (i->second)); m_scanner.insert (&heap.back (), 0); } @@ -614,8 +614,10 @@ private: } for (db::local_cluster::shape_iterator s = c.begin (m_layer); !s.at_end (); ++s) { - heap.push_back (*s); - m_scanner.insert (&heap.back (), 0); + if (! s->is_degenerate ()) { + heap.push_back (*s); + m_scanner.insert (&heap.back (), 0); + } } // .. and run the merge operation diff --git a/src/db/unit_tests/dbDeepEdgesTests.cc b/src/db/unit_tests/dbDeepEdgesTests.cc index 4ac5c52ee..dfa2c7bad 100644 --- a/src/db/unit_tests/dbDeepEdgesTests.cc +++ b/src/db/unit_tests/dbDeepEdgesTests.cc @@ -1328,11 +1328,11 @@ TEST(21_EdgeMergeWithDots) eee.insert_into (&ly, top_cell.cell_index (), l3); eee = db::Edges (db::RecursiveShapeIterator (ly, top_cell, l3), dss); - EXPECT_EQ (e.merged ().to_string (), "(0,0;100,0);(110,0;110,0)"); + EXPECT_EQ (e.merged ().to_string (), "(0,0;100,0)"); // dots do not participate in merge - EXPECT_EQ (ee.merged ().to_string (), "(0,0;110,0);(110,0;110,0)"); + EXPECT_EQ (ee.merged ().to_string (), "(0,0;110,0)"); // dots do not participate in merge - EXPECT_EQ (eee.merged ().to_string (), "(110,0;110,0);(110,0;110,0)"); + EXPECT_EQ (eee.merged ().to_string (), ""); } TEST(22_InteractingWithCount) @@ -1348,8 +1348,10 @@ TEST(22_InteractingWithCount) e2.insert (db::Edge (db::Point (100, 0), db::Point (100, 10))); e2.insert (db::Edge (db::Point (100, 0), db::Point (100, 30))); e2.insert (db::Edge (db::Point (110, 10), db::Point (110, 30))); + e2.merge (); e2.insert (db::Edge (db::Point (120, 20), db::Point (120, 20))); e2.insert (db::Edge (db::Point (130, 30), db::Point (130, 30))); + e2.set_merged_semantics (false); db::Region r2; r2.insert (db::Box (db::Point (99, 0), db::Point (101, 10))); @@ -1376,6 +1378,8 @@ TEST(22_InteractingWithCount) e2.insert_into (&ly, top_cell.cell_index (), l2); e2 = db::Edges (db::RecursiveShapeIterator (ly, top_cell, l2), dss); + // because it has dots + e2.set_merged_semantics (false); r2.insert_into (&ly, top_cell.cell_index (), l3); r2 = db::Region (db::RecursiveShapeIterator (ly, top_cell, l3), dss);