mirror of https://github.com/KLayout/klayout.git
Fixed #63 (wrong output on DRC non_interacting with empty second input)
This commit is contained in:
parent
2de6b691b4
commit
ed945a28d4
|
|
@ -828,8 +828,13 @@ Region::selected_interacting_generic (const Region &other, int mode, bool touchi
|
|||
db::EdgeProcessor ep (m_report_progress, m_progress_desc);
|
||||
|
||||
// shortcut
|
||||
if (empty () || other.empty ()) {
|
||||
if (mode <= 0) {
|
||||
if (empty ()) {
|
||||
return *this;
|
||||
} else if (other.empty ()) {
|
||||
// clear, if b is empty and
|
||||
// * mode is inside or interacting and inverse is false ("inside" or "interacting")
|
||||
// * mode is outside and inverse is true ("not outside")
|
||||
if ((mode <= 0) != inverse) {
|
||||
return Region ();
|
||||
} else {
|
||||
return *this;
|
||||
|
|
@ -879,8 +884,13 @@ void
|
|||
Region::select_interacting_generic (const Region &other, int mode, bool touching, bool inverse)
|
||||
{
|
||||
// shortcut
|
||||
if (empty () || other.empty ()) {
|
||||
if (mode <= 0) {
|
||||
if (empty ()) {
|
||||
return;
|
||||
} else if (other.empty ()) {
|
||||
// clear, if b is empty and
|
||||
// * mode is inside or interacting and inverse is false ("inside" or "interacting")
|
||||
// * mode is outside and inverse is true ("not outside")
|
||||
if ((mode <= 0) != inverse) {
|
||||
clear ();
|
||||
}
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ def run_testsuite(dm, ic, tiled = false)
|
|||
c = input(3)
|
||||
x = input(10)
|
||||
y = input(11)
|
||||
empty = input(1000)
|
||||
|
||||
h = {}
|
||||
layers.each { |l| h[l] = true }
|
||||
|
|
@ -123,6 +124,9 @@ def run_testsuite(dm, ic, tiled = false)
|
|||
message "--- interacting, in, not_in #{lb}"
|
||||
|
||||
b.interacting(a).output(lb, dm)
|
||||
b.not_interacting(a).output(lb, dm + 1)
|
||||
b.interacting(empty).output(lb, dm + 2)
|
||||
b.not_interacting(empty).output(lb, dm + 3)
|
||||
b.interacting(a).in(b).output(lb + 1, dm)
|
||||
(b|a).not_in(b).output(lb + 2, dm)
|
||||
x.in(b).output(lb + 3, dm)
|
||||
|
|
@ -132,21 +136,73 @@ def run_testsuite(dm, ic, tiled = false)
|
|||
message "--- inside, outside, overlapping, interacting #{lb}"
|
||||
|
||||
b.inside(c).output(lb, dm)
|
||||
b.not_inside(c).output(lb, dm + 1)
|
||||
b.inside(empty).output(lb, dm + 2)
|
||||
b.not_inside(empty).output(lb, dm + 3)
|
||||
b.outside(c).output(lb + 1, dm)
|
||||
b.not_outside(c).output(lb + 1, dm + 1)
|
||||
b.outside(empty).output(lb + 1, dm + 2)
|
||||
b.not_outside(empty).output(lb + 1, dm + 3)
|
||||
b.overlapping(c).output(lb + 2, dm)
|
||||
b.not_overlapping(c).output(lb + 2, dm + 1)
|
||||
b.overlapping(empty).output(lb + 2, dm + 2)
|
||||
b.not_overlapping(empty).output(lb + 2, dm + 3)
|
||||
b.interacting(c).output(lb + 3, dm)
|
||||
b.not_interacting(c).output(lb + 3, dm + 1)
|
||||
b.interacting(empty).output(lb + 3, dm + 2)
|
||||
b.not_interacting(empty).output(lb + 3, dm + 3)
|
||||
bdup = b.dup
|
||||
bdup.select_inside(c)
|
||||
bdup.xor(b.inside(c)).output(lb + 4, dm)
|
||||
bdup = b.dup
|
||||
bdup.select_not_inside(c)
|
||||
bdup.output(lb + 4, dm + 1)
|
||||
bdup = b.dup
|
||||
bdup.select_inside(empty)
|
||||
bdup.output(lb + 4, dm + 2)
|
||||
bdup = b.dup
|
||||
bdup.select_not_inside(empty)
|
||||
bdup.output(lb + 4, dm + 3)
|
||||
bdup = b.dup
|
||||
bdup.select_outside(c)
|
||||
bdup.xor(b.outside(c)).output(lb + 5, dm)
|
||||
bdup = b.dup
|
||||
bdup.select_not_outside(c)
|
||||
bdup.output(lb + 5, dm + 1)
|
||||
bdup = b.dup
|
||||
bdup.select_outside(empty)
|
||||
bdup.output(lb + 5, dm + 2)
|
||||
bdup = b.dup
|
||||
bdup.select_not_outside(empty)
|
||||
bdup.output(lb + 5, dm + 3)
|
||||
bdup = b.dup
|
||||
bdup.select_overlapping(c)
|
||||
bdup.xor(b.overlapping(c)).output(lb + 6, dm)
|
||||
bdup = b.dup
|
||||
bdup.select_not_overlapping(c)
|
||||
bdup.output(lb + 6, dm + 1)
|
||||
bdup = b.dup
|
||||
bdup.select_overlapping(empty)
|
||||
bdup.output(lb + 6, dm + 2)
|
||||
bdup = b.dup
|
||||
bdup.select_not_overlapping(empty)
|
||||
bdup.output(lb + 6, dm + 3)
|
||||
bdup = b.dup
|
||||
bdup.select_interacting(c)
|
||||
bdup.xor(b.interacting(c)).output(lb + 7, dm)
|
||||
bdup = b.dup
|
||||
bdup.select_not_interacting(c)
|
||||
bdup.output(lb + 7, dm + 1)
|
||||
bdup = b.dup
|
||||
bdup.select_interacting(empty)
|
||||
bdup.output(lb + 7, dm + 2)
|
||||
bdup = b.dup
|
||||
bdup.select_not_interacting(empty)
|
||||
bdup.output(lb + 7, dm + 3)
|
||||
b.inside(empty).output(lb + 8, dm)
|
||||
b.not_inside(empty).output(lb + 8, dm + 1)
|
||||
b.outside(empty).output(lb + 9, dm)
|
||||
b.not_outside(empty).output(lb + 9, dm + 1)
|
||||
|
||||
lb += 10
|
||||
message "--- merge #{lb}"
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue