mirror of https://github.com/KLayout/klayout.git
Edges#in/in_and_out: tests added
This commit is contained in:
parent
0304930136
commit
f6f4dbeb67
|
|
@ -514,6 +514,12 @@ AsIfFlatEdges::extended (coord_type ext_b, coord_type ext_e, coord_type ext_o, c
|
|||
EdgesDelegate *
|
||||
AsIfFlatEdges::in (const Edges &other, bool invert) const
|
||||
{
|
||||
if (other.empty ()) {
|
||||
return invert ? clone () : new EmptyEdges ();
|
||||
} else if (empty ()) {
|
||||
return new EmptyEdges ();
|
||||
}
|
||||
|
||||
std::set <db::Edge> op;
|
||||
for (EdgesIterator o (other.begin_merged ()); ! o.at_end (); ++o) {
|
||||
op.insert (*o);
|
||||
|
|
@ -533,6 +539,12 @@ AsIfFlatEdges::in (const Edges &other, bool invert) const
|
|||
std::pair<EdgesDelegate *, EdgesDelegate *>
|
||||
AsIfFlatEdges::in_and_out (const Edges &other) const
|
||||
{
|
||||
if (other.empty ()) {
|
||||
return std::make_pair (new EmptyEdges (), clone ());
|
||||
} else if (empty ()) {
|
||||
return std::make_pair (new EmptyEdges (), new EmptyEdges ());
|
||||
}
|
||||
|
||||
std::set <db::Edge> op;
|
||||
for (EdgesIterator o (other.begin_merged ()); ! o.at_end (); ++o) {
|
||||
op.insert (*o);
|
||||
|
|
|
|||
|
|
@ -925,7 +925,7 @@ contained_local_operation<TS, TI, TR>::contained_local_operation (InteractingOut
|
|||
template <class TS, class TI, class TR>
|
||||
db::Coord contained_local_operation<TS, TI, TR>::dist () const
|
||||
{
|
||||
return 0;
|
||||
return 1; // touching included for degenerated polygons and edges
|
||||
}
|
||||
|
||||
template <class TS, class TI, class TR>
|
||||
|
|
|
|||
|
|
@ -1182,3 +1182,113 @@ TEST(19_AndNotWithEdges)
|
|||
EXPECT_EQ (db::compare (eflat.andnot (ee).second, "(1500,2000;1500,2100);(1100,0;1100,1000);(0,0;0,1000);(100,0;100,3000);(1800,2500;1800,3500);(-1500,0;-1500,1000);(1700,1500;1600,2500)"), true);
|
||||
}
|
||||
|
||||
TEST(20_in)
|
||||
{
|
||||
db::Layout ly;
|
||||
{
|
||||
std::string fn (tl::testdata ());
|
||||
fn += "/algo/deep_region_l31.gds";
|
||||
tl::InputStream stream (fn);
|
||||
db::Reader reader (stream);
|
||||
reader.read (ly);
|
||||
}
|
||||
|
||||
db::cell_index_type top_cell_index = *ly.begin_top_down ();
|
||||
db::Cell &top_cell = ly.cell (top_cell_index);
|
||||
|
||||
db::DeepShapeStore dss;
|
||||
|
||||
unsigned int l1 = ly.get_layer (db::LayerProperties (1, 0));
|
||||
unsigned int l2 = ly.get_layer (db::LayerProperties (2, 0));
|
||||
unsigned int l3 = ly.get_layer (db::LayerProperties (3, 0)); // empty
|
||||
|
||||
db::Edges e1 = db::Edges ((db::Region (db::RecursiveShapeIterator (ly, top_cell, l1), dss)).edges ());
|
||||
db::Edges e2 = db::Edges ((db::Region (db::RecursiveShapeIterator (ly, top_cell, l2), dss)).edges ());
|
||||
db::Edges e3 = db::Edges ((db::Region (db::RecursiveShapeIterator (ly, top_cell, l3), dss)).edges ());
|
||||
|
||||
db::Edges e1r = e1;
|
||||
e1r.set_merged_semantics (false);
|
||||
db::Edges e2r = e2;
|
||||
e2r.set_merged_semantics (false);
|
||||
|
||||
db::Layout target;
|
||||
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
|
||||
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (1, 0)), e1);
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (2, 0)), e2);
|
||||
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (10, 0)), e2.in (e1));
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (11, 0)), e2.in (e1, true));
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (12, 0)), e2.in (e3));
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (13, 0)), e2.in (e3, true));
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (14, 0)), e3.in (e1));
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (15, 0)), e3.in (e1, true));
|
||||
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (20, 0)), e2r.in (e1));
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (21, 0)), e2r.in (e1, true));
|
||||
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (30, 0)), e2.in (e1r));
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (31, 0)), e2.in (e1r, true));
|
||||
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (40, 0)), e2r.in (e1r));
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (41, 0)), e2r.in (e1r, true));
|
||||
|
||||
CHECKPOINT();
|
||||
db::compare_layouts (_this, target, tl::testdata () + "/algo/deep_edges_au20.gds");
|
||||
}
|
||||
|
||||
TEST(20_in_and_out)
|
||||
{
|
||||
db::Layout ly;
|
||||
{
|
||||
std::string fn (tl::testdata ());
|
||||
fn += "/algo/deep_region_l31.gds";
|
||||
tl::InputStream stream (fn);
|
||||
db::Reader reader (stream);
|
||||
reader.read (ly);
|
||||
}
|
||||
|
||||
db::cell_index_type top_cell_index = *ly.begin_top_down ();
|
||||
db::Cell &top_cell = ly.cell (top_cell_index);
|
||||
|
||||
db::DeepShapeStore dss;
|
||||
|
||||
unsigned int l1 = ly.get_layer (db::LayerProperties (1, 0));
|
||||
unsigned int l2 = ly.get_layer (db::LayerProperties (2, 0));
|
||||
unsigned int l3 = ly.get_layer (db::LayerProperties (3, 0)); // empty
|
||||
|
||||
db::Edges e1 = db::Edges ((db::Region (db::RecursiveShapeIterator (ly, top_cell, l1), dss)).edges ());
|
||||
db::Edges e2 = db::Edges ((db::Region (db::RecursiveShapeIterator (ly, top_cell, l2), dss)).edges ());
|
||||
db::Edges e3 = db::Edges ((db::Region (db::RecursiveShapeIterator (ly, top_cell, l3), dss)).edges ());
|
||||
|
||||
db::Edges e1r = e1;
|
||||
e1r.set_merged_semantics (false);
|
||||
db::Edges e2r = e2;
|
||||
e2r.set_merged_semantics (false);
|
||||
|
||||
db::Layout target;
|
||||
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
|
||||
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (1, 0)), e1);
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (2, 0)), e2);
|
||||
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (10, 0)), e2.in_and_out (e1).first);
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (11, 0)), e2.in_and_out (e1).second);
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (12, 0)), e2.in_and_out (e3).first);
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (13, 0)), e2.in_and_out (e3).second);
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (14, 0)), e3.in_and_out (e1).first);
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (15, 0)), e3.in_and_out (e1).second);
|
||||
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (20, 0)), e2r.in_and_out (e1).first);
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (21, 0)), e2r.in_and_out (e1).second);
|
||||
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (30, 0)), e2.in_and_out (e1r).first);
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (31, 0)), e2.in_and_out (e1r).second);
|
||||
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (40, 0)), e2r.in_and_out (e1r).first);
|
||||
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (41, 0)), e2r.in_and_out (e1r).second);
|
||||
|
||||
CHECKPOINT();
|
||||
db::compare_layouts (_this, target, tl::testdata () + "/algo/deep_edges_au20.gds");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1121,6 +1121,42 @@ TEST(27)
|
|||
EXPECT_EQ (db::compare (e.selected_outside_differential (ee).second, "(1100,-1000;1100,2000);(1200,-1000;1200,0);(1300,-800;1300,-200);(1400,1000;1400,1100);(1500,1000;1500,2100);(1600,-800;1600,-200);(1900,1000;1900,2000)"), true);
|
||||
}
|
||||
|
||||
// Edges::in and Edges:in_and_out
|
||||
TEST(28)
|
||||
{
|
||||
db::Edges e;
|
||||
e.insert (db::Edge (0, 0, 0, 1000));
|
||||
e.insert (db::Edge (0, 1000, 0, 2000));
|
||||
e.insert (db::Edge (100, 0, 100, 1000));
|
||||
|
||||
db::Edges ee;
|
||||
ee.insert (db::Edge (0, 0, 0, 2000));
|
||||
ee.insert (db::Edge (100, 1000, 0, 2000));
|
||||
ee.insert (db::Edge (100, 0, 100, 1000));
|
||||
|
||||
EXPECT_EQ (db::compare (e.in (db::Edges ()), ""), true);
|
||||
EXPECT_EQ (db::compare (e.in (db::Edges (), true), "(0,0;0,1000);(0,1000;0,2000);(100,0;100,1000)"), true);
|
||||
EXPECT_EQ (db::compare (e.in_and_out (db::Edges ()).first, ""), true);
|
||||
EXPECT_EQ (db::compare (e.in_and_out (db::Edges ()).second, "(0,0;0,1000);(0,1000;0,2000);(100,0;100,1000)"), true);
|
||||
EXPECT_EQ (db::compare (db::Edges ().in (ee), ""), true);
|
||||
EXPECT_EQ (db::compare (db::Edges ().in (ee, true), ""), true);
|
||||
EXPECT_EQ (db::compare (db::Edges ().in_and_out (ee).first, ""), true);
|
||||
EXPECT_EQ (db::compare (db::Edges ().in_and_out (ee).second, ""), true);
|
||||
EXPECT_EQ (db::compare (e.in (ee), "(0,0;0,2000);(100,0;100,1000)"), true);
|
||||
EXPECT_EQ (db::compare (e.in (ee, true), ""), true);
|
||||
EXPECT_EQ (db::compare (e.in_and_out (ee).first, "(0,0;0,2000);(100,0;100,1000)"), true);
|
||||
EXPECT_EQ (db::compare (e.in_and_out (ee).second, ""), true);
|
||||
EXPECT_EQ (db::compare (ee.in (e, true), "(100,1000;0,2000)"), true);
|
||||
EXPECT_EQ (db::compare (ee.in_and_out (e).second, "(100,1000;0,2000)"), true);
|
||||
|
||||
e.set_merged_semantics (false);
|
||||
ee.set_merged_semantics (false);
|
||||
|
||||
EXPECT_EQ (db::compare (e.in (ee), "(100,0;100,1000)"), true);
|
||||
EXPECT_EQ (db::compare (e.in (ee, true), "(0,0;0,1000);(0,1000;0,2000)"), true);
|
||||
EXPECT_EQ (db::compare (ee.in (e, true), "(0,0;0,2000);(100,1000;0,2000)"), true);
|
||||
}
|
||||
|
||||
// GitHub issue #72 (Edges/Region NOT issue)
|
||||
TEST(100)
|
||||
{
|
||||
|
|
|
|||
Binary file not shown.
Loading…
Reference in New Issue