Merge pull request #2178 from KLayout/feature/issue-2168

Feature/issue 2168
This commit is contained in:
Matthias Köfferlein
2025-10-18 13:51:25 +02:00
committed by GitHub
12 changed files with 446 additions and 44 deletions
+144 -6
View File
@@ -23,6 +23,19 @@ end
load("test_prologue.rb")
class MyLibImpl < RBA::Library
def initialize
@reload_count = 0
end
def reload_count
@reload_count
end
def reload
@reload_count += 1
return "RBA-unit-test2"
end
end
class DBLibrary_TestClass < TestBase
def test_1_registration
@@ -45,14 +58,17 @@ class DBLibrary_TestClass < TestBase
assert_equal(RBA::Library::library_names.member?("RBA-unit-test"), true)
assert_equal(RBA::Library::library_by_name("RBA-unit-test").id, lib_id)
# destroy should not do anything as libraries are not to be removed through the destructor
lib._destroy
assert_equal(RBA::Library::library_by_name("RBA-unit-test").id, lib_id)
assert_equal(lib.destroyed?, true)
# The library reference is kept internally
lib = nil
GC.start
GC.start
lib = RBA::Library::library_by_name("RBA-unit-test")
assert_equal(lib.destroyed?, false)
lib.delete
assert_equal(lib.name, "RBA-unit-test")
lib._destroy
assert_equal(lib.destroyed?, true)
assert_equal(RBA::Library::library_by_name("RBA-unit-test"), nil)
end
@@ -103,6 +119,128 @@ class DBLibrary_TestClass < TestBase
end
def test_4_library_registration_and_rename
lib = RBA::Library::new
lib.description = "LIB1"
lib.delete
assert_equal(lib.destroyed?, true)
lib = RBA::Library::new
lib.layout.create_cell("A")
lib.description = "LIB1"
lib.register("RBA-unit-test")
assert_equal(RBA::Library::library_by_name("RBA-unit-test").description, "LIB1")
lib.unregister
assert_equal(lib.destroyed?, false)
assert_equal(RBA::Library::library_by_name("RBA-unit-test"), nil)
lib.register("RBA-unit-test")
assert_equal(RBA::Library::library_by_name("RBA-unit-test").description, "LIB1")
ly = RBA::Layout::new
ci = ly.create_cell("A", "RBA-unit-test").cell_index
assert_equal(ly.cell(ci).qname, "RBA-unit-test.A")
lib.rename("RBA-unit-test2")
assert_equal(RBA::Library::library_by_name("RBA-unit-test"), nil)
assert_equal(RBA::Library::library_by_name("RBA-unit-test2").description, "LIB1")
assert_equal(ly.cell(ci).qname, "RBA-unit-test2.A")
lib.delete
assert_equal(RBA::Library::library_by_name("RBA-unit-test"), nil)
assert_equal(RBA::Library::library_by_name("RBA-unit-test2"), nil)
assert_equal(ly.cell(ci).qname, "<defunct>RBA-unit-test2.A")
end
def test_5_reload
lib = MyLibImpl::new
lib.description = "LIB1"
lib.register("RBA-unit-test")
assert_equal(RBA::Library::library_by_name("RBA-unit-test").description, "LIB1")
lib.refresh
assert_equal(RBA::Library::library_by_name("RBA-unit-test"), nil)
assert_equal(RBA::Library::library_by_name("RBA-unit-test2").description, "LIB1")
assert_equal(lib.reload_count, 1)
lib.delete
assert_equal(RBA::Library::library_by_name("RBA-unit-test"), nil)
assert_equal(RBA::Library::library_by_name("RBA-unit-test2"), nil)
end
def test_6_cells_become_defunct_after_unregister
lib = RBA::Library::new
lib.description = "LIB1"
lib.register("RBA-unit-test")
cell_a = lib.layout.create_cell("A")
l1 = lib.layout.layer(1, 0)
cell_a.shapes(l1).insert(RBA::Box::new(0, 0, 1000, 2000))
ly = RBA::Layout::new
lc = ly.create_cell("A", "RBA-unit-test")
assert_equal(lc.qname, "RBA-unit-test.A")
ci = lc.cell_index
lib.unregister
# NOTE: cleanup has not been called, so we can find the cell using the cell_index
# (the actual cell object is no longer there because it has been replaced by
# a cold proxy)
lc = ly.cell(ci)
assert_equal(lc.qname, "<defunct>RBA-unit-test.A")
# this will restore the reference
lib.register("RBA-unit-test")
lc = ly.cell(ci)
assert_equal(lc.qname, "RBA-unit-test.A")
end
def test_7_change_ref
lib = RBA::Library::new
lib.description = "LIB1"
lib.register("RBA-unit-test")
l1 = lib.layout.layer(1, 0)
cell_a = lib.layout.create_cell("A")
cell_a.shapes(l1).insert(RBA::Box::new(0, 0, 1000, 2000))
lib2 = RBA::Library::new
lib2.description = "LIB2"
lib2.register("RBA-unit-test2")
l1 = lib2.layout.layer(1, 0)
cell_b = lib2.layout.create_cell("B")
cell_b.shapes(l1).insert(RBA::Box::new(0, 0, 2000, 1000))
ly = RBA::Layout::new
c1 = ly.create_cell("A", "RBA-unit-test")
assert_equal(c1.qname, "RBA-unit-test.A")
c1.change_ref(lib2.id, cell_b.cell_index)
assert_equal(c1.qname, "RBA-unit-test2.B")
ly = RBA::Layout::new
c1 = ly.create_cell("A", "RBA-unit-test")
assert_equal(c1.qname, "RBA-unit-test.A")
c1.change_ref("RBA-unit-test2", "B")
assert_equal(c1.qname, "RBA-unit-test2.B")
end
end
load("test_epilogue.rb")