mirror of
https://github.com/KLayout/klayout.git
synced 2026-09-07 11:31:08 +02:00
Merge pull request #2178 from KLayout/feature/issue-2168
Feature/issue 2168
This commit is contained in:
Vendored
+144
-6
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user