2017-07-23 23:03:21 +02:00
|
|
|
# encoding: UTF-8
|
2017-02-12 13:21:08 +01:00
|
|
|
|
2017-07-23 23:03:21 +02:00
|
|
|
# KLayout Layout Viewer
|
2024-01-01 17:06:23 +01:00
|
|
|
# Copyright (C) 2006-2024 Matthias Koefferlein
|
2017-07-23 23:03:21 +02:00
|
|
|
#
|
|
|
|
|
# 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
|
2017-02-12 13:21:08 +01:00
|
|
|
|
|
|
|
|
load("test_prologue.rb")
|
|
|
|
|
|
|
|
|
|
def mapping_to_s(ly1, ly2, lm)
|
|
|
|
|
r = ""
|
|
|
|
|
ly1.layer_indices.each do |li|
|
|
|
|
|
s = ly1.get_info(li).to_s
|
|
|
|
|
if lm.has_mapping?(li)
|
|
|
|
|
s += "=>" + ly2.get_info(lm.layer_mapping(li)).to_s
|
|
|
|
|
end
|
|
|
|
|
r == "" || (r += ";")
|
|
|
|
|
r += s
|
|
|
|
|
end
|
|
|
|
|
r
|
|
|
|
|
end
|
|
|
|
|
|
2017-09-10 01:21:10 +02:00
|
|
|
def mapping_to_s_from_table(ly1, ly2, lm)
|
|
|
|
|
r = ""
|
|
|
|
|
table = lm.table
|
|
|
|
|
ly1.layer_indices.each do |li|
|
|
|
|
|
s = ly1.get_info(li).to_s
|
|
|
|
|
if table[li]
|
|
|
|
|
s += "=>" + ly2.get_info(table[li]).to_s
|
|
|
|
|
end
|
|
|
|
|
r == "" || (r += ";")
|
|
|
|
|
r += s
|
|
|
|
|
end
|
|
|
|
|
r
|
|
|
|
|
end
|
|
|
|
|
|
2017-02-12 13:21:08 +01:00
|
|
|
class DBLayerMapping_TestClass < TestBase
|
|
|
|
|
|
|
|
|
|
def test_1
|
|
|
|
|
|
|
|
|
|
mp = RBA::LayerMapping::new
|
|
|
|
|
mp.map(0, 1)
|
|
|
|
|
assert_equal(mp.has_mapping?(0), true)
|
|
|
|
|
assert_equal(mp.has_mapping?(1), false)
|
|
|
|
|
assert_equal(mp.layer_mapping(0), 1)
|
|
|
|
|
mp.clear
|
|
|
|
|
assert_equal(mp.has_mapping?(0), false)
|
|
|
|
|
assert_equal(mp.has_mapping?(1), false)
|
|
|
|
|
mp.map(1, 2)
|
|
|
|
|
assert_equal(mp.layer_mapping(1), 2)
|
2017-08-30 01:11:38 +02:00
|
|
|
mp.map(1, 3)
|
|
|
|
|
assert_equal(mp.layer_mapping(1), 3)
|
2017-02-12 13:21:08 +01:00
|
|
|
|
|
|
|
|
ly1 = RBA::Layout::new
|
|
|
|
|
|
|
|
|
|
a1 = ly1.insert_layer(RBA::LayerInfo::new(1, 0))
|
|
|
|
|
a2 = ly1.insert_layer(RBA::LayerInfo::new(2, 0))
|
|
|
|
|
a3 = ly1.insert_layer(RBA::LayerInfo::new("A"))
|
|
|
|
|
|
|
|
|
|
ly2 = RBA::Layout::new
|
2017-09-10 01:21:10 +02:00
|
|
|
assert_equal(mapping_to_s(ly2, ly1, mp), "")
|
|
|
|
|
assert_equal(mapping_to_s_from_table(ly2, ly1, mp), "")
|
2017-02-12 13:21:08 +01:00
|
|
|
|
|
|
|
|
b1 = ly2.insert_layer(RBA::LayerInfo::new("A"))
|
|
|
|
|
b2 = ly2.insert_layer(RBA::LayerInfo::new(3, 0))
|
|
|
|
|
b3 = ly2.insert_layer(RBA::LayerInfo::new(2, 0))
|
|
|
|
|
|
|
|
|
|
mp = RBA::LayerMapping::new
|
|
|
|
|
mp.create(ly1, ly2)
|
|
|
|
|
assert_equal(mapping_to_s(ly2, ly1, mp), "A=>A;3/0;2/0=>2/0")
|
2017-09-10 01:21:10 +02:00
|
|
|
assert_equal(mapping_to_s_from_table(ly2, ly1, mp), "A=>A;3/0;2/0=>2/0")
|
2017-02-12 13:21:08 +01:00
|
|
|
|
|
|
|
|
mp = RBA::LayerMapping::new
|
|
|
|
|
nl = mp.create_full(ly1, ly2)
|
|
|
|
|
assert_equal(mapping_to_s(ly2, ly1, mp), "A=>A;3/0=>3/0;2/0=>2/0")
|
2017-09-10 01:21:10 +02:00
|
|
|
assert_equal(mapping_to_s_from_table(ly2, ly1, mp), "A=>A;3/0=>3/0;2/0=>2/0")
|
2017-02-12 13:21:08 +01:00
|
|
|
assert_equal(nl.inspect, "[3]")
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
2022-08-27 17:38:48 +02:00
|
|
|
def test_2
|
|
|
|
|
|
|
|
|
|
lmap = RBA::LayerMap::new
|
|
|
|
|
|
|
|
|
|
lmap.map( "1/0", 0 )
|
|
|
|
|
assert_equal(lmap.is_mapped(RBA::LayerInfo::new(1, 0)), true)
|
|
|
|
|
assert_equal(lmap.is_mapped(RBA::LayerInfo::new(1, 1)), false)
|
|
|
|
|
assert_equal(lmap.is_mapped(RBA::LayerInfo::new(2, 2)), false)
|
|
|
|
|
lmap.map( "2/2", 0 )
|
|
|
|
|
assert_equal(lmap.is_mapped(RBA::LayerInfo::new(2, 2)), true)
|
|
|
|
|
lmap.map( "10/2", 0 )
|
|
|
|
|
assert_equal( lmap.mapping_str(0), "1/0;2/2;10/2" )
|
|
|
|
|
|
|
|
|
|
lmap.map( "3/2", 1 )
|
|
|
|
|
lmap.map( "2/2", 1 )
|
|
|
|
|
lmap.map( "4/2", 1 )
|
|
|
|
|
lmap.map( "1/2", 1 )
|
|
|
|
|
lmap.map( "0/0", 1 )
|
|
|
|
|
assert_equal( lmap.mapping_str(1), "0/0;1-4/2" ) # could be "0/0;1-4/2" as well ...
|
|
|
|
|
|
|
|
|
|
lmap.map( RBA::LayerInfo::new(2, 2), RBA::LayerInfo::new(4, 4), 2 )
|
|
|
|
|
lmap.map( RBA::LayerInfo::new(0, 1), 2 )
|
|
|
|
|
assert_equal( lmap.mapping_str(2), "0/1;2-4/2-4" )
|
|
|
|
|
|
|
|
|
|
assert_equal( lmap.is_mapped?(RBA::LayerInfo::new(2, 4)), true )
|
|
|
|
|
assert_equal( lmap.is_mapped?(RBA::LayerInfo::new(0, 0)), true )
|
|
|
|
|
assert_equal( lmap.is_mapped?(RBA::LayerInfo::new(0, 100)), false )
|
|
|
|
|
|
|
|
|
|
assert_equal( lmap.logical(RBA::LayerInfo::new(2, 4)), 2 )
|
|
|
|
|
assert_equal( lmap.logical(RBA::LayerInfo::new(4, 2)), 2 )
|
|
|
|
|
assert_equal( lmap.logical(RBA::LayerInfo::new(1, 2)), 1 )
|
|
|
|
|
assert_equal( lmap.logical(RBA::LayerInfo::new(0, 0)), 1 )
|
|
|
|
|
assert_equal( lmap.logical(RBA::LayerInfo::new(100, 0)), -1 )
|
|
|
|
|
assert_equal( lmap.logical(RBA::LayerInfo::new(10, 2)), 0 )
|
|
|
|
|
assert_equal( lmap.logical(RBA::LayerInfo::new(1, 0)), 0 )
|
|
|
|
|
|
|
|
|
|
assert_equal( lmap.mapping(2).to_s, "2/2" )
|
|
|
|
|
assert_equal( lmap.mapping(1).to_s, "1/2" )
|
|
|
|
|
assert_equal( lmap.mapping(0).to_s, "10/2" )
|
|
|
|
|
|
|
|
|
|
lmap2 = lmap.dup
|
|
|
|
|
|
|
|
|
|
lmap.clear
|
|
|
|
|
assert_equal( lmap.is_mapped?(RBA::LayerInfo::new(2, 4)), false )
|
|
|
|
|
assert_equal( lmap.is_mapped?(RBA::LayerInfo::new(0, 0)), false )
|
|
|
|
|
assert_equal( lmap.is_mapped?(RBA::LayerInfo::new(0, 100)), false )
|
|
|
|
|
|
|
|
|
|
assert_equal( lmap2.is_mapped?(RBA::LayerInfo::new(2, 4)), true )
|
|
|
|
|
assert_equal( lmap2.is_mapped?(RBA::LayerInfo::new(0, 0)), true )
|
|
|
|
|
assert_equal( lmap2.is_mapped?(RBA::LayerInfo::new(0, 100)), false )
|
|
|
|
|
|
|
|
|
|
assert_equal( lmap2.mapping(0).to_s, "10/2" )
|
|
|
|
|
|
|
|
|
|
lmap2.assign( lmap )
|
|
|
|
|
assert_equal( lmap2.is_mapped?(RBA::LayerInfo::new(2, 4)), false )
|
|
|
|
|
assert_equal( lmap2.is_mapped?(RBA::LayerInfo::new(0, 0)), false )
|
|
|
|
|
assert_equal( lmap2.is_mapped?(RBA::LayerInfo::new(0, 100)), false )
|
|
|
|
|
|
|
|
|
|
lmap = RBA::LayerMap::new
|
|
|
|
|
lmap.map( "2/2:4/4", 0 )
|
|
|
|
|
lmap.map( RBA::LayerInfo::new(0, 1), 2, RBA::LayerInfo::new(5, 5) )
|
|
|
|
|
assert_equal( lmap.mapping_str(0), "2/2 : 4/4" )
|
|
|
|
|
assert_equal( lmap.mapping(0).to_s, "4/4" )
|
|
|
|
|
assert_equal( lmap.mapping(2).to_s, "5/5" )
|
|
|
|
|
|
|
|
|
|
lmap = RBA::LayerMap::new
|
|
|
|
|
|
|
|
|
|
lmap.map("*/*", 0)
|
|
|
|
|
lmap.unmap(RBA::LayerInfo::new(5, 10))
|
|
|
|
|
assert_equal(lmap.mapping_str(0), "0-4/*;5/0-9,11-*;6-*/*")
|
|
|
|
|
|
|
|
|
|
lmap.clear
|
|
|
|
|
lmap.map("*/*", 0)
|
|
|
|
|
lmap.unmap(RBA::LayerInfo::new(5, 10), RBA::LayerInfo::new(16, 21))
|
|
|
|
|
assert_equal(lmap.mapping_str(0), "0-4/*;5-16/0-9,22-*;17-*/*")
|
|
|
|
|
|
|
|
|
|
lmap.clear
|
|
|
|
|
lmap.map("*/*", 0)
|
|
|
|
|
lmap.unmap("5-16/10-21")
|
|
|
|
|
assert_equal(lmap.mapping_str(0), "0-4/*;5-16/0-9,22-*;17-*/*")
|
|
|
|
|
|
|
|
|
|
lmap.clear
|
|
|
|
|
lmap.map("*/*", 0)
|
|
|
|
|
lmap.mmap(RBA::LayerInfo::new(5, 10), 1)
|
|
|
|
|
assert_equal(lmap.mapping_str(0), "+*/*")
|
|
|
|
|
assert_equal(lmap.mapping_str(1), "+5/10")
|
|
|
|
|
|
|
|
|
|
lmap.clear
|
|
|
|
|
lmap.map("*/*", 0)
|
|
|
|
|
lmap.mmap(RBA::LayerInfo::new(5, 10), 1, RBA::LayerInfo::new(100, 0))
|
|
|
|
|
assert_equal(lmap.mapping_str(0), "+*/*")
|
|
|
|
|
assert_equal(lmap.mapping_str(1), "+5/10 : 100/0")
|
|
|
|
|
|
|
|
|
|
lmap.clear
|
|
|
|
|
lmap.map("*/*", 0)
|
|
|
|
|
lmap.mmap(RBA::LayerInfo::new(5, 10), RBA::LayerInfo::new(16, 21), 1)
|
|
|
|
|
assert_equal(lmap.mapping_str(0), "+*/*")
|
|
|
|
|
assert_equal(lmap.mapping_str(1), "+5-16/10-21")
|
|
|
|
|
|
|
|
|
|
lmap.clear
|
|
|
|
|
lmap.map("*/*", 0)
|
|
|
|
|
lmap.mmap(RBA::LayerInfo::new(5, 10), RBA::LayerInfo::new(16, 21), 1, RBA::LayerInfo::new(100, 0))
|
|
|
|
|
assert_equal(lmap.mapping_str(0), "+*/*")
|
|
|
|
|
assert_equal(lmap.mapping_str(1), "+5-16/10-21 : 100/0")
|
|
|
|
|
|
|
|
|
|
lmap.clear
|
|
|
|
|
lmap.map("*/*", 0)
|
|
|
|
|
lmap.mmap("5-16/10-21", 1)
|
|
|
|
|
assert_equal(lmap.mapping_str(0), "+*/*")
|
|
|
|
|
assert_equal(lmap.mapping_str(1), "+5-16/10-21")
|
|
|
|
|
|
|
|
|
|
assert_equal(lmap.logicals(RBA::LayerInfo::new(5, 10)), [ 0, 1 ])
|
|
|
|
|
assert_equal(lmap.logicals(RBA::LayerInfo::new(0, 10)), [ 0 ])
|
|
|
|
|
|
|
|
|
|
# optional log layer
|
|
|
|
|
lmap.clear
|
|
|
|
|
lmap.map("*/*")
|
|
|
|
|
lmap.mmap("5-16/10-22")
|
|
|
|
|
assert_equal(lmap.mapping_str(0), "+*/*")
|
|
|
|
|
assert_equal(lmap.mapping_str(1), "+5-16/10-22")
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_3
|
|
|
|
|
|
|
|
|
|
# LayerMap tests
|
|
|
|
|
lm = RBA::LayerMap.new
|
|
|
|
|
lm.map("1-10/5-20", 0)
|
|
|
|
|
lm.map("3/0", 1)
|
|
|
|
|
assert_equal(lm.is_mapped?(RBA::LayerInfo.new(0, 0)), false)
|
|
|
|
|
assert_equal(lm.is_mapped?(RBA::LayerInfo.new(3, 0)), true)
|
|
|
|
|
assert_equal(lm.is_mapped?(RBA::LayerInfo.new(3, 1)), false)
|
|
|
|
|
assert_equal(lm.is_mapped?(RBA::LayerInfo.new(3, 5)), true)
|
|
|
|
|
assert_equal(lm.is_mapped?(RBA::LayerInfo.new(3, 20)), true)
|
|
|
|
|
assert_equal(lm.is_mapped?(RBA::LayerInfo.new(1, 5)), true)
|
|
|
|
|
assert_equal(lm.is_mapped?(RBA::LayerInfo.new(1, 20)), true)
|
|
|
|
|
assert_equal(lm.mapping_str(1), "3/0")
|
|
|
|
|
assert_equal(lm.mapping(1).to_s, "3/0")
|
|
|
|
|
assert_equal(lm.logical(RBA::LayerInfo.new(3, 0)), 1)
|
|
|
|
|
|
|
|
|
|
lm.clear
|
|
|
|
|
assert_equal(lm.is_mapped?(RBA::LayerInfo.new(3, 0)), false)
|
|
|
|
|
lm.map(RBA::LayerInfo.new(3, 0), 2)
|
|
|
|
|
assert_equal(lm.logical(RBA::LayerInfo.new(3, 0)), 2)
|
|
|
|
|
|
|
|
|
|
lm.map(RBA::LayerInfo.new(1, 0), RBA::LayerInfo.new(10, 10), 1)
|
|
|
|
|
assert_equal(lm.logical(RBA::LayerInfo.new(3, 0)), 1)
|
|
|
|
|
assert_equal(lm.logical(RBA::LayerInfo.new(3, 3)), 1)
|
|
|
|
|
assert_equal(lm.logical(RBA::LayerInfo.new(1, 3)), 1)
|
|
|
|
|
end
|
|
|
|
|
|
2017-02-12 13:21:08 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
load("test_epilogue.rb")
|