diff --git a/src/db/unit_tests/dbHierNetworkProcessorTests.cc b/src/db/unit_tests/dbHierNetworkProcessorTests.cc index 8ef049e6f..06798f741 100644 --- a/src/db/unit_tests/dbHierNetworkProcessorTests.cc +++ b/src/db/unit_tests/dbHierNetworkProcessorTests.cc @@ -877,7 +877,7 @@ static void copy_cluster_shapes (const std::string *&attrs, db::Shapes &out, db: static void run_hc_test (tl::TestBase *_this, const std::string &file, const std::string &au_file) { db::Layout ly; - unsigned int l1 = 0, l2 = 0, l3 = 0, l4 = 0; + unsigned int l1 = 0, l2 = 0, l3 = 0, l4 = 0, l5 = 0, l6 = 0; { db::LayerProperties p; @@ -903,6 +903,16 @@ static void run_hc_test (tl::TestBase *_this, const std::string &file, const std lmap.map (db::LDPair (p.layer, p.datatype), l4 = ly.insert_layer ()); ly.set_properties (l4, p); + p.layer = 5; + p.datatype = 0; + lmap.map (db::LDPair (p.layer, p.datatype), l5 = ly.insert_layer ()); + ly.set_properties (l5, p); + + p.layer = 6; + p.datatype = 0; + lmap.map (db::LDPair (p.layer, p.datatype), l6 = ly.insert_layer ()); + ly.set_properties (l6, p); + db::LoadLayoutOptions options; options.get_options ().layer_map = lmap; options.get_options ().create_other_layers = false; @@ -920,6 +930,8 @@ static void run_hc_test (tl::TestBase *_this, const std::string &file, const std normalize_layer (ly, strings, l2); normalize_layer (ly, strings, l3); normalize_layer (ly, strings, l4); + normalize_layer (ly, strings, l5); + normalize_layer (ly, strings, l6); // connect 1 to 1, 1 to 2 and 1 to 3, but *not* 2 to 3 db::Connectivity conn; @@ -929,8 +941,13 @@ static void run_hc_test (tl::TestBase *_this, const std::string &file, const std conn.connect (l1, l2); conn.connect (l1, l3); conn.connect (l1, l4); + conn.connect (l1, l5); + conn.connect (l1, l6); conn.connect_global (l4, "BULK"); + conn.connect_global (l5, "BULK2"); + conn.connect_global (l6, "BULK"); + conn.connect_global (l6, "BULK2"); db::hier_clusters hc; hc.build (ly, ly.cell (*ly.begin_top_down ()), db::ShapeIterator::Polygons, conn); @@ -993,7 +1010,7 @@ static void run_hc_test (tl::TestBase *_this, const std::string &file, const std static void run_hc_test_with_backannotation (tl::TestBase *_this, const std::string &file, const std::string &au_file) { db::Layout ly; - unsigned int l1 = 0, l2 = 0, l3 = 0, l4 = 0; + unsigned int l1 = 0, l2 = 0, l3 = 0, l4 = 0, l5 = 0, l6 = 0; { db::LayerProperties p; @@ -1019,6 +1036,16 @@ static void run_hc_test_with_backannotation (tl::TestBase *_this, const std::str lmap.map (db::LDPair (p.layer, p.datatype), l4 = ly.insert_layer ()); ly.set_properties (l4, p); + p.layer = 5; + p.datatype = 0; + lmap.map (db::LDPair (p.layer, p.datatype), l5 = ly.insert_layer ()); + ly.set_properties (l5, p); + + p.layer = 6; + p.datatype = 0; + lmap.map (db::LDPair (p.layer, p.datatype), l6 = ly.insert_layer ()); + ly.set_properties (l6, p); + db::LoadLayoutOptions options; options.get_options ().layer_map = lmap; options.get_options ().create_other_layers = false; @@ -1036,6 +1063,8 @@ static void run_hc_test_with_backannotation (tl::TestBase *_this, const std::str normalize_layer (ly, strings, l2); normalize_layer (ly, strings, l3); normalize_layer (ly, strings, l4); + normalize_layer (ly, strings, l5); + normalize_layer (ly, strings, l6); // connect 1 to 1, 1 to 2 and 1 to 3, but *not* 2 to 3 db::Connectivity conn; @@ -1045,8 +1074,13 @@ static void run_hc_test_with_backannotation (tl::TestBase *_this, const std::str conn.connect (l1, l2); conn.connect (l1, l3); conn.connect (l1, l4); + conn.connect (l1, l5); + conn.connect (l1, l6); conn.connect_global (l4, "BULK"); + conn.connect_global (l5, "BULK2"); + conn.connect_global (l6, "BULK"); + conn.connect_global (l6, "BULK2"); db::hier_clusters hc; hc.build (ly, ly.cell (*ly.begin_top_down ()), db::ShapeIterator::Polygons, conn); @@ -1056,6 +1090,8 @@ static void run_hc_test_with_backannotation (tl::TestBase *_this, const std::str lm[l2] = ly.insert_layer (db::LayerProperties (102, 0)); lm[l3] = ly.insert_layer (db::LayerProperties (103, 0)); lm[l4] = ly.insert_layer (db::LayerProperties (104, 0)); + lm[l5] = ly.insert_layer (db::LayerProperties (105, 0)); + lm[l6] = ly.insert_layer (db::LayerProperties (106, 0)); hc.return_to_hierarchy (ly, lm); CHECKPOINT(); @@ -1158,3 +1194,9 @@ TEST(116_HierClusters) run_hc_test_with_backannotation (_this, "hc_test_l16.gds", "hc_test_au16b.gds"); } +TEST(117_HierClusters) +{ + run_hc_test (_this, "hc_test_l17.gds", "hc_test_au17.gds"); + run_hc_test_with_backannotation (_this, "hc_test_l17.gds", "hc_test_au17b.gds"); +} + diff --git a/testdata/algo/hc_test_au17.gds b/testdata/algo/hc_test_au17.gds new file mode 100644 index 000000000..d4ae2eb93 Binary files /dev/null and b/testdata/algo/hc_test_au17.gds differ diff --git a/testdata/algo/hc_test_au17b.gds b/testdata/algo/hc_test_au17b.gds new file mode 100644 index 000000000..441679c28 Binary files /dev/null and b/testdata/algo/hc_test_au17b.gds differ diff --git a/testdata/algo/hc_test_l17.gds b/testdata/algo/hc_test_l17.gds new file mode 100644 index 000000000..4ddd3a2a7 Binary files /dev/null and b/testdata/algo/hc_test_l17.gds differ