mirror of https://github.com/KLayout/klayout.git
252 lines
9.0 KiB
Ruby
252 lines
9.0 KiB
Ruby
# encoding: UTF-8
|
|
|
|
# KLayout Layout Viewer
|
|
# Copyright (C) 2006-2024 Matthias Koefferlein
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
if !$:.member?(File::dirname($0))
|
|
$:.push(File::dirname($0))
|
|
end
|
|
|
|
load("test_prologue.rb")
|
|
|
|
class DBEdgePair_TestClass < TestBase
|
|
|
|
# Basics
|
|
def test_1
|
|
|
|
ep = RBA::EdgePair::new
|
|
assert_equal(ep.to_s, "(0,0;0,0)/(0,0;0,0)")
|
|
|
|
assert_equal(ep.to_s, "(0,0;0,0)/(0,0;0,0)")
|
|
|
|
ep.first = RBA::Edge::new(0, 0, 10, 20)
|
|
assert_equal(ep.to_s, "(0,0;10,20)/(0,0;0,0)")
|
|
|
|
ep.second = RBA::Edge::new(-10, 0, -10, 30)
|
|
assert_equal(ep.to_s, "(0,0;10,20)/(-10,0;-10,30)")
|
|
assert_equal(ep.bbox.to_s, "(-10,0;10,30)")
|
|
|
|
assert_equal(RBA::EdgePair::new(ep.first, ep.second).to_s, "(0,0;10,20)/(-10,0;-10,30)")
|
|
|
|
ep2 = RBA::EdgePair::new
|
|
assert_equal(ep2.to_s, "(0,0;0,0)/(0,0;0,0)")
|
|
ep2.assign(ep)
|
|
assert_equal(ep2.to_s, ep.to_s)
|
|
|
|
assert_equal(ep.normalized.to_s, "(10,20;0,0)/(-10,0;-10,30)")
|
|
|
|
assert_equal(ep.transformed(RBA::Trans::new(1)).to_s, "(0,0;-20,10)/(0,-10;-30,-10)")
|
|
assert_equal(ep.transformed(RBA::ICplxTrans::new(2.0)).to_s, "(0,0;20,40)/(-20,0;-20,60)")
|
|
assert_equal(ep.transformed(RBA::CplxTrans::new(2.0)).to_s, "(0,0;20,40)/(-20,0;-20,60)")
|
|
assert_equal(RBA::EdgePair::new(ep.transformed(RBA::CplxTrans::new(2.0))).to_s, "(0,0;20,40)/(-20,0;-20,60)")
|
|
|
|
assert_equal(ep.polygon(0).to_s, "(-10,0;-10,30;0,0;10,20)")
|
|
assert_equal(ep.polygon(0).class.to_s, "RBA::Polygon")
|
|
assert_equal(ep.simple_polygon(0).to_s, "(-10,0;-10,30;0,0;10,20)")
|
|
assert_equal(ep.simple_polygon(0).class.to_s, "RBA::SimplePolygon")
|
|
|
|
ep = RBA::EdgePair::new(RBA::Edge::new(0, 0, 10, 0), RBA::Edge::new(0, 20, 0, 0))
|
|
|
|
assert_equal(ep.distance, 0)
|
|
assert_equal(ep.perimeter, 30)
|
|
assert_equal(ep.area, 100)
|
|
assert_equal(ep.simple_polygon(0).area, 100)
|
|
|
|
ep = RBA::EdgePair::new(RBA::Edge::new(0, 0, 10, 0), RBA::Edge::new(0, 0, 0, 20))
|
|
|
|
assert_equal(ep.perimeter, 30)
|
|
assert_equal(ep.area, 0)
|
|
assert_equal(ep.simple_polygon(0).area, 0)
|
|
|
|
ep = RBA::EdgePair::new(RBA::Edge::new(0, 0, 10, 0), RBA::Edge::new(-10, 10, 20, 10))
|
|
|
|
assert_equal(ep.distance, 10)
|
|
|
|
end
|
|
|
|
# Basics
|
|
def test_2
|
|
|
|
ep = RBA::DEdgePair::new
|
|
assert_equal(ep.to_s, "(0,0;0,0)/(0,0;0,0)")
|
|
|
|
ep.first = RBA::DEdge::new(0, 0, 10, 20)
|
|
assert_equal(ep.to_s, "(0,0;10,20)/(0,0;0,0)")
|
|
|
|
ep.second = RBA::DEdge::new(-10, 0, -10, 30)
|
|
assert_equal(ep.to_s, "(0,0;10,20)/(-10,0;-10,30)")
|
|
assert_equal(ep.bbox.to_s, "(-10,0;10,30)")
|
|
|
|
assert_equal(RBA::DEdgePair::new(ep.first, ep.second).to_s, "(0,0;10,20)/(-10,0;-10,30)")
|
|
|
|
ep2 = RBA::DEdgePair::new
|
|
assert_equal(ep2.to_s, "(0,0;0,0)/(0,0;0,0)")
|
|
ep2.assign(ep)
|
|
assert_equal(ep2.to_s, ep.to_s)
|
|
|
|
assert_equal(ep.normalized.to_s, "(10,20;0,0)/(-10,0;-10,30)")
|
|
|
|
assert_equal(ep.transformed(RBA::DTrans::new(1)).to_s, "(0,0;-20,10)/(0,-10;-30,-10)")
|
|
assert_equal(ep.transformed(RBA::DCplxTrans::new(2.5)).class.to_s, "RBA::DEdgePair")
|
|
assert_equal(ep.transformed(RBA::DCplxTrans::new(2.5)).to_s, "(0,0;25,50)/(-25,0;-25,75)")
|
|
assert_equal(ep.transformed(RBA::VCplxTrans::new(2.5)).class.to_s, "RBA::EdgePair")
|
|
assert_equal(ep.transformed(RBA::VCplxTrans::new(2.5)).to_s, "(0,0;25,50)/(-25,0;-25,75)")
|
|
|
|
assert_equal(ep.polygon(0).to_s, "(-10,0;-10,30;0,0;10,20)")
|
|
assert_equal(ep.polygon(0).class.to_s, "RBA::DPolygon")
|
|
assert_equal(ep.simple_polygon(0).to_s, "(-10,0;-10,30;0,0;10,20)")
|
|
assert_equal(ep.simple_polygon(0).class.to_s, "RBA::DSimplePolygon")
|
|
|
|
ep = RBA::DEdgePair::new(RBA::DEdge::new(0, 0, 10, 0), RBA::DEdge::new(0, 20, 0, 0))
|
|
|
|
assert_equal(ep.distance, 0)
|
|
assert_equal(ep.perimeter, 30)
|
|
assert_equal(ep.area, 100)
|
|
assert_equal(ep.simple_polygon(0).area, 100)
|
|
|
|
ep = RBA::DEdgePair::new(RBA::DEdge::new(0, 0, 10, 0), RBA::DEdge::new(0, 0, 0, 20))
|
|
|
|
assert_equal(ep.perimeter, 30)
|
|
assert_equal(ep.area, 0)
|
|
assert_equal(ep.simple_polygon(0).area, 0)
|
|
|
|
ep = RBA::DEdgePair::new(RBA::DEdge::new(0, 0, 10, 0), RBA::DEdge::new(-10, 10, 20, 10))
|
|
|
|
assert_equal(ep.distance, 10)
|
|
|
|
end
|
|
|
|
# Fuzzy compare
|
|
def test_3
|
|
|
|
b1 = RBA::DEdgePair::new(RBA::DEdge::new(1, 2, 3, 4), RBA::DEdge::new(11, 12, 13, 14))
|
|
b2a = RBA::DEdgePair::new(RBA::DEdge::new(1 + 1e-7, 2, 3, 4), RBA::DEdge::new(11, 12, 13, 14))
|
|
b2b = RBA::DEdgePair::new(RBA::DEdge::new(1, 2, 3, 4), RBA::DEdge::new(11 + 1e-7, 12, 13, 14))
|
|
b3a = RBA::DEdgePair::new(RBA::DEdge::new(1 + 1e-4, 2, 3, 4), RBA::DEdge::new(11, 12, 13, 14))
|
|
b3b = RBA::DEdgePair::new(RBA::DEdge::new(1, 2, 3, 4), RBA::DEdge::new(11 + 1e-4, 12, 13, 14))
|
|
assert_equal(b1.to_s, "(1,2;3,4)/(11,12;13,14)")
|
|
assert_equal(b2a.to_s, "(1.0000001,2;3,4)/(11,12;13,14)")
|
|
assert_equal(b2b.to_s, "(1,2;3,4)/(11.0000001,12;13,14)")
|
|
assert_equal(b3a.to_s, "(1.0001,2;3,4)/(11,12;13,14)")
|
|
assert_equal(b3b.to_s, "(1,2;3,4)/(11.0001,12;13,14)")
|
|
|
|
assert_equal(b1 == b2a, true)
|
|
assert_equal(b1.eql?(b2a), true)
|
|
assert_equal(b1 != b2a, false)
|
|
assert_equal(b1 < b2a, false)
|
|
assert_equal(b2a < b1, false)
|
|
assert_equal(b1 == b2b, true)
|
|
assert_equal(b1.eql?(b2b), true)
|
|
assert_equal(b1 != b2b, false)
|
|
assert_equal(b1 < b2b, false)
|
|
assert_equal(b2b < b1, false)
|
|
assert_equal(b2a == b2b, true)
|
|
assert_equal(b2a.eql?(b2b), true)
|
|
assert_equal(b2a != b2b, false)
|
|
assert_equal(b2a < b2b, false)
|
|
assert_equal(b2b < b2a, false)
|
|
|
|
assert_equal(b1 == b3a, false)
|
|
assert_equal(b1 == b3b, false)
|
|
assert_equal(b1.eql?(b3a), false)
|
|
assert_equal(b1.eql?(b3b), false)
|
|
assert_equal(b1 != b3a, true)
|
|
assert_equal(b1 != b3b, true)
|
|
assert_equal(b1 < b3a, true)
|
|
assert_equal(b1 < b3b, true)
|
|
assert_equal(b3a < b1, false)
|
|
assert_equal(b3b < b1, false)
|
|
assert_equal(b3b < b3a, true)
|
|
assert_equal(b3a < b3b, false)
|
|
|
|
end
|
|
|
|
# Hash values
|
|
def test_4
|
|
|
|
b1 = RBA::DEdgePair::new(RBA::DEdge::new(1, 2, 3, 4), RBA::DEdge::new(11, 12, 13, 14))
|
|
b2a = RBA::DEdgePair::new(RBA::DEdge::new(1 + 1e-7, 2, 3, 4), RBA::DEdge::new(11, 12, 13, 14))
|
|
b2b = RBA::DEdgePair::new(RBA::DEdge::new(1, 2, 3, 4), RBA::DEdge::new(11 + 1e-7, 12, 13, 14))
|
|
b3a = RBA::DEdgePair::new(RBA::DEdge::new(1 + 1e-4, 2, 3, 4), RBA::DEdge::new(11, 12, 13, 14))
|
|
b3b = RBA::DEdgePair::new(RBA::DEdge::new(1, 2, 3, 4), RBA::DEdge::new(11 + 1e-4, 12, 13, 14))
|
|
|
|
assert_equal(b1.hash == b2a.hash, true)
|
|
assert_equal(b1.hash == b2b.hash, true)
|
|
assert_equal(b1.hash == b3a.hash, false)
|
|
assert_equal(b1.hash == b3b.hash, false)
|
|
assert_equal(b3a.hash == b3b.hash, false)
|
|
|
|
h = { b1 => "a", b3a => "b", b3b => "c" }
|
|
assert_equal(h[b1], "a")
|
|
assert_equal(h[b2a], "a")
|
|
assert_equal(h[b2b], "a")
|
|
assert_equal(h[b3a], "b")
|
|
assert_equal(h[b3b], "c")
|
|
|
|
end
|
|
|
|
# Symmetric edge pairs
|
|
def test_5
|
|
|
|
b1 = RBA::DEdgePair::new(RBA::DEdge::new(1, 2, 3, 4), RBA::DEdge::new(11, 12, 13, 14), false)
|
|
b1x = RBA::DEdgePair::new(RBA::DEdge::new(11, 12, 13, 14), RBA::DEdge::new(1, 2, 3, 4), false)
|
|
b2a = RBA::DEdgePair::new(RBA::DEdge::new(1, 2, 3, 4), RBA::DEdge::new(11, 12, 13, 14), true)
|
|
b2b = RBA::DEdgePair::new(RBA::DEdge::new(11, 12, 13, 14), RBA::DEdge::new(1, 2, 3, 4), true)
|
|
|
|
assert_equal(b1.hash == b1x.hash, false)
|
|
assert_equal(b1.hash == b2a.hash, false)
|
|
assert_equal(b1.hash == b2b.hash, false)
|
|
assert_equal(b2a.hash == b2b.hash, true)
|
|
|
|
assert_equal(b1 < b1x, true)
|
|
assert_equal(b1 == b1x, false)
|
|
assert_equal(b1 < b2a, true)
|
|
assert_equal(b1 == b2a, false)
|
|
assert_equal(b1 < b2b, true)
|
|
assert_equal(b2a < b2b, false)
|
|
assert_equal(b2a == b2b, true)
|
|
assert_equal(b2b < b2a, false)
|
|
|
|
assert_equal(b1.to_s, "(1,2;3,4)/(11,12;13,14)")
|
|
assert_equal(b1x.to_s, "(11,12;13,14)/(1,2;3,4)")
|
|
assert_equal(b2a.to_s, "(1,2;3,4)|(11,12;13,14)")
|
|
assert_equal(b2b.to_s, "(1,2;3,4)|(11,12;13,14)")
|
|
|
|
h = {}
|
|
h[b1] = 1
|
|
h[b1x] = 2
|
|
assert_equal(h.size, 2)
|
|
assert_equal(h.keys.collect(&:to_s).join(","), "(1,2;3,4)/(11,12;13,14),(11,12;13,14)/(1,2;3,4)")
|
|
|
|
h = {}
|
|
h[b1] = 1
|
|
h[b2a] = 2
|
|
assert_equal(h.size, 2)
|
|
assert_equal(h.keys.collect(&:to_s).join(","), "(1,2;3,4)/(11,12;13,14),(1,2;3,4)|(11,12;13,14)")
|
|
|
|
h = {}
|
|
h[b2a] = 1
|
|
h[b2b] = 2
|
|
assert_equal(h.size, 1)
|
|
assert_equal(h.keys.collect(&:to_s).join(","), "(1,2;3,4)|(11,12;13,14)")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
load("test_epilogue.rb")
|