diff --git a/src/db/unit_tests/dbHierProcessorTests.cc b/src/db/unit_tests/dbHierProcessorTests.cc index 16d102c1a..5672f0522 100644 --- a/src/db/unit_tests/dbHierProcessorTests.cc +++ b/src/db/unit_tests/dbHierProcessorTests.cc @@ -108,61 +108,63 @@ public: db::EdgeProcessor ep; - // 0: and, 1: not - for (unsigned int gen = 0; gen < 2; ++gen) { + std::unordered_set &result0 = results [0]; + std::unordered_set &result1 = results [1]; - std::unordered_set &result = results [gen]; - ep.clear (); + size_t p1 = 0, p2 = 1; - size_t p1 = 0, p2 = 1; - - std::set others; - for (db::shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { - for (db::shape_interactions::iterator2 j = i->second.begin (); j != i->second.end (); ++j) { - others.insert (interactions.intruder_shape (*j).second); - } + std::set others; + for (db::shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { + for (db::shape_interactions::iterator2 j = i->second.begin (); j != i->second.end (); ++j) { + others.insert (interactions.intruder_shape (*j).second); } + } - for (db::shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { + for (db::shape_interactions::iterator i = interactions.begin (); i != interactions.end (); ++i) { - const db::PolygonRef &subject = interactions.subject_shape (i->first); - if (others.find (subject) != others.end ()) { - if (gen == 0) { - result.insert (subject); - } - } else if (i->second.empty ()) { - // shortcut (not: keep, and: drop) - if (gen != 0) { - result.insert (subject); - } - } else { - for (db::PolygonRef::polygon_edge_iterator e = subject.begin_edge (); ! e.at_end(); ++e) { - ep.insert (*e, p1); - } - p1 += 2; + const db::PolygonRef &subject = interactions.subject_shape (i->first); + if (others.find (subject) != others.end ()) { + result0.insert (subject); + } else if (i->second.empty ()) { + // shortcut (not: keep, and: drop) + result1.insert (subject); + } else { + for (db::PolygonRef::polygon_edge_iterator e = subject.begin_edge (); ! e.at_end(); ++e) { + ep.insert (*e, p1); } - - } - - if (! others.empty () || p1 > 0) { - - for (std::set::const_iterator o = others.begin (); o != others.end (); ++o) { - for (db::PolygonRef::polygon_edge_iterator e = o->begin_edge (); ! e.at_end(); ++e) { - ep.insert (*e, p2); - } - p2 += 2; - } - - db::BooleanOp op (gen == 0 ? db::BooleanOp::And : db::BooleanOp::ANotB); - db::PolygonRefGenerator pr (layout, result); - db::PolygonSplitter splitter (pr, area_ratio, max_vertex_count); - db::PolygonGenerator pg (splitter, true, true); - ep.set_base_verbosity (50); - ep.process (pg, op); - + p1 += 2; } } + + if (! others.empty () || p1 > 0) { + + for (std::set::const_iterator o = others.begin (); o != others.end (); ++o) { + for (db::PolygonRef::polygon_edge_iterator e = o->begin_edge (); ! e.at_end(); ++e) { + ep.insert (*e, p2); + } + p2 += 2; + } + + db::BooleanOp op0 (db::BooleanOp::And); + db::PolygonRefGenerator pr0 (layout, result0); + db::PolygonSplitter splitter0 (pr0, area_ratio, max_vertex_count); + db::PolygonGenerator pg0 (splitter0, true, true); + + db::BooleanOp op1 (db::BooleanOp::ANotB); + db::PolygonRefGenerator pr1 (layout, result1); + db::PolygonSplitter splitter1 (pr1, area_ratio, max_vertex_count); + db::PolygonGenerator pg1 (splitter1, true, true); + + ep.set_base_verbosity (50); + + std::vector > procs; + procs.push_back (std::make_pair (&pg0, &op0)); + procs.push_back (std::make_pair (&pg1, &op1)); + ep.process (procs); + + } + } }; diff --git a/testdata/algo/hlp17.oas b/testdata/algo/hlp17.oas index a40ff4766..5bb216b21 100644 Binary files a/testdata/algo/hlp17.oas and b/testdata/algo/hlp17.oas differ