klayout/testdata/ruby/dbInstElementTest.rb

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")