Merge pull request #1292 from thomaslima/issue-1265

added test for issue 1265 (writing and reading pngs)
This commit is contained in:
Matthias Köfferlein 2023-02-16 21:25:26 +01:00 committed by GitHub
commit 81ccc22600
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 85 additions and 32 deletions

View File

@ -106,10 +106,10 @@ PYTHONTEST (dbLayoutToNetlist, "dbLayoutToNetlist.py")
PYTHONTEST (dbLayoutVsSchematic, "dbLayoutVsSchematic.py")
PYTHONTEST (dbNetlistCrossReference, "dbNetlistCrossReference.py")
PYTHONTEST (layLayers, "layLayers.py")
PYTHONTEST (layPixelBuffer, "layPixelBuffer.py")
PYTHONTEST (tlTest, "tlTest.py")
#if defined(HAVE_QT) && defined(HAVE_QTBINDINGS)
PYTHONTEST (qtbinding, "qtbinding.py")
#endif
#endif

View File

@ -22,20 +22,23 @@ import dbLayoutToNetlist
import dbLayoutVsSchematic
import dbNetlistCrossReference
import layLayers
import layPixelBuffer
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(tlTest.TLTest)
suite = unittest.TestLoader().loadTestsFromTestCase(dbPCells.DBPCellTests)
suite = unittest.TestLoader().loadTestsFromTestCase(dbLayoutTest.DBLayoutTest)
suite = unittest.TestLoader().loadTestsFromTestCase(dbPolygonTest.DBPolygonTests)
suite = unittest.TestLoader().loadTestsFromTestCase(dbReaders.DBReadersTests)
suite = unittest.TestLoader().loadTestsFromTestCase(dbRegionTest.DBRegionTest)
suite = unittest.TestLoader().loadTestsFromTestCase(dbTransTest.DBTransTests)
suite = unittest.TestLoader().loadTestsFromTestCase(dbLayoutToNetlist.DBLayoutToNetlistTests)
suite = unittest.TestLoader().loadTestsFromTestCase(dbLayoutVsSchematic.DBLayoutVsSchematicTests)
suite = unittest.TestLoader().loadTestsFromTestCase(dbNetlistCrossReference.DBNetlistCrossReferenceTests)
suite = unittest.TestLoader().loadTestsFromTestCase(layLayers.LAYLayersTests)
loader = unittest.TestLoader()
suite = unittest.TestSuite()
suite.addTests(loader.loadTestsFromTestCase(tlTest.TLTest))
suite.addTests(loader.loadTestsFromTestCase(dbPCells.DBPCellTests))
suite.addTests(loader.loadTestsFromTestCase(dbLayoutTest.DBLayoutTest))
suite.addTests(loader.loadTestsFromTestCase(dbPolygonTest.DBPolygonTests))
suite.addTests(loader.loadTestsFromTestCase(dbReaders.DBReadersTests))
suite.addTests(loader.loadTestsFromTestCase(dbRegionTest.DBRegionTest))
suite.addTests(loader.loadTestsFromTestCase(dbTransTest.DBTransTests))
suite.addTests(loader.loadTestsFromTestCase(dbLayoutToNetlist.DBLayoutToNetlistTests))
suite.addTests(loader.loadTestsFromTestCase(dbLayoutVsSchematic.DBLayoutVsSchematicTests))
suite.addTests(loader.loadTestsFromTestCase(dbNetlistCrossReference.DBNetlistCrossReferenceTests))
suite.addTests(loader.loadTestsFromTestCase(layLayers.LAYLayersTests))
suite.addTests(loader.loadTestsFromTestCase(layPixelBuffer.LAYPixelBufferTests))
if not unittest.TextTestRunner(verbosity = 1).run(suite).wasSuccessful():
sys.exit(1)

View File

@ -46,7 +46,7 @@ class DBLayoutToNetlistTests(unittest.TestCase):
self.assertEqual(l2n.internal_layout().top_cell().name, ly.top_cell().name)
self.assertEqual(l2n.internal_top_cell().name, ly.top_cell().name)
self.assertNotEqual(l2n.layer_of(r), ly.layer(6, 0)) # would be a strange coincidence ...
self.assertNotEqual(l2n.layer_of(r), ly.layer(6, 0)) # would be a strange coincidence ...
cm = l2n.const_cell_mapping_into(ly, ly.top_cell())
for ci in range(0, l2n.internal_layout().cells()):
@ -80,7 +80,7 @@ class DBLayoutToNetlistTests(unittest.TestCase):
rvia1 = l2n.make_polygon_layer( ly.layer(7, 0), "via1" )
rmetal2 = l2n.make_polygon_layer( ly.layer(8, 0), "metal2" )
rmetal2_lbl = l2n.make_text_layer( ly.layer(8, 1), "metal2_lbl" )
# Intra-layer
l2n.connect(rmetal1)
l2n.connect(rvia1)
@ -92,7 +92,7 @@ class DBLayoutToNetlistTests(unittest.TestCase):
l2n.connect(rmetal1, rmetal1_lbl) # attaches labels
l2n.connect(rmetal2, rmetal2_lbl) # attaches labels
# Perform netlist extraction
# Perform netlist extraction
l2n.extract_netlist()
self.assertEqual(str(l2n.netlist()), """circuit TRANS ($1=$1,$2=$2);
@ -137,7 +137,7 @@ end;
self.assertEqual(",".join(a), "$2")
self.assertEqual(str(t), "r0 *1 2.64,0")
self.assertEqual(str(l2n.shapes_of_net(n, rmetal1, True)),
self.assertEqual(str(l2n.shapes_of_net(n, rmetal1, True)),
"(-980,-420;-980,2420;-620,2420;-620,-420);(-800,820;-800,1180;580,1180;580,820);(-980,2420;-980,3180;-620,3180;-620,2420);(-980,-380;-980,380;-620,380;-620,-380)")
shapes = pya.Shapes()
@ -145,7 +145,7 @@ end;
r = pya.Region()
for s in shapes.each():
r.insert(s.polygon)
self.assertEqual(str(r),
self.assertEqual(str(r),
"(-980,-420;-980,2420;-620,2420;-620,-420);(-800,820;-800,1180;580,1180;580,820);(-980,2420;-980,3180;-620,3180;-620,2420);(-980,-380;-980,380;-620,380;-620,-380)")
def test_10_LayoutToNetlistExtractionWithoutDevices(self):
@ -169,7 +169,7 @@ end;
rvia1 = l2n.make_polygon_layer( ly.layer(7, 0), "via1" )
rmetal2 = l2n.make_polygon_layer( ly.layer(8, 0), "metal2" )
rmetal2_lbl = l2n.make_text_layer( ly.layer(8, 1), "metal2_lbl" )
rsd = ractive - rpoly
l2n.register(rsd, "sd")
@ -194,7 +194,7 @@ end;
l2n.connect(rmetal1, rmetal1_lbl) # attaches labels
l2n.connect(rmetal2, rmetal2_lbl) # attaches labels
# Perform netlist extraction
# Perform netlist extraction
l2n.extract_netlist()
self.assertEqual(str(l2n.netlist()), """circuit TRANS ($1=$1,$2=$2,$3=$3);
@ -247,7 +247,7 @@ end;
rnactive = ractive - rnwell
rngate = rnactive & rpoly
rnsd = rnactive - rngate
# PMOS transistor device extraction
pmos_ex = pya.DeviceExtractorMOS3Transistor("PMOS")
l2n.extract_devices(pmos_ex, { "SD": rpsd, "G": rpgate, "P": rpoly })
@ -282,8 +282,8 @@ end;
l2n.connect(rpoly, rpoly_lbl) # attaches labels
l2n.connect(rmetal1, rmetal1_lbl) # attaches labels
l2n.connect(rmetal2, rmetal2_lbl) # attaches labels
# Perform netlist extraction
# Perform netlist extraction
l2n.extract_netlist()
self.assertEqual(str(l2n.netlist()), """circuit RINGO ();
@ -397,8 +397,8 @@ end;
# Global connections
l2n.connect_global(rptie, "BULK")
l2n.connect_global(rbulk, "BULK")
# Perform netlist extraction
# Perform netlist extraction
l2n.extract_netlist()
self.assertEqual(str(l2n.netlist()), """circuit RINGO ();
@ -455,7 +455,7 @@ end;
def test_13_ReadAndWrite(self):
ut_testsrc = os.getenv("TESTSRC")
ut_testtmp = os.getenv("TESTTMP")
ut_testtmp = os.getenv("TESTTMP", "")
l2n = pya.LayoutToNetlist()
@ -725,4 +725,3 @@ if __name__ == '__main__':
if not unittest.TextTestRunner(verbosity = 1).run(suite).wasSuccessful():
sys.exit(1)

View File

@ -98,7 +98,7 @@ class DBLayoutVsSchematicTests(unittest.TestCase):
lvs.connect(metal2)
lvs.connect(ptie)
lvs.connect(ntie)
# inter-layer
lvs.connect(psd, diff_cont)
lvs.connect(nsd, diff_cont)
@ -113,7 +113,7 @@ class DBLayoutVsSchematicTests(unittest.TestCase):
lvs.connect(poly, poly_lbl) # attaches labels
lvs.connect(metal1, metal1_lbl) # attaches labels
lvs.connect(metal2, metal2_lbl) # attaches labels
# global
lvs.connect_global(ptie, "BULK")
lvs.connect_global(bulk, "BULK")
@ -144,7 +144,7 @@ class DBLayoutVsSchematicTests(unittest.TestCase):
def test_3_ReadAndWrite(self):
ut_testsrc = os.getenv("TESTSRC")
ut_testtmp = os.getenv("TESTTMP")
ut_testtmp = os.getenv("TESTTMP", "")
lvs = pya.LayoutVsSchematic()
@ -181,4 +181,3 @@ if __name__ == '__main__':
if not unittest.TextTestRunner(verbosity = 1).run(suite).wasSuccessful():
sys.exit(1)

52
testdata/python/layPixelBuffer.py vendored Normal file
View File

@ -0,0 +1,52 @@
# KLayout Layout Viewer
# Copyright (C) 2006-2023 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
import pya
import unittest
import os
import sys
class LAYPixelBufferTests(unittest.TestCase):
def test_4(self):
pb = pya.PixelBuffer(10, 20)
pb.transparent = True
pb.fill(0xf0010203)
png = pb.to_png_data()
# some range because implementations may differ
self.assertGreater(len(png), 20)
self.assertLess(len(png), 200)
pb_copy = pya.PixelBuffer.from_png_data(png)
self.assertEqual(pb, pb_copy)
ut_testtmp = os.getenv("TESTTMP", ".")
tmp = os.path.join(ut_testtmp, "tmp.png")
pb.write_png(tmp)
pb_copy = pya.PixelBuffer.read_png(tmp)
self.assertEqual(pb, pb_copy)
# run unit tests
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(LAYPixelBufferTests)
if not unittest.TextTestRunner(verbosity = 1).run(suite).wasSuccessful():
sys.exit(1)