|
|
|
|
@ -110,7 +110,7 @@ std::string p2s (const db::Cell &c)
|
|
|
|
|
if (! r.empty ()) {
|
|
|
|
|
r += ",";
|
|
|
|
|
}
|
|
|
|
|
r += tl::to_string (p->inst ().object ().cell_index ()) + "[" + p->inst ().complex_trans ().to_string () + "]" + "#" + tl::to_string (p->child_inst ().prop_id ());
|
|
|
|
|
r += tl::to_string (p->inst ().object ().cell_index ()) + "[" + p->inst ().complex_trans ().to_string () + "]" + "#" + db::properties (p->child_inst ().prop_id ()).to_dict_var ().to_string ();
|
|
|
|
|
}
|
|
|
|
|
return r;
|
|
|
|
|
}
|
|
|
|
|
@ -152,7 +152,7 @@ struct c2s_compare
|
|
|
|
|
return p1->complex_trans () < p2->complex_trans ();
|
|
|
|
|
}
|
|
|
|
|
if (p1->prop_id () != p2->prop_id ()) {
|
|
|
|
|
return p1->prop_id () < p2->prop_id ();
|
|
|
|
|
return db::properties (p1->prop_id ()).to_map () < db::properties (p2->prop_id ()).to_map ();
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
@ -171,7 +171,7 @@ std::string c2s (const db::Cell &c)
|
|
|
|
|
if (! r.empty ()) {
|
|
|
|
|
r += ",";
|
|
|
|
|
}
|
|
|
|
|
r += tl::to_string (p->cell_index ()) + "[" + p->complex_trans ().to_string () + "]" + "#" + tl::to_string (p->prop_id ());
|
|
|
|
|
r += tl::to_string (p->cell_index ()) + "[" + p->complex_trans ().to_string () + "]" + "#" + db::properties (p->prop_id ()).to_dict_var ().to_string ();
|
|
|
|
|
}
|
|
|
|
|
return r;
|
|
|
|
|
}
|
|
|
|
|
@ -183,7 +183,7 @@ std::string c2s_unsorted (const db::Cell &c)
|
|
|
|
|
if (! r.empty ()) {
|
|
|
|
|
r += ",";
|
|
|
|
|
}
|
|
|
|
|
r += tl::to_string (p->cell_index ()) + "[" + p->complex_trans ().to_string () + "]" + "#" + tl::to_string (p->prop_id ());
|
|
|
|
|
r += tl::to_string (p->cell_index ()) + "[" + p->complex_trans ().to_string () + "]" + "#" + db::properties (p->prop_id ()).to_dict_var ().to_string ();
|
|
|
|
|
}
|
|
|
|
|
return r;
|
|
|
|
|
}
|
|
|
|
|
@ -199,7 +199,7 @@ struct ct2s_compare
|
|
|
|
|
return p1->complex_trans () < p2->complex_trans ();
|
|
|
|
|
}
|
|
|
|
|
if (p1->prop_id () != p2->prop_id ()) {
|
|
|
|
|
return p1->prop_id () < p2->prop_id ();
|
|
|
|
|
return db::properties (p1->prop_id ()).to_map () < db::properties (p2->prop_id ()).to_map ();
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
@ -218,7 +218,7 @@ std::string ct2s (const db::Cell &c)
|
|
|
|
|
if (! r.empty ()) {
|
|
|
|
|
r += ",";
|
|
|
|
|
}
|
|
|
|
|
r += tl::to_string (p->cell_index ()) + "[" + p->complex_trans ().to_string () + "]" + "#" + tl::to_string (p->prop_id ());
|
|
|
|
|
r += tl::to_string (p->cell_index ()) + "[" + p->complex_trans ().to_string () + "]" + "#" + db::properties (p->prop_id ()).to_dict_var ().to_string ();
|
|
|
|
|
}
|
|
|
|
|
return r;
|
|
|
|
|
}
|
|
|
|
|
@ -253,10 +253,13 @@ static unsigned int pi = 0;
|
|
|
|
|
|
|
|
|
|
void insert_ci (db::Cell &c, size_t ci, const db::Trans &t)
|
|
|
|
|
{
|
|
|
|
|
db::PropertiesSet props;
|
|
|
|
|
props.insert (tl::Variant ("id"), pi);
|
|
|
|
|
db::properties_id_type pid = db::properties_id (props);
|
|
|
|
|
if (pi == 0) {
|
|
|
|
|
c.insert (db::CellInstArray (db::CellInst (db::cell_index_type (ci)), t));
|
|
|
|
|
} else {
|
|
|
|
|
c.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (db::cell_index_type (ci)), t), pi));
|
|
|
|
|
c.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (db::cell_index_type (ci)), t), pid));
|
|
|
|
|
}
|
|
|
|
|
pi = (pi + 1) % 3;
|
|
|
|
|
}
|
|
|
|
|
@ -265,6 +268,18 @@ TEST(2)
|
|
|
|
|
{
|
|
|
|
|
::pi = 0;
|
|
|
|
|
|
|
|
|
|
db::PropertiesSet props;
|
|
|
|
|
props.insert (tl::Variant ("id"), 17);
|
|
|
|
|
db::properties_id_type pid17 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
props.clear ();
|
|
|
|
|
props.insert (tl::Variant ("id"), 11);
|
|
|
|
|
db::properties_id_type pid11 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
props.clear ();
|
|
|
|
|
props.insert (tl::Variant ("id"), 13);
|
|
|
|
|
db::properties_id_type pid13 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
db::Manager m (true);
|
|
|
|
|
db::Layout g (&m);
|
|
|
|
|
db::Cell &c0 (g.cell (g.add_cell ()));
|
|
|
|
|
@ -290,28 +305,28 @@ TEST(2)
|
|
|
|
|
insert_ci (c4, c5.cell_index (), t);
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (p2s(c0), "");
|
|
|
|
|
EXPECT_EQ (p2s(c1), "0[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (p2s(c2), "1[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (p2s(c3), "2[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (p2s(c4), "3[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (p2s(c5), "4[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (p2s(c1), "0[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (p2s(c2), "1[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (p2s(c3), "2[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (p2s(c4), "3[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (p2s(c5), "4[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (pc2s(c0), "");
|
|
|
|
|
EXPECT_EQ (pc2s(c1), "0");
|
|
|
|
|
EXPECT_EQ (pc2s(c2), "1");
|
|
|
|
|
EXPECT_EQ (pc2s(c3), "2");
|
|
|
|
|
EXPECT_EQ (pc2s(c4), "3");
|
|
|
|
|
EXPECT_EQ (pc2s(c5), "4");
|
|
|
|
|
EXPECT_EQ (c2s(c0), "1[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (c2s(c1), "2[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s(c2), "3[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s(c3), "4[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (c2s(c4), "5[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s(c0), "1[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (c2s(c1), "2[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (c2s(c2), "3[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s(c3), "4[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (c2s(c4), "5[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (c2s(c5), "");
|
|
|
|
|
EXPECT_EQ (ct2s(c0), "1[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (ct2s(c1), "2[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (ct2s(c2), "3[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (ct2s(c3), "4[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (ct2s(c4), "5[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (ct2s(c0), "1[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (ct2s(c1), "2[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (ct2s(c2), "3[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (ct2s(c3), "4[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (ct2s(c4), "5[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (ct2s(c5), "");
|
|
|
|
|
EXPECT_EQ (cc2s(c0), "1");
|
|
|
|
|
EXPECT_EQ (cc2s(c1), "2");
|
|
|
|
|
@ -325,28 +340,28 @@ TEST(2)
|
|
|
|
|
insert_ci (c2, c4.cell_index (), t);
|
|
|
|
|
insert_ci (c3, c5.cell_index (), t);
|
|
|
|
|
EXPECT_EQ (p2s(c0), "");
|
|
|
|
|
EXPECT_EQ (p2s(c1), "0[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (p2s(c2), "0[r0 *1 0,0]#2,1[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (p2s(c3), "1[r0 *1 0,0]#0,2[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (p2s(c4), "2[r0 *1 0,0]#1,3[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (p2s(c5), "3[r0 *1 0,0]#2,4[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (p2s(c1), "0[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (p2s(c2), "0[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (p2s(c3), "1[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (p2s(c4), "2[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (p2s(c5), "3[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (pc2s(c0), "");
|
|
|
|
|
EXPECT_EQ (pc2s(c1), "0");
|
|
|
|
|
EXPECT_EQ (pc2s(c2), "0,1");
|
|
|
|
|
EXPECT_EQ (pc2s(c3), "1,2");
|
|
|
|
|
EXPECT_EQ (pc2s(c4), "2,3");
|
|
|
|
|
EXPECT_EQ (pc2s(c5), "3,4");
|
|
|
|
|
EXPECT_EQ (c2s(c0), "1[r0 *1 0,0]#0,2[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s(c1), "2[r0 *1 0,0]#1,3[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (c2s(c2), "3[r0 *1 0,0]#2,4[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s(c3), "4[r0 *1 0,0]#0,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s(c4), "5[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s(c0), "1[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s(c1), "2[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (c2s(c2), "3[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (c2s(c3), "4[r0 *1 0,0]#{},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s(c4), "5[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (c2s(c5), "");
|
|
|
|
|
EXPECT_EQ (ct2s(c0), "1[r0 *1 0,0]#0,2[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (ct2s(c1), "2[r0 *1 0,0]#1,3[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (ct2s(c2), "3[r0 *1 0,0]#2,4[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (ct2s(c3), "4[r0 *1 0,0]#0,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (ct2s(c4), "5[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (ct2s(c0), "1[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (ct2s(c1), "2[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (ct2s(c2), "3[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (ct2s(c3), "4[r0 *1 0,0]#{},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (ct2s(c4), "5[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (ct2s(c5), "");
|
|
|
|
|
EXPECT_EQ (cc2s(c0), "1,2");
|
|
|
|
|
EXPECT_EQ (cc2s(c1), "2,3");
|
|
|
|
|
@ -359,28 +374,28 @@ TEST(2)
|
|
|
|
|
insert_ci (c1, c4.cell_index (), t);
|
|
|
|
|
insert_ci (c2, c5.cell_index (), t);
|
|
|
|
|
EXPECT_EQ (p2s(c0), "");
|
|
|
|
|
EXPECT_EQ (p2s(c1), "0[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (p2s(c2), "0[r0 *1 0,0]#2,1[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (p2s(c3), "0[r0 *1 0,0]#0,1[r0 *1 0,0]#0,2[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (p2s(c4), "1[r0 *1 0,0]#1,2[r0 *1 0,0]#1,3[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (p2s(c5), "2[r0 *1 0,0]#2,3[r0 *1 0,0]#2,4[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (p2s(c1), "0[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (p2s(c2), "0[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (p2s(c3), "0[r0 *1 0,0]#{},1[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (p2s(c4), "1[r0 *1 0,0]#{id=>1},2[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (p2s(c5), "2[r0 *1 0,0]#{id=>2},3[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (pc2s(c0), "");
|
|
|
|
|
EXPECT_EQ (pc2s(c1), "0");
|
|
|
|
|
EXPECT_EQ (pc2s(c2), "0,1");
|
|
|
|
|
EXPECT_EQ (pc2s(c3), "0,1,2");
|
|
|
|
|
EXPECT_EQ (pc2s(c4), "1,2,3");
|
|
|
|
|
EXPECT_EQ (pc2s(c5), "2,3,4");
|
|
|
|
|
EXPECT_EQ (c2s(c0), "1[r0 *1 0,0]#0,2[r0 *1 0,0]#2,3[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (c2s(c1), "2[r0 *1 0,0]#1,3[r0 *1 0,0]#0,4[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s(c2), "3[r0 *1 0,0]#2,4[r0 *1 0,0]#1,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s(c3), "4[r0 *1 0,0]#0,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s(c4), "5[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s(c0), "1[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>2},3[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (c2s(c1), "2[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (c2s(c2), "3[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s(c3), "4[r0 *1 0,0]#{},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s(c4), "5[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (c2s(c5), "");
|
|
|
|
|
EXPECT_EQ (ct2s(c0), "1[r0 *1 0,0]#0,2[r0 *1 0,0]#2,3[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (ct2s(c1), "2[r0 *1 0,0]#1,3[r0 *1 0,0]#0,4[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (ct2s(c2), "3[r0 *1 0,0]#2,4[r0 *1 0,0]#1,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (ct2s(c3), "4[r0 *1 0,0]#0,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (ct2s(c4), "5[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (ct2s(c0), "1[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>2},3[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (ct2s(c1), "2[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (ct2s(c2), "3[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (ct2s(c3), "4[r0 *1 0,0]#{},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (ct2s(c4), "5[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (ct2s(c5), "");
|
|
|
|
|
EXPECT_EQ (cc2s(c0), "1,2,3");
|
|
|
|
|
EXPECT_EQ (cc2s(c1), "2,3,4");
|
|
|
|
|
@ -392,28 +407,28 @@ TEST(2)
|
|
|
|
|
insert_ci (c0, c4.cell_index (), t);
|
|
|
|
|
insert_ci (c1, c5.cell_index (), t);
|
|
|
|
|
EXPECT_EQ (p2s(c0), "");
|
|
|
|
|
EXPECT_EQ (p2s(c1), "0[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (p2s(c2), "0[r0 *1 0,0]#2,1[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (p2s(c3), "0[r0 *1 0,0]#0,1[r0 *1 0,0]#0,2[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (p2s(c4), "0[r0 *1 0,0]#0,1[r0 *1 0,0]#1,2[r0 *1 0,0]#1,3[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (p2s(c5), "1[r0 *1 0,0]#1,2[r0 *1 0,0]#2,3[r0 *1 0,0]#2,4[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (p2s(c1), "0[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (p2s(c2), "0[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (p2s(c3), "0[r0 *1 0,0]#{},1[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (p2s(c4), "0[r0 *1 0,0]#{},1[r0 *1 0,0]#{id=>1},2[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (p2s(c5), "1[r0 *1 0,0]#{id=>1},2[r0 *1 0,0]#{id=>2},3[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (pc2s(c0), "");
|
|
|
|
|
EXPECT_EQ (pc2s(c1), "0");
|
|
|
|
|
EXPECT_EQ (pc2s(c2), "0,1");
|
|
|
|
|
EXPECT_EQ (pc2s(c3), "0,1,2");
|
|
|
|
|
EXPECT_EQ (pc2s(c4), "0,1,2,3");
|
|
|
|
|
EXPECT_EQ (pc2s(c5), "1,2,3,4");
|
|
|
|
|
EXPECT_EQ (c2s(c0), "1[r0 *1 0,0]#0,2[r0 *1 0,0]#2,3[r0 *1 0,0]#0,4[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (c2s(c1), "2[r0 *1 0,0]#1,3[r0 *1 0,0]#0,4[r0 *1 0,0]#1,5[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s(c2), "3[r0 *1 0,0]#2,4[r0 *1 0,0]#1,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s(c3), "4[r0 *1 0,0]#0,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s(c4), "5[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s(c0), "1[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>2},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (c2s(c1), "2[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (c2s(c2), "3[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s(c3), "4[r0 *1 0,0]#{},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s(c4), "5[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (c2s(c5), "");
|
|
|
|
|
EXPECT_EQ (ct2s(c0), "1[r0 *1 0,0]#0,2[r0 *1 0,0]#2,3[r0 *1 0,0]#0,4[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (ct2s(c1), "2[r0 *1 0,0]#1,3[r0 *1 0,0]#0,4[r0 *1 0,0]#1,5[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (ct2s(c2), "3[r0 *1 0,0]#2,4[r0 *1 0,0]#1,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (ct2s(c3), "4[r0 *1 0,0]#0,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (ct2s(c4), "5[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (ct2s(c0), "1[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>2},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (ct2s(c1), "2[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (ct2s(c2), "3[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (ct2s(c3), "4[r0 *1 0,0]#{},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (ct2s(c4), "5[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (ct2s(c5), "");
|
|
|
|
|
EXPECT_EQ (cc2s(c0), "1,2,3,4");
|
|
|
|
|
EXPECT_EQ (cc2s(c1), "2,3,4,5");
|
|
|
|
|
@ -424,28 +439,28 @@ TEST(2)
|
|
|
|
|
|
|
|
|
|
insert_ci (c0, c5.cell_index (), t);
|
|
|
|
|
EXPECT_EQ (p2s(c0), "");
|
|
|
|
|
EXPECT_EQ (p2s(c1), "0[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (p2s(c2), "0[r0 *1 0,0]#2,1[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (p2s(c3), "0[r0 *1 0,0]#0,1[r0 *1 0,0]#0,2[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (p2s(c4), "0[r0 *1 0,0]#0,1[r0 *1 0,0]#1,2[r0 *1 0,0]#1,3[r0 *1 0,0]#0");
|
|
|
|
|
EXPECT_EQ (p2s(c5), "0[r0 *1 0,0]#2,1[r0 *1 0,0]#1,2[r0 *1 0,0]#2,3[r0 *1 0,0]#2,4[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (p2s(c1), "0[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (p2s(c2), "0[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (p2s(c3), "0[r0 *1 0,0]#{},1[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (p2s(c4), "0[r0 *1 0,0]#{},1[r0 *1 0,0]#{id=>1},2[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{}");
|
|
|
|
|
EXPECT_EQ (p2s(c5), "0[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1},2[r0 *1 0,0]#{id=>2},3[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (pc2s(c0), "");
|
|
|
|
|
EXPECT_EQ (pc2s(c1), "0");
|
|
|
|
|
EXPECT_EQ (pc2s(c2), "0,1");
|
|
|
|
|
EXPECT_EQ (pc2s(c3), "0,1,2");
|
|
|
|
|
EXPECT_EQ (pc2s(c4), "0,1,2,3");
|
|
|
|
|
EXPECT_EQ (pc2s(c5), "0,1,2,3,4");
|
|
|
|
|
EXPECT_EQ (c2s(c0), "1[r0 *1 0,0]#0,2[r0 *1 0,0]#2,3[r0 *1 0,0]#0,4[r0 *1 0,0]#0,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s(c1), "2[r0 *1 0,0]#1,3[r0 *1 0,0]#0,4[r0 *1 0,0]#1,5[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s(c2), "3[r0 *1 0,0]#2,4[r0 *1 0,0]#1,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s(c3), "4[r0 *1 0,0]#0,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s(c4), "5[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s(c0), "1[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>2},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s(c1), "2[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (c2s(c2), "3[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s(c3), "4[r0 *1 0,0]#{},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s(c4), "5[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (c2s(c5), "");
|
|
|
|
|
EXPECT_EQ (ct2s(c0), "1[r0 *1 0,0]#0,2[r0 *1 0,0]#2,3[r0 *1 0,0]#0,4[r0 *1 0,0]#0,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (ct2s(c1), "2[r0 *1 0,0]#1,3[r0 *1 0,0]#0,4[r0 *1 0,0]#1,5[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (ct2s(c2), "3[r0 *1 0,0]#2,4[r0 *1 0,0]#1,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (ct2s(c3), "4[r0 *1 0,0]#0,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (ct2s(c4), "5[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (ct2s(c0), "1[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>2},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (ct2s(c1), "2[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (ct2s(c2), "3[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (ct2s(c3), "4[r0 *1 0,0]#{},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (ct2s(c4), "5[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (ct2s(c5), "");
|
|
|
|
|
EXPECT_EQ (cc2s(c0), "1,2,3,4,5");
|
|
|
|
|
EXPECT_EQ (cc2s(c1), "2,3,4,5");
|
|
|
|
|
@ -461,34 +476,34 @@ TEST(2)
|
|
|
|
|
insert_ci (c3, c4.cell_index (), t);
|
|
|
|
|
insert_ci (c4, c5.cell_index (), t);
|
|
|
|
|
EXPECT_EQ (p2s(c0), "");
|
|
|
|
|
EXPECT_EQ (p2s(c1), "0[r0 *1 0,0]#0,0[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (p2s(c2), "0[r0 *1 0,0]#2,1[r0 *1 0,0]#1,1[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (p2s(c3), "0[r0 *1 0,0]#0,1[r0 *1 0,0]#0,2[r0 *1 0,0]#0,2[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (p2s(c4), "0[r0 *1 0,0]#0,1[r0 *1 0,0]#1,2[r0 *1 0,0]#1,3[r0 *1 0,0]#0,3[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (p2s(c5), "0[r0 *1 0,0]#2,1[r0 *1 0,0]#1,2[r0 *1 0,0]#2,3[r0 *1 0,0]#2,4[r0 *1 0,0]#1,4[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (p2s(c1), "0[r0 *1 0,0]#{},0[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (p2s(c2), "0[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1},1[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (p2s(c3), "0[r0 *1 0,0]#{},1[r0 *1 0,0]#{},2[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (p2s(c4), "0[r0 *1 0,0]#{},1[r0 *1 0,0]#{id=>1},2[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{},3[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (p2s(c5), "0[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1},2[r0 *1 0,0]#{id=>2},3[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1},4[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (pc2s(c0), "");
|
|
|
|
|
EXPECT_EQ (pc2s(c1), "0");
|
|
|
|
|
EXPECT_EQ (pc2s(c2), "0,1");
|
|
|
|
|
EXPECT_EQ (pc2s(c3), "0,1,2");
|
|
|
|
|
EXPECT_EQ (pc2s(c4), "0,1,2,3");
|
|
|
|
|
EXPECT_EQ (pc2s(c5), "0,1,2,3,4");
|
|
|
|
|
EXPECT_EQ (c2s(c0), "1[r0 *1 0,0]#0,1[r0 *1 0,0]#1,2[r0 *1 0,0]#2,3[r0 *1 0,0]#0,4[r0 *1 0,0]#0,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s(c1), "2[r0 *1 0,0]#1,2[r0 *1 0,0]#2,3[r0 *1 0,0]#0,4[r0 *1 0,0]#1,5[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s(c2), "3[r0 *1 0,0]#0,3[r0 *1 0,0]#2,4[r0 *1 0,0]#1,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s(c3), "4[r0 *1 0,0]#0,4[r0 *1 0,0]#1,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s(c4), "5[r0 *1 0,0]#1,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s(c0), "1[r0 *1 0,0]#{},1[r0 *1 0,0]#{id=>1},2[r0 *1 0,0]#{id=>2},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s(c1), "2[r0 *1 0,0]#{id=>1},2[r0 *1 0,0]#{id=>2},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (c2s(c2), "3[r0 *1 0,0]#{},3[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s(c3), "4[r0 *1 0,0]#{},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s(c4), "5[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s(c5), "");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#0,3[r0 *1 0,0]#0,4[r0 *1 0,0]#0,2[r0 *1 0,0]#2,5[r0 *1 0,0]#2,1[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c1), "3[r0 *1 0,0]#0,2[r0 *1 0,0]#1,4[r0 *1 0,0]#1,5[r0 *1 0,0]#1,2[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c2), "3[r0 *1 0,0]#0,3[r0 *1 0,0]#2,4[r0 *1 0,0]#1,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c3), "4[r0 *1 0,0]#0,5[r0 *1 0,0]#2,4[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c4), "5[r0 *1 0,0]#1,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#{},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>2},5[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c1), "3[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>1},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>1},2[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c2), "3[r0 *1 0,0]#{},3[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c3), "4[r0 *1 0,0]#{},5[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c4), "5[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c5), "");
|
|
|
|
|
EXPECT_EQ (ct2s(c0), "1[r0 *1 0,0]#0,1[r0 *1 0,0]#1,2[r0 *1 0,0]#2,3[r0 *1 0,0]#0,4[r0 *1 0,0]#0,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (ct2s(c1), "2[r0 *1 0,0]#1,2[r0 *1 0,0]#2,3[r0 *1 0,0]#0,4[r0 *1 0,0]#1,5[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (ct2s(c2), "3[r0 *1 0,0]#0,3[r0 *1 0,0]#2,4[r0 *1 0,0]#1,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (ct2s(c3), "4[r0 *1 0,0]#0,4[r0 *1 0,0]#1,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (ct2s(c4), "5[r0 *1 0,0]#1,5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (ct2s(c0), "1[r0 *1 0,0]#{},1[r0 *1 0,0]#{id=>1},2[r0 *1 0,0]#{id=>2},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (ct2s(c1), "2[r0 *1 0,0]#{id=>1},2[r0 *1 0,0]#{id=>2},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (ct2s(c2), "3[r0 *1 0,0]#{},3[r0 *1 0,0]#{id=>2},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (ct2s(c3), "4[r0 *1 0,0]#{},4[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (ct2s(c4), "5[r0 *1 0,0]#{id=>1},5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (ct2s(c5), "");
|
|
|
|
|
EXPECT_EQ (cc2s(c0), "1,2,3,4,5");
|
|
|
|
|
EXPECT_EQ (cc2s(c1), "2,3,4,5");
|
|
|
|
|
@ -498,22 +513,22 @@ TEST(2)
|
|
|
|
|
EXPECT_EQ (cc2s(c5), "");
|
|
|
|
|
|
|
|
|
|
db::Cell::const_iterator inst = c0.begin ();
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#0,3[r0 *1 0,0]#0,4[r0 *1 0,0]#0,2[r0 *1 0,0]#2,5[r0 *1 0,0]#2,1[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#{},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>2},5[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
db::Trans t1 (1, db::Vector (100, -200));
|
|
|
|
|
c0.replace (*inst, db::CellInstArray (db::CellInst (c2.cell_index ()), t1));
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "2[r90 *1 100,-200]#0,3[r0 *1 0,0]#0,4[r0 *1 0,0]#0,2[r0 *1 0,0]#2,5[r0 *1 0,0]#2,1[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "2[r90 *1 100,-200]#{},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>2},5[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
++inst;
|
|
|
|
|
++inst;
|
|
|
|
|
++inst;
|
|
|
|
|
c0.replace (*inst, db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c3.cell_index ()), t1), 17));
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "2[r90 *1 100,-200]#0,3[r0 *1 0,0]#0,4[r0 *1 0,0]#0,3[r90 *1 100,-200]#17,5[r0 *1 0,0]#2,1[r0 *1 0,0]#1");
|
|
|
|
|
c0.replace_prop_id (*inst, 11);
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "2[r90 *1 100,-200]#0,3[r0 *1 0,0]#0,4[r0 *1 0,0]#0,3[r90 *1 100,-200]#11,5[r0 *1 0,0]#2,1[r0 *1 0,0]#1");
|
|
|
|
|
c0.replace (*inst, db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c3.cell_index ()), t1), pid17));
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "2[r90 *1 100,-200]#{},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{},3[r90 *1 100,-200]#{id=>17},5[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
c0.replace_prop_id (*inst, pid11);
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "2[r90 *1 100,-200]#{},3[r0 *1 0,0]#{},4[r0 *1 0,0]#{},3[r90 *1 100,-200]#{id=>11},5[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
inst = c0.begin ();
|
|
|
|
|
|
|
|
|
|
// replace a non-property array with one with properties:
|
|
|
|
|
c0.replace (*inst, db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c3.cell_index ()), db::Trans ()), 13));
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "3[r0 *1 0,0]#0,4[r0 *1 0,0]#0,3[r90 *1 100,-200]#11,5[r0 *1 0,0]#2,1[r0 *1 0,0]#1,3[r0 *1 0,0]#13");
|
|
|
|
|
c0.replace (*inst, db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c3.cell_index ()), db::Trans ()), pid13));
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "3[r0 *1 0,0]#{},4[r0 *1 0,0]#{},3[r90 *1 100,-200]#{id=>11},5[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{id=>13}");
|
|
|
|
|
|
|
|
|
|
db::Cell &cx = g.cell (g.add_cell (g.cell_name (c0.cell_index ())));
|
|
|
|
|
|
|
|
|
|
@ -522,21 +537,21 @@ TEST(2)
|
|
|
|
|
db::Instance i0 = *inst;
|
|
|
|
|
c0.erase (inst);
|
|
|
|
|
// HINT: doing a c2s_unsorted on c0 would disturb the index order of c0, because it uses a flat
|
|
|
|
|
// iterator. Therefore we make a copy in order to prevent that problem. See bug #120.
|
|
|
|
|
// iterator. Therefore we make a copy in order to prevent that problem. See bug #{id=>120}.
|
|
|
|
|
cx = c0;
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(cx), "4[r0 *1 0,0]#0,3[r90 *1 100,-200]#11,5[r0 *1 0,0]#2,1[r0 *1 0,0]#1,3[r0 *1 0,0]#13");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(cx), "4[r0 *1 0,0]#{},3[r90 *1 100,-200]#{id=>11},5[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{id=>13}");
|
|
|
|
|
EXPECT_EQ (c0.cell_instances (), size_t (5));
|
|
|
|
|
// not yet: EXPECT_EQ (c0.empty (), false);
|
|
|
|
|
inst = c0.begin ();
|
|
|
|
|
db::Instance i1 = *inst;
|
|
|
|
|
c0.erase (inst);
|
|
|
|
|
cx = c0;
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(cx), "3[r90 *1 100,-200]#11,5[r0 *1 0,0]#2,1[r0 *1 0,0]#1,3[r0 *1 0,0]#13");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(cx), "3[r90 *1 100,-200]#{id=>11},5[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{id=>13}");
|
|
|
|
|
inst = c0.begin ();
|
|
|
|
|
db::Instance i2 = *inst;
|
|
|
|
|
c0.erase (inst);
|
|
|
|
|
cx = c0;
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(cx), "5[r0 *1 0,0]#2,1[r0 *1 0,0]#1,3[r0 *1 0,0]#13");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(cx), "5[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{id=>13}");
|
|
|
|
|
inst = c0.begin ();
|
|
|
|
|
db::Instance i3 = *inst;
|
|
|
|
|
db::Instance i4 = *++inst;
|
|
|
|
|
@ -571,10 +586,10 @@ TEST(2)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
c0.erase (i5);
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "5[r0 *1 0,0]#2,1[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "5[r0 *1 0,0]#{id=>2},1[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
EXPECT_EQ (c0.cell_instances (), size_t (2));
|
|
|
|
|
c0.erase (i4);
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "5[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "5[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
EXPECT_EQ (c0.cell_instances (), size_t (1));
|
|
|
|
|
// Not yet: EXPECT_EQ (c0.empty (), false);
|
|
|
|
|
|
|
|
|
|
@ -615,6 +630,26 @@ TEST(3)
|
|
|
|
|
{
|
|
|
|
|
::pi = 0;
|
|
|
|
|
|
|
|
|
|
db::PropertiesSet props;
|
|
|
|
|
props.insert (tl::Variant ("id"), 17);
|
|
|
|
|
db::properties_id_type pid17 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
props.clear ();
|
|
|
|
|
props.insert (tl::Variant ("id"), 18);
|
|
|
|
|
db::properties_id_type pid18 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
props.clear ();
|
|
|
|
|
props.insert (tl::Variant ("id"), 21);
|
|
|
|
|
db::properties_id_type pid21 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
props.clear ();
|
|
|
|
|
props.insert (tl::Variant ("id"), 1);
|
|
|
|
|
db::properties_id_type pid1 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
props.clear ();
|
|
|
|
|
props.insert (tl::Variant ("id"), 10);
|
|
|
|
|
db::properties_id_type pid10 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
db::Manager m (true);
|
|
|
|
|
db::Layout g (&m);
|
|
|
|
|
db::Cell &c0 (g.cell (g.add_cell ()));
|
|
|
|
|
@ -627,10 +662,10 @@ TEST(3)
|
|
|
|
|
db::Trans t1;
|
|
|
|
|
db::Trans t2 (db::Vector (100, -100));
|
|
|
|
|
c0.insert (db::CellInstArray (db::CellInst (c1.cell_index ()), t1));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), t1), 1));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), t2), 10));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), t1), pid1));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), t2), pid10));
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#0,1[r0 *1 0,0]#1,1[r0 *1 100,-100]#10");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#{},1[r0 *1 0,0]#{id=>1},1[r0 *1 100,-100]#{id=>10}");
|
|
|
|
|
|
|
|
|
|
db::Cell::const_iterator i = c0.begin ();
|
|
|
|
|
++i; ++i;
|
|
|
|
|
@ -639,10 +674,10 @@ TEST(3)
|
|
|
|
|
EXPECT_EQ (i.at_end (), true);
|
|
|
|
|
|
|
|
|
|
c0.erase (i2);
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#0,1[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#{},1[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), t2), 17));
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#0,1[r0 *1 0,0]#1,1[r0 *1 100,-100]#17");
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), t2), pid17));
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#{},1[r0 *1 0,0]#{id=>1},1[r0 *1 100,-100]#{id=>17}");
|
|
|
|
|
|
|
|
|
|
i = c0.begin ();
|
|
|
|
|
++i; ++i;
|
|
|
|
|
@ -650,11 +685,11 @@ TEST(3)
|
|
|
|
|
++i;
|
|
|
|
|
|
|
|
|
|
c0.erase (inst2);
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#0,1[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#{},1[r0 *1 0,0]#{id=>1}");
|
|
|
|
|
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), t2), 18));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), t2), 21));
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#0,1[r0 *1 0,0]#1,1[r0 *1 100,-100]#18,1[r0 *1 100,-100]#21");
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), t2), pid18));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), t2), pid21));
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#{},1[r0 *1 0,0]#{id=>1},1[r0 *1 100,-100]#{id=>18},1[r0 *1 100,-100]#{id=>21}");
|
|
|
|
|
|
|
|
|
|
i = c0.begin ();
|
|
|
|
|
std::vector<db::Instance> insts;
|
|
|
|
|
@ -665,7 +700,7 @@ TEST(3)
|
|
|
|
|
std::sort (insts.begin (), insts.end ());
|
|
|
|
|
|
|
|
|
|
c0.erase_insts (insts);
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#1,1[r0 *1 100,-100]#21");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#{id=>1},1[r0 *1 100,-100]#{id=>21}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(3a)
|
|
|
|
|
@ -736,16 +771,24 @@ TEST(3b)
|
|
|
|
|
{
|
|
|
|
|
::pi = 0;
|
|
|
|
|
|
|
|
|
|
db::PropertiesSet props;
|
|
|
|
|
props.insert (tl::Variant ("id"), 5);
|
|
|
|
|
db::properties_id_type pid5 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
props.clear ();
|
|
|
|
|
props.insert (tl::Variant ("id"), 17);
|
|
|
|
|
db::properties_id_type pid17 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
db::Manager m (true);
|
|
|
|
|
db::Layout g (&m);
|
|
|
|
|
db::Cell &c0 (g.cell (g.add_cell ()));
|
|
|
|
|
db::Cell &c1 (g.cell (g.add_cell ()));
|
|
|
|
|
|
|
|
|
|
db::Trans t (db::Vector (100, -100));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), t), 5));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), t), pid5));
|
|
|
|
|
|
|
|
|
|
db::Box b (0, 100, 1000, 1200);
|
|
|
|
|
c0.shapes (0).insert (db::BoxWithProperties (b, 17));
|
|
|
|
|
c0.shapes (0).insert (db::BoxWithProperties (b, pid17));
|
|
|
|
|
c1.shapes (1).insert (b);
|
|
|
|
|
|
|
|
|
|
// Note: this requires editable mode since db::Shapes::erase is permitted in editable mode only
|
|
|
|
|
@ -758,42 +801,42 @@ TEST(3b)
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c1.cell_instances (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c0.cell_instances (), size_t (1));
|
|
|
|
|
EXPECT_EQ (c0.begin ()->to_string (), "cell_index=1 r0 250,-250 prop_id=5");
|
|
|
|
|
EXPECT_EQ (c0.begin ()->to_string (), "cell_index=1 r0 250,-250 props={id=>5}");
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).size (), size_t (1));
|
|
|
|
|
EXPECT_EQ (c0.shapes (1).size (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c1.shapes (0).size (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c1.shapes (1).size (), size_t (1));
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).begin (db::ShapeIterator::All)->to_string (), "box (0,250;2500,3000) prop_id=17");
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).begin (db::ShapeIterator::All)->to_string (), "box (0,250;2500,3000) props={id=>17}");
|
|
|
|
|
EXPECT_EQ (c1.shapes (1).begin (db::ShapeIterator::All)->to_string (), "box (0,250;2500,3000)");
|
|
|
|
|
|
|
|
|
|
m.undo ();
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c1.cell_instances (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c0.cell_instances (), size_t (1));
|
|
|
|
|
EXPECT_EQ (c0.begin ()->to_string (), "cell_index=1 r0 100,-100 prop_id=5");
|
|
|
|
|
EXPECT_EQ (c0.begin ()->to_string (), "cell_index=1 r0 100,-100 props={id=>5}");
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).size (), size_t (1));
|
|
|
|
|
EXPECT_EQ (c0.shapes (1).size (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c1.shapes (0).size (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c1.shapes (1).size (), size_t (1));
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).begin (db::ShapeIterator::All)->to_string (), "box (0,100;1000,1200) prop_id=17");
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).begin (db::ShapeIterator::All)->to_string (), "box (0,100;1000,1200) props={id=>17}");
|
|
|
|
|
EXPECT_EQ (c1.shapes (1).begin (db::ShapeIterator::All)->to_string (), "box (0,100;1000,1200)");
|
|
|
|
|
|
|
|
|
|
m.redo ();
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c1.cell_instances (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c0.cell_instances (), size_t (1));
|
|
|
|
|
EXPECT_EQ (c0.begin ()->to_string (), "cell_index=1 r0 250,-250 prop_id=5");
|
|
|
|
|
EXPECT_EQ (c0.begin ()->to_string (), "cell_index=1 r0 250,-250 props={id=>5}");
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).size (), size_t (1));
|
|
|
|
|
EXPECT_EQ (c0.shapes (1).size (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c1.shapes (0).size (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c1.shapes (1).size (), size_t (1));
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).begin (db::ShapeIterator::All)->to_string (), "box (0,250;2500,3000) prop_id=17");
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).begin (db::ShapeIterator::All)->to_string (), "box (0,250;2500,3000) props={id=>17}");
|
|
|
|
|
EXPECT_EQ (c1.shapes (1).begin (db::ShapeIterator::All)->to_string (), "box (0,250;2500,3000)");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
@ -803,16 +846,24 @@ TEST(3c)
|
|
|
|
|
{
|
|
|
|
|
::pi = 0;
|
|
|
|
|
|
|
|
|
|
db::PropertiesSet props;
|
|
|
|
|
props.insert (tl::Variant ("id"), 5);
|
|
|
|
|
db::properties_id_type pid5 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
props.clear ();
|
|
|
|
|
props.insert (tl::Variant ("id"), 17);
|
|
|
|
|
db::properties_id_type pid17 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
db::Manager m (true);
|
|
|
|
|
db::Layout g (&m);
|
|
|
|
|
db::Cell &c0 (g.cell (g.add_cell ()));
|
|
|
|
|
db::Cell &c1 (g.cell (g.add_cell ()));
|
|
|
|
|
|
|
|
|
|
db::Trans t (db::Vector (100, -100));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), t), 5));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), t), pid5));
|
|
|
|
|
|
|
|
|
|
db::Box b (0, 100, 1000, 1200);
|
|
|
|
|
c0.shapes (0).insert (db::BoxWithProperties (b, 17));
|
|
|
|
|
c0.shapes (0).insert (db::BoxWithProperties (b, pid17));
|
|
|
|
|
c1.shapes (1).insert (b);
|
|
|
|
|
|
|
|
|
|
// Note: this requires editable mode since db::Shapes::erase is permitted in editable mode only
|
|
|
|
|
@ -825,42 +876,42 @@ TEST(3c)
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c1.cell_instances (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c0.cell_instances (), size_t (1));
|
|
|
|
|
EXPECT_EQ (c0.begin ()->to_string (), "cell_index=1 r0 *2.5 250,-250 prop_id=5");
|
|
|
|
|
EXPECT_EQ (c0.begin ()->to_string (), "cell_index=1 r0 *2.5 250,-250 props={id=>5}");
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).size (), size_t (1));
|
|
|
|
|
EXPECT_EQ (c0.shapes (1).size (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c1.shapes (0).size (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c1.shapes (1).size (), size_t (1));
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).begin (db::ShapeIterator::All)->to_string (), "box (0,250;2500,3000) prop_id=17");
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).begin (db::ShapeIterator::All)->to_string (), "box (0,250;2500,3000) props={id=>17}");
|
|
|
|
|
EXPECT_EQ (c1.shapes (1).begin (db::ShapeIterator::All)->to_string (), "box (0,100;1000,1200)");
|
|
|
|
|
|
|
|
|
|
m.undo ();
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c1.cell_instances (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c0.cell_instances (), size_t (1));
|
|
|
|
|
EXPECT_EQ (c0.begin ()->to_string (), "cell_index=1 r0 100,-100 prop_id=5");
|
|
|
|
|
EXPECT_EQ (c0.begin ()->to_string (), "cell_index=1 r0 100,-100 props={id=>5}");
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).size (), size_t (1));
|
|
|
|
|
EXPECT_EQ (c0.shapes (1).size (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c1.shapes (0).size (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c1.shapes (1).size (), size_t (1));
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).begin (db::ShapeIterator::All)->to_string (), "box (0,100;1000,1200) prop_id=17");
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).begin (db::ShapeIterator::All)->to_string (), "box (0,100;1000,1200) props={id=>17}");
|
|
|
|
|
EXPECT_EQ (c1.shapes (1).begin (db::ShapeIterator::All)->to_string (), "box (0,100;1000,1200)");
|
|
|
|
|
|
|
|
|
|
m.redo ();
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c1.cell_instances (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c0.cell_instances (), size_t (1));
|
|
|
|
|
EXPECT_EQ (c0.begin ()->to_string (), "cell_index=1 r0 *2.5 250,-250 prop_id=5");
|
|
|
|
|
EXPECT_EQ (c0.begin ()->to_string (), "cell_index=1 r0 *2.5 250,-250 props={id=>5}");
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).size (), size_t (1));
|
|
|
|
|
EXPECT_EQ (c0.shapes (1).size (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c1.shapes (0).size (), size_t (0));
|
|
|
|
|
EXPECT_EQ (c1.shapes (1).size (), size_t (1));
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).begin (db::ShapeIterator::All)->to_string (), "box (0,250;2500,3000) prop_id=17");
|
|
|
|
|
EXPECT_EQ (c0.shapes (0).begin (db::ShapeIterator::All)->to_string (), "box (0,250;2500,3000) props={id=>17}");
|
|
|
|
|
EXPECT_EQ (c1.shapes (1).begin (db::ShapeIterator::All)->to_string (), "box (0,100;1000,1200)");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
@ -875,6 +926,14 @@ TEST(4)
|
|
|
|
|
{
|
|
|
|
|
::pi = 0;
|
|
|
|
|
|
|
|
|
|
db::PropertiesSet props;
|
|
|
|
|
props.insert (tl::Variant ("id"), 1);
|
|
|
|
|
db::properties_id_type pid1 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
props.clear ();
|
|
|
|
|
props.insert (tl::Variant ("id"), 10);
|
|
|
|
|
db::properties_id_type pid10 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
db::Manager m (true);
|
|
|
|
|
db::Layout g (&m);
|
|
|
|
|
db::Cell &c0 (g.cell (g.add_cell ()));
|
|
|
|
|
@ -889,23 +948,23 @@ TEST(4)
|
|
|
|
|
db::Trans t1;
|
|
|
|
|
db::Trans t2 (db::Vector (100, -100));
|
|
|
|
|
c0.insert (db::CellInstArray (db::CellInst (c1.cell_index ()), t1));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), t1), 1));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c2.cell_index ()), t2), 10));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), t1), pid1));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c2.cell_index ()), t2), pid10));
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#0,1[r0 *1 0,0]#1,2[r0 *1 100,-100]#10");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#{},1[r0 *1 0,0]#{id=>1},2[r0 *1 100,-100]#{id=>10}");
|
|
|
|
|
|
|
|
|
|
db::Cell &c3 (g.cell (g.add_cell ()));
|
|
|
|
|
for (db::Cell::const_iterator i = c0.begin (); ! i.at_end (); ++i) {
|
|
|
|
|
c3.insert (*i);
|
|
|
|
|
}
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c3), "1[r0 *1 0,0]#0,1[r0 *1 0,0]#1,2[r0 *1 100,-100]#10");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c3), "1[r0 *1 0,0]#{},1[r0 *1 0,0]#{id=>1},2[r0 *1 100,-100]#{id=>10}");
|
|
|
|
|
|
|
|
|
|
db::Cell &c4 (g.cell (g.add_cell ()));
|
|
|
|
|
for (db::Cell::const_iterator i = c0.begin (); ! i.at_end (); ++i) {
|
|
|
|
|
map1 m1;
|
|
|
|
|
c4.insert (*i, m1);
|
|
|
|
|
}
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c4), "2[r0 *1 0,0]#0,2[r0 *1 0,0]#1,1[r0 *1 100,-100]#10");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c4), "2[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>1},1[r0 *1 100,-100]#{id=>10}");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -937,6 +996,7 @@ TEST(5)
|
|
|
|
|
if ((p % 17) == 0) {
|
|
|
|
|
c0.insert (db::CellInstArray (db::CellInst (cells[(p * 23) % (sizeof (cells) / sizeof (cells [0]))]->cell_index ()), tt));
|
|
|
|
|
} else {
|
|
|
|
|
// NOTE: we don't use the properties ID, so they can be any number
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (cells[(p * 23) % (sizeof (cells) / sizeof (cells [0]))]->cell_index ()), tt), p % 17));
|
|
|
|
|
}
|
|
|
|
|
tt *= trans[p % (sizeof (trans) / sizeof (trans [0]))];
|
|
|
|
|
@ -957,6 +1017,22 @@ TEST(5)
|
|
|
|
|
|
|
|
|
|
TEST(6)
|
|
|
|
|
{
|
|
|
|
|
db::PropertiesSet props;
|
|
|
|
|
props.insert (tl::Variant ("id"), 1);
|
|
|
|
|
db::properties_id_type pid1 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
props.clear ();
|
|
|
|
|
props.insert (tl::Variant ("id"), 2);
|
|
|
|
|
db::properties_id_type pid2 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
props.clear ();
|
|
|
|
|
props.insert (tl::Variant ("id"), 3);
|
|
|
|
|
db::properties_id_type pid3 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
props.clear ();
|
|
|
|
|
props.insert (tl::Variant ("id"), 4);
|
|
|
|
|
db::properties_id_type pid4 = db::properties_id (props);
|
|
|
|
|
|
|
|
|
|
db::Manager m (true);
|
|
|
|
|
db::Layout g (&m);
|
|
|
|
|
db::Cell &c0 (g.cell (g.add_cell ()));
|
|
|
|
|
@ -969,8 +1045,8 @@ TEST(6)
|
|
|
|
|
c0.insert (db::CellInstArray (db::CellInst (c2.cell_index ()), tt));
|
|
|
|
|
c0.insert (db::CellInstArray (db::CellInst (c3.cell_index ()), tt));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c1.cell_index ()), tt), 0));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c2.cell_index ()), tt), 1));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c3.cell_index ()), tt), 2));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c2.cell_index ()), tt), pid1));
|
|
|
|
|
c0.insert (db::CellInstArrayWithProperties (db::CellInstArray (db::CellInst (c3.cell_index ()), tt), pid2));
|
|
|
|
|
|
|
|
|
|
g.update ();
|
|
|
|
|
|
|
|
|
|
@ -982,12 +1058,12 @@ TEST(6)
|
|
|
|
|
r += tl::to_string (*cc);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#0,2[r0 *1 0,0]#0,3[r0 *1 0,0]#0,1[r0 *1 0,0]#0,2[r0 *1 0,0]#1,3[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#{},2[r0 *1 0,0]#{},3[r0 *1 0,0]#{},1[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
|
|
|
|
|
db::Cell &cc (g.cell (g.add_cell ()));
|
|
|
|
|
cc = c0;
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(cc), "1[r0 *1 0,0]#0,2[r0 *1 0,0]#0,3[r0 *1 0,0]#0,1[r0 *1 0,0]#0,2[r0 *1 0,0]#1,3[r0 *1 0,0]#2");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(cc), "1[r0 *1 0,0]#{},2[r0 *1 0,0]#{},3[r0 *1 0,0]#{},1[r0 *1 0,0]#{},2[r0 *1 0,0]#{id=>1},3[r0 *1 0,0]#{id=>2}");
|
|
|
|
|
|
|
|
|
|
// Note: iterating and replace does not work in non-editable mode
|
|
|
|
|
if (db::default_editable_mode ()) {
|
|
|
|
|
@ -997,16 +1073,16 @@ TEST(6)
|
|
|
|
|
insts.push_back (*i);
|
|
|
|
|
}
|
|
|
|
|
for (db::Cell::const_iterator i = cc.begin (); ! i.at_end (); ++i) {
|
|
|
|
|
cc.replace_prop_id (*i, i->prop_id () + 1);
|
|
|
|
|
cc.replace_prop_id (*i, pid3);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(cc), "1[r0 *1 0,0]#1,2[r0 *1 0,0]#2,3[r0 *1 0,0]#3,1[r0 *1 0,0]#1,2[r0 *1 0,0]#1,3[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(cc), "1[r0 *1 0,0]#{id=>3},2[r0 *1 0,0]#{id=>3},3[r0 *1 0,0]#{id=>3},1[r0 *1 0,0]#{id=>3},2[r0 *1 0,0]#{id=>3},3[r0 *1 0,0]#{id=>3}");
|
|
|
|
|
|
|
|
|
|
for (db::Cell::const_iterator i = c0.begin (); ! i.at_end (); ++i) {
|
|
|
|
|
c0.replace (*i, db::CellInstArrayWithProperties (i->cell_inst (), i->prop_id () + 1));
|
|
|
|
|
c0.replace (*i, db::CellInstArrayWithProperties (i->cell_inst (), pid4));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#1,2[r0 *1 0,0]#2,3[r0 *1 0,0]#3,1[r0 *1 0,0]#1,2[r0 *1 0,0]#1,3[r0 *1 0,0]#1");
|
|
|
|
|
EXPECT_EQ (c2s_unsorted(c0), "1[r0 *1 0,0]#{id=>4},2[r0 *1 0,0]#{id=>4},3[r0 *1 0,0]#{id=>4},1[r0 *1 0,0]#{id=>4},2[r0 *1 0,0]#{id=>4},3[r0 *1 0,0]#{id=>4}");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|