From cc6ad01529c17315e4c2ae5aa043208ca4ca6c07 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 26 Dec 2020 16:04:35 +0100 Subject: [PATCH] WIP: more tests, debugging --- src/db/db/dbCompoundOperation.cc | 16 ++++---- src/db/db/dbCompoundOperation.h | 38 ++++++++++-------- src/db/db/dbRegionLocalOperations.cc | 1 - src/db/db/gsiDeclDbCompoundOperation.cc | 2 +- src/db/unit_tests/dbCompoundOperationTests.cc | 37 ++++++++++++++++- testdata/drc/compound_8.gds | Bin 0 -> 576 bytes testdata/drc/compound_au8.gds | Bin 0 -> 648 bytes 7 files changed, 67 insertions(+), 27 deletions(-) create mode 100644 testdata/drc/compound_8.gds create mode 100644 testdata/drc/compound_au8.gds diff --git a/src/db/db/dbCompoundOperation.cc b/src/db/db/dbCompoundOperation.cc index f05a8d4b3..a7882ca18 100644 --- a/src/db/db/dbCompoundOperation.cc +++ b/src/db/db/dbCompoundOperation.cc @@ -846,14 +846,14 @@ void compound_region_generic_operation_node::implement_compute_local } // explicit instantiations -template void compound_region_generic_operation_node::implement_compute_local (db::Layout *, const shape_interactions &, std::vector > &, size_t, double) const; -template void compound_region_generic_operation_node::implement_compute_local (db::Layout *, const shape_interactions &, std::vector > &, size_t, double) const; -template void compound_region_generic_operation_node::implement_compute_local (db::Layout *, const shape_interactions &, std::vector > &, size_t, double) const; -template void compound_region_generic_operation_node::implement_compute_local (db::Layout *, const shape_interactions &, std::vector > &, size_t, double) const; -template void compound_region_generic_operation_node::implement_compute_local (db::Layout *, const shape_interactions &, std::vector > &, size_t, double) const; -template void compound_region_generic_operation_node::implement_compute_local (db::Layout *, const shape_interactions &, std::vector > &, size_t, double) const; -template void compound_region_generic_operation_node::implement_compute_local (db::Layout *, const shape_interactions &, std::vector > &, size_t, double) const; -template void compound_region_generic_operation_node::implement_compute_local (db::Layout *, const shape_interactions &, std::vector > &, size_t, double) const; +template DB_PUBLIC void compound_region_generic_operation_node::implement_compute_local (db::Layout *, const shape_interactions &, std::vector > &, size_t, double) const; +template DB_PUBLIC void compound_region_generic_operation_node::implement_compute_local (db::Layout *, const shape_interactions &, std::vector > &, size_t, double) const; +template DB_PUBLIC void compound_region_generic_operation_node::implement_compute_local (db::Layout *, const shape_interactions &, std::vector > &, size_t, double) const; +template DB_PUBLIC void compound_region_generic_operation_node::implement_compute_local (db::Layout *, const shape_interactions &, std::vector > &, size_t, double) const; +template DB_PUBLIC void compound_region_generic_operation_node::implement_compute_local (db::Layout *, const shape_interactions &, std::vector > &, size_t, double) const; +template DB_PUBLIC void compound_region_generic_operation_node::implement_compute_local (db::Layout *, const shape_interactions &, std::vector > &, size_t, double) const; +template DB_PUBLIC void compound_region_generic_operation_node::implement_compute_local (db::Layout *, const shape_interactions &, std::vector > &, size_t, double) const; +template DB_PUBLIC void compound_region_generic_operation_node::implement_compute_local (db::Layout *, const shape_interactions &, std::vector > &, size_t, double) const; // --------------------------------------------------------------------------------------------- diff --git a/src/db/db/dbCompoundOperation.h b/src/db/db/dbCompoundOperation.h index a8d7e163e..323093085 100644 --- a/src/db/db/dbCompoundOperation.h +++ b/src/db/db/dbCompoundOperation.h @@ -555,8 +555,8 @@ class DB_PUBLIC CompoundRegionInteractWithEdgeOperationNode : public compound_region_generic_operation_node { public: - CompoundRegionInteractWithEdgeOperationNode (CompoundRegionOperationNode *a, CompoundRegionOperationNode *b, int mode, bool touching, bool inverse, size_t min_count = 0, size_t max_count = std::numeric_limits::max ()) - : compound_region_generic_operation_node (&m_op, a, b), m_op (mode, touching, inverse, min_count, max_count) + CompoundRegionInteractWithEdgeOperationNode (CompoundRegionOperationNode *a, CompoundRegionOperationNode *b, bool inverse, size_t min_count = 0, size_t max_count = std::numeric_limits::max ()) + : compound_region_generic_operation_node (&m_op, a, b), m_op (inverse, min_count, max_count) { // .. nothing yet .. } @@ -577,7 +577,7 @@ public: } private: - db::interacting_local_operation m_op; + db::interacting_with_edge_local_operation m_op; }; class DB_PUBLIC CompoundRegionPullOperationNode @@ -616,32 +616,32 @@ private: }; class DB_PUBLIC CompoundRegionPullWithEdgeOperationNode - : public compound_region_generic_operation_node + : public compound_region_generic_operation_node { public: - CompoundRegionPullWithEdgeOperationNode (CompoundRegionOperationNode *a, CompoundRegionOperationNode *b, int mode, bool touching) - : compound_region_generic_operation_node (&m_op, a, b), m_op (mode, touching) + CompoundRegionPullWithEdgeOperationNode (CompoundRegionOperationNode *a, CompoundRegionOperationNode *b) + : compound_region_generic_operation_node (&m_op, a, b), m_op () { // .. nothing yet .. } std::string generated_description () const { - return std::string ("pull") + compound_region_generic_operation_node::description (); + return std::string ("pull") + compound_region_generic_operation_node::description (); } - virtual void do_compute_local (db::Layout *layout, const shape_interactions &interactions, std::vector > &results, size_t max_vertex_count, double area_ratio) const + virtual void do_compute_local (db::Layout *layout, const shape_interactions &interactions, std::vector > &results, size_t max_vertex_count, double area_ratio) const { implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio); } - virtual void do_compute_local (db::Layout *layout, const shape_interactions &interactions, std::vector > &results, size_t max_vertex_count, double area_ratio) const + virtual void do_compute_local (db::Layout *layout, const shape_interactions &interactions, std::vector > &results, size_t max_vertex_count, double area_ratio) const { implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio); } private: - db::pull_local_operation m_op; + db::pull_with_edge_local_operation m_op; }; @@ -835,8 +835,9 @@ private: child (0)->compute_local (layout, interactions, one, max_vertex_count, area_ratio); + std::vector res; for (typename std::unordered_set::const_iterator p = one.front ().begin (); p != one.front ().end (); ++p) { - std::vector res; + res.clear (); processed (layout, *p, res); results.front ().insert (res.begin (), res.end ()); } @@ -897,8 +898,9 @@ private: child (0)->compute_local (layout, interactions, one, max_vertex_count, area_ratio); + std::vector res; for (typename std::unordered_set::const_iterator p = one.front ().begin (); p != one.front ().end (); ++p) { - std::vector res; + res.clear (); processed (layout, *p, res); results.front ().insert (res.begin (), res.end ()); } @@ -937,8 +939,9 @@ private: child (0)->compute_local (layout, interactions, one, max_vertex_count, area_ratio); + std::vector res; for (typename std::unordered_set::const_iterator p = one.front ().begin (); p != one.front ().end (); ++p) { - std::vector res; + res.clear (); processed (layout, *p, res); results.front ().insert (res.begin (), res.end ()); } @@ -974,8 +977,9 @@ private: child (0)->compute_local (layout, interactions, one, max_vertex_count, area_ratio); + std::vector res; for (typename std::unordered_set::const_iterator p = one.front ().begin (); p != one.front ().end (); ++p) { - std::vector res; + res.clear (); mp_proc->process (*p, res); results.front ().insert (res.begin (), res.end ()); } @@ -1014,8 +1018,9 @@ private: child (0)->compute_local (layout, interactions, one, max_vertex_count, area_ratio); + std::vector res; for (typename std::unordered_set::const_iterator p = one.front ().begin (); p != one.front ().end (); ++p) { - std::vector res; + res.clear (); processed (layout, *p, res); results.front ().insert (res.begin (), res.end ()); } @@ -1064,8 +1069,9 @@ private: child (0)->compute_local (layout, interactions, one, max_vertex_count, area_ratio); + std::vector res; for (typename std::unordered_set::const_iterator p = one.front ().begin (); p != one.front ().end (); ++p) { - std::vector res; + res.clear (); processed (layout, *p, res); results.front ().insert (res.begin (), res.end ()); } diff --git a/src/db/db/dbRegionLocalOperations.cc b/src/db/db/dbRegionLocalOperations.cc index 1b189a6ae..6bc88688e 100644 --- a/src/db/db/dbRegionLocalOperations.cc +++ b/src/db/db/dbRegionLocalOperations.cc @@ -537,7 +537,6 @@ std::string interacting_local_operation::description () const // explicit instantiations template class DB_PUBLIC interacting_local_operation; template class DB_PUBLIC interacting_local_operation; -template class DB_PUBLIC interacting_local_operation; // --------------------------------------------------------------------------------------------------------------- diff --git a/src/db/db/gsiDeclDbCompoundOperation.cc b/src/db/db/gsiDeclDbCompoundOperation.cc index 66cccf378..c8b541fcd 100644 --- a/src/db/db/gsiDeclDbCompoundOperation.cc +++ b/src/db/db/gsiDeclDbCompoundOperation.cc @@ -65,7 +65,7 @@ static db::CompoundRegionOperationNode *new_interacting (db::CompoundRegionOpera if (b->result_type () == db::CompoundRegionOperationNode::Region) { return new db::CompoundRegionInteractOperationNode (a, b, 0, true, inverse, min_count, max_count); } else if (b->result_type () == db::CompoundRegionOperationNode::Edges) { - return new db::CompoundRegionInteractWithEdgeOperationNode (a, b, 0, true, inverse, min_count, max_count); + return new db::CompoundRegionInteractWithEdgeOperationNode (a, b, inverse, min_count, max_count); } else { throw tl::Exception ("Secondary input for interaction compound operation must be either of Region or Edges type"); } diff --git a/src/db/unit_tests/dbCompoundOperationTests.cc b/src/db/unit_tests/dbCompoundOperationTests.cc index d5c1e6c91..ef4029804 100644 --- a/src/db/unit_tests/dbCompoundOperationTests.cc +++ b/src/db/unit_tests/dbCompoundOperationTests.cc @@ -257,7 +257,7 @@ TEST(6_InteractWithEdgeOperation) db::CompoundRegionOperationSecondaryNode *secondary = new db::CompoundRegionOperationSecondaryNode (&r2); db::CompoundRegionToEdgeProcessingOperationNode *secondary_edges = new db::CompoundRegionToEdgeProcessingOperationNode (new db::PolygonToEdgeProcessor (), secondary, true); - db::CompoundRegionInteractWithEdgeOperationNode interact (primary, secondary_edges, 0, true, false); + db::CompoundRegionInteractWithEdgeOperationNode interact (primary, secondary_edges, false); db::Region res = r.cop_to_region (interact); @@ -302,3 +302,38 @@ TEST(7_PullOperation) db::compare_layouts (_this, ly, tl::testsrc () + "/testdata/drc/compound_au7.gds"); } +TEST(8_PullWithEdgeOperation) +{ + db::Layout ly; + { + std::string fn (tl::testsrc ()); + fn += "/testdata/drc/compound_8.gds"; + tl::InputStream stream (fn); + db::Reader reader (stream); + reader.read (ly); + } + + db::RegionCheckOptions check_options; + check_options.metrics = db::Projection; + + unsigned int l1 = ly.get_layer (db::LayerProperties (1, 0)); + db::Region r (db::RecursiveShapeIterator (ly, ly.cell (*ly.begin_top_down ()), l1)); + + unsigned int l2 = ly.get_layer (db::LayerProperties (2, 0)); + db::Region r2 (db::RecursiveShapeIterator (ly, ly.cell (*ly.begin_top_down ()), l2)); + + db::CompoundRegionOperationPrimaryNode *primary = new db::CompoundRegionOperationPrimaryNode (); + db::CompoundRegionOperationSecondaryNode *secondary = new db::CompoundRegionOperationSecondaryNode (&r2); + db::CompoundRegionToEdgeProcessingOperationNode *secondary_edges = new db::CompoundRegionToEdgeProcessingOperationNode (new db::PolygonToEdgeProcessor (), secondary, true); + + db::CompoundRegionPullWithEdgeOperationNode pull (primary, secondary_edges); + + db::Edges res = r.cop_to_edges (pull); + + unsigned int l1000 = ly.get_layer (db::LayerProperties (1000, 0)); + res.insert_into (&ly, *ly.begin_top_down (), l1000); + + CHECKPOINT(); + db::compare_layouts (_this, ly, tl::testsrc () + "/testdata/drc/compound_au8.gds"); +} + diff --git a/testdata/drc/compound_8.gds b/testdata/drc/compound_8.gds new file mode 100644 index 0000000000000000000000000000000000000000..001eefe47e13e90090c534d99fd50afcbc3a9818 GIT binary patch literal 576 zcmb7>y-EZz6otRZB-wG9{Sz(JDJ=!D5*u;EW>IjFDa6VLv9$3SY^Kw~2k-&Jr?A{& zv05x`u9>)Df{3yya>7l%b1pYnl)9uyRA)-g23`8>#b+{Q&&J2FmYT!zZvXW4VSaG( zyj$O2RTSnA&e}IFCB;3Cofq@3$;XihOSS7CiaeRMMGucGD2~s9;dH>JoiDBrkXs qPu0A^$_q5wOmk4T8tP8t{2#o?^s(VZ=GV}BYBkiIdfxqt)_eg+?O5jk literal 0 HcmV?d00001 diff --git a/testdata/drc/compound_au8.gds b/testdata/drc/compound_au8.gds new file mode 100644 index 0000000000000000000000000000000000000000..bd3fe533838e25ca60e245c6b2f46b3835eabf7d GIT binary patch literal 648 zcmb7>ze)o^5Qo3)?rkoTc!|VD(g>DKv>7`0S;L6;r+XvXnBsj_D$$1v2%(d72<^yPjv zo<1EEcb7S%KRy@X1mlo^0&^P5jTo4b1(kZzTp z-N+-<_?{DayJ1aEUB7`eD>pFoQ)