diff --git a/src/db/unit_tests/dbAsIfFlatRegionTests.cc b/src/db/unit_tests/dbAsIfFlatRegionTests.cc index 2e97ac6b8..31377c2c2 100644 --- a/src/db/unit_tests/dbAsIfFlatRegionTests.cc +++ b/src/db/unit_tests/dbAsIfFlatRegionTests.cc @@ -1663,14 +1663,17 @@ TEST(40_BoolWithProperties) db::RecursiveShapeIterator si1 (ly, top_cell, l1); si1.apply_property_translator (db::PropertiesTranslator::make_pass_all ()); db::Region r1 (si1); + r1.set_join_properties_on_merge (false); db::RecursiveShapeIterator si2 (ly, top_cell, l2); si2.apply_property_translator (db::PropertiesTranslator::make_pass_all ()); db::Region r2 (si2); + r2.set_join_properties_on_merge (false); db::RecursiveShapeIterator si3 (ly, top_cell, l3); si3.apply_property_translator (db::PropertiesTranslator::make_pass_all ()); db::Region r3 (si3); + r3.set_join_properties_on_merge (false); db::Layout target; unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index)); @@ -1802,6 +1805,7 @@ TEST(41_EdgesWithProperties) db::RecursiveShapeIterator si2 (ly, top_cell, l2); si2.apply_property_translator (db::PropertiesTranslator::make_pass_all ()); db::Region r2wp (si2); + r2wp.set_join_properties_on_merge (false); db::Region r2wp_nomerge = r2wp; r2wp_nomerge.set_merged_semantics (false); @@ -1846,12 +1850,14 @@ TEST(42_DRCWithProperties) db::RecursiveShapeIterator si1 (ly, top_cell, l1); si1.apply_property_translator (db::PropertiesTranslator::make_pass_all ()); db::Region r1 (si1); + r1.set_join_properties_on_merge (false); db::Region r1_nomerge (r1); r1_nomerge.set_merged_semantics (false); db::RecursiveShapeIterator si2 (ly, top_cell, l2); si2.apply_property_translator (db::PropertiesTranslator::make_pass_all ()); db::Region r2 (si2); + r2.set_join_properties_on_merge (false); db::Region r2_nomerge (r2); r2_nomerge.set_merged_semantics (false); @@ -2000,10 +2006,12 @@ TEST(44_SizeWithProperties) db::RecursiveShapeIterator si1 (ly, top_cell, l1); si1.apply_property_translator (db::PropertiesTranslator::make_pass_all ()); db::Region r1 (si1); + r1.set_join_properties_on_merge (false); db::RecursiveShapeIterator si2 (ly, top_cell, l2); si2.apply_property_translator (db::PropertiesTranslator::make_pass_all ()); db::Region r2 (si2); + r2.set_join_properties_on_merge (false); db::Layout target; unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index)); @@ -2017,6 +2025,10 @@ TEST(44_SizeWithProperties) target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (20, 0)), r2.sized (200)); target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (21, 0)), r2.sized (250, 50, 2)); + r2.set_join_properties_on_merge (true); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (30, 0)), r2.sized (200)); + target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (31, 0)), r2.sized (250, 50, 2)); + CHECKPOINT(); db::compare_layouts (_this, target, tl::testdata () + "/algo/flat_region_au44.gds"); } diff --git a/src/db/unit_tests/dbRegionTests.cc b/src/db/unit_tests/dbRegionTests.cc index da2c12249..04b3dc90b 100644 --- a/src/db/unit_tests/dbRegionTests.cc +++ b/src/db/unit_tests/dbRegionTests.cc @@ -2069,11 +2069,17 @@ TEST(50_PropertiesFlat) "{}:(10,20;10,220;110,220;110,20)" ); + r.set_join_properties_on_merge (false); EXPECT_EQ (sip2s (r.begin_merged ()), "{id=>1}:(1,2;1,202;101,202;101,2)\n" "{id=>42}:(11,12;11,212;111,212;111,12)\n" "{}:(0,0;0,200;10,200;10,220;110,220;110,20;100,20;100,0)" ); + + r.set_join_properties_on_merge (true); + EXPECT_EQ (sip2s (r.begin_merged ()), + "{id=>42}:(0,0;0,200;1,200;1,202;10,202;10,220;110,220;110,212;111,212;111,12;101,12;101,2;100,2;100,0)" + ); } // "+" operator with properties (issue #1373) @@ -2165,11 +2171,17 @@ TEST(51_PropertiesFlatFromLayout) "{}:(10,20;10,220;110,220;110,20)" ); + r.set_join_properties_on_merge (false); EXPECT_EQ (sip2s (r.begin_merged ()), "{id=>1}:(1,2;1,202;101,202;101,2)\n" "{id=>42}:(11,12;11,212;111,212;111,12)\n" "{}:(0,0;0,200;10,200;10,220;110,220;110,20;100,20;100,0)" ); + + r.set_join_properties_on_merge (true); + EXPECT_EQ (sip2s (r.begin_merged ()), + "{id=>42}:(0,0;0,200;1,200;1,202;10,202;10,220;110,220;110,212;111,212;111,12;101,12;101,2;100,2;100,0)" + ); } TEST(52_PropertiesDeep) diff --git a/testdata/algo/flat_region_au44.gds b/testdata/algo/flat_region_au44.gds index 2484aecb1..daf5df77d 100644 Binary files a/testdata/algo/flat_region_au44.gds and b/testdata/algo/flat_region_au44.gds differ diff --git a/testdata/ruby/dbRegionTest.rb b/testdata/ruby/dbRegionTest.rb index f5dc08881..761fa65a7 100644 --- a/testdata/ruby/dbRegionTest.rb +++ b/testdata/ruby/dbRegionTest.rb @@ -1636,8 +1636,13 @@ class DBRegion_TestClass < TestBase r.insert(RBA::Box::new(10, 20, 110, 220)) s = r.each.collect(&:to_s).join(";") assert_equal(s, "(10,20;10,220;110,220;110,20) props={};(0,0;0,200;100,200;100,0) props={1=>one}") - s = r.each_merged.collect(&:to_s).join(";") + rr = r.dup + rr.join_properties_on_merge = false + assert_equal(rr.join_properties_on_merge, false) + s = rr.each_merged.collect(&:to_s).join(";") assert_equal(s, "(10,20;10,220;110,220;110,20) props={};(0,0;0,200;100,200;100,0) props={1=>one}") + s = r.each_merged.collect(&:to_s).join(";") + assert_equal(s, "(0,0;0,200;10,200;10,220;110,220;110,20;100,20;100,0) props={1=>one}") r = RBA::Region::new r.insert(RBA::BoxWithProperties::new(RBA::Box::new(0, 0, 100, 200), { 1 => "one" })) @@ -1654,6 +1659,8 @@ class DBRegion_TestClass < TestBase r.insert(RBA::PolygonWithProperties::new(RBA::Box::new(0, 0, 100, 200), { "one" => -1 })) r.insert(RBA::PolygonWithProperties::new(RBA::Box::new(1, 1, 101, 201), { "one" => 17 })) r.insert(RBA::PolygonWithProperties::new(RBA::Box::new(2, 2, 102, 202), { "one" => 42 })) + r.join_properties_on_merge = false + assert_equal(r.join_properties_on_merge, false) assert_equal(r.filtered(RBA::PolygonFilter::property_filter("one", 11)).to_s, "") assert_equal(r.filtered(RBA::PolygonFilter::property_filter("two", 17)).to_s, "") @@ -1666,6 +1673,16 @@ class DBRegion_TestClass < TestBase assert_equal(csort(r.filtered(RBA::PolygonFilter::property_glob("one", "1*")).to_s), csort("(1,1;1,201;101,201;101,1){one=>17}")) assert_equal(csort(r.filtered(RBA::PolygonFilter::property_glob("one", "1*", true)).to_s), csort("(2,2;2,202;102,202;102,2){one=>42};(0,0;0,200;100,200;100,0){one=>-1}")) + rr = r.dup + rr.filter(RBA::PolygonFilter::property_filter("one", 17)) + assert_equal(csort(rr.to_s), csort("(1,1;1,201;101,201;101,1){one=>17}")) + + r.join_properties_on_merge = true + assert_equal(r.join_properties_on_merge, true) + assert_equal(csort(r.filtered(RBA::PolygonFilter::property_filter("one", 42)).to_s), csort("(0,0;0,200;1,200;1,201;2,201;2,202;102,202;102,2;101,2;101,1;100,1;100,0){one=>42}")) + + # deep regions + ly = RBA::Layout::new top = ly.create_cell("TOP") l1 = ly.layer(1, 0)