mirror of https://github.com/KLayout/klayout.git
120 lines
4.4 KiB
Ruby
120 lines
4.4 KiB
Ruby
# encoding: UTF-8
|
|
|
|
# KLayout Layout Viewer
|
|
# Copyright (C) 2006-2025 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 DBInstElement_TestClass < TestBase
|
|
|
|
# InstElement tests
|
|
def test_1_InstElement
|
|
|
|
ly = RBA::Layout::new
|
|
ci1 = ly.add_cell( "c1" )
|
|
ci2 = ly.add_cell( "c2" )
|
|
ci3 = ly.add_cell( "c3" )
|
|
ci4 = ly.add_cell( "c4" )
|
|
assert_equal( ci1, 0 )
|
|
assert_equal( ci2, 1 )
|
|
assert_equal( ci3, 2 )
|
|
assert_equal( ci4, 3 )
|
|
c1 = ly.cell( ci1 )
|
|
c2 = ly.cell( ci2 )
|
|
c3 = ly.cell( ci3 )
|
|
c4 = ly.cell( ci4 )
|
|
pid = ly.properties_id( { 17 => "a", "b" => [ 1, 5, 7 ] }.to_a )
|
|
|
|
tr = RBA::Trans::new( RBA::Trans::R90, RBA::Point::new( 100, -50 ) )
|
|
inst1 = RBA::CellInstArray::new( 1, tr )
|
|
c1.insert( inst1 )
|
|
|
|
tr = RBA::CplxTrans::new( 1.5, 90.0, true, RBA::DPoint::new( 100, -50 ) )
|
|
inst2 = RBA::CellInstArray::new( 2, tr )
|
|
c1.insert( inst2, pid )
|
|
|
|
tr = RBA::Trans::new( RBA::Trans::R90, RBA::Point::new( 100, -50 ) )
|
|
inst3 = RBA::CellInstArray::new( 3, tr, RBA::Point::new( 100, 0 ), RBA::Point::new( 0, 100 ), 10, 20 )
|
|
c1.insert( inst3 )
|
|
|
|
inst1r = nil
|
|
inst2r = nil
|
|
inst3r = nil
|
|
c1.each_inst { |inst| inst1r = inst if inst.cell_index == 1; }
|
|
c1.each_inst { |inst| inst2r = inst if inst.cell_index == 2; }
|
|
c1.each_inst { |inst| inst3r = inst if inst.cell_index == 3; }
|
|
assert_equal( inst1r.cell_index, 1 )
|
|
assert_equal( inst2r.cell_index, 2 )
|
|
assert_equal( inst3r.cell_index, 3 )
|
|
assert_equal( inst1r == inst1r, true )
|
|
assert_equal( inst1r < inst1r, false )
|
|
assert_equal( inst1r == inst2r, false )
|
|
assert_equal( (inst1r < inst2r ? 1 : 0) + (inst2r < inst1r ? 1 : 0), 1 )
|
|
assert_equal( inst1r != inst1r, false )
|
|
assert_equal( inst1r != inst2r, true )
|
|
|
|
ie1 = RBA::InstElement::new( inst1r )
|
|
ie2 = RBA::InstElement::new( inst2r )
|
|
ie3 = RBA::InstElement::new( inst3r )
|
|
|
|
assert_equal( ie1.cell_inst.cell_index, 1 )
|
|
assert_equal( ie2.cell_inst.cell_index, 2 )
|
|
assert_equal( ie3.cell_inst.cell_index, 3 )
|
|
assert_equal( ie1 == ie1, true )
|
|
assert_equal( ie1 == ie2, false )
|
|
assert_equal( ie1 < ie1, false )
|
|
assert_equal( (ie1 < ie2 ? 1 : 0) + (ie2 < ie1 ? 1 : 0), 1 )
|
|
assert_equal( ie1 != ie1, false )
|
|
assert_equal( ie1 != ie2, true )
|
|
|
|
assert_equal( ie1.array_member_trans.to_s, "r0 0,0" )
|
|
assert_equal( ie1.specific_trans.to_s, "r90 100,-50" )
|
|
assert_equal( ie1.cell_inst.trans.to_s, "r90 100,-50" )
|
|
assert_equal( ie1.specific_cplx_trans.to_s, "r90 *1 100,-50" )
|
|
assert_equal( ie1.cell_inst.cplx_trans.to_s, "r90 *1 100,-50" )
|
|
|
|
assert_equal( ie2.array_member_trans.to_s, "r0 0,0" )
|
|
assert_equal( ie2.specific_trans.to_s, "m45 100,-50" )
|
|
assert_equal( ie2.cell_inst.trans.to_s, "m45 100,-50" )
|
|
assert_equal( ie2.specific_cplx_trans.to_s, "m45 *1.5 100,-50" )
|
|
assert_equal( ie2.cell_inst.cplx_trans.to_s, "m45 *1.5 100,-50" )
|
|
|
|
assert_equal( ie3.array_member_trans.to_s, "r0 0,0" )
|
|
assert_equal( ie3.specific_trans.to_s, "r90 100,-50" )
|
|
assert_equal( ie3.cell_inst.trans.to_s, "r90 100,-50" )
|
|
assert_equal( ie3.specific_cplx_trans.to_s, "r90 *1 100,-50" )
|
|
assert_equal( ie3.cell_inst.cplx_trans.to_s, "r90 *1 100,-50" )
|
|
|
|
ie3 = RBA::InstElement::new( inst3r, 1, 5 )
|
|
assert_equal( ie3.cell_inst.cell_index, 3 )
|
|
|
|
assert_equal( ie3.array_member_trans.to_s, "r0 100,500" )
|
|
assert_equal( ie3.specific_trans.to_s, "r90 200,450" )
|
|
assert_equal( ie3.cell_inst.trans.to_s, "r90 100,-50" )
|
|
assert_equal( ie3.specific_cplx_trans.to_s, "r90 *1 200,450" )
|
|
assert_equal( ie3.cell_inst.cplx_trans.to_s, "r90 *1 100,-50" )
|
|
|
|
end
|
|
|
|
end
|
|
|
|
load("test_epilogue.rb")
|