mirror of https://github.com/KLayout/klayout.git
Added unit test for briding sample lib.
This commit is contained in:
parent
9418185771
commit
e1858973e2
|
|
@ -1,4 +1,43 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
KLayout Layout Viewer
|
||||||
|
Copyright (C) 2006-2018 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
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
This Python library demonstrates the use of the GSI/Python binding
|
||||||
|
API for developing "bridge" applications - i.e. libraries that access
|
||||||
|
the KLayout objects through their C++ API.
|
||||||
|
|
||||||
|
This sample library provides two conversion functions:
|
||||||
|
|
||||||
|
bridge.p2a(poly) Converts pya.DSimplePolygon objects to Python
|
||||||
|
arrays with the structure [ (x, y), ... ].
|
||||||
|
|
||||||
|
bridge.a2p(array) Does the inverse transformation
|
||||||
|
|
||||||
|
Use cases for such libraries are fast C++ based conversion of KLayout
|
||||||
|
objects into other objects and vice versa.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
#include <Python.h>
|
#include <Python.h>
|
||||||
|
|
||||||
#include "pyaConvert.h"
|
#include "pyaConvert.h"
|
||||||
|
|
@ -108,16 +147,16 @@ static PyMethodDef BridgeMethods[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
PyMODINIT_FUNC
|
PyMODINIT_FUNC
|
||||||
initbridge ()
|
initbridge_sample ()
|
||||||
{
|
{
|
||||||
PyObject *m;
|
PyObject *m;
|
||||||
|
|
||||||
m = Py_InitModule ("bridge", BridgeMethods);
|
m = Py_InitModule ("bridge_sample", BridgeMethods);
|
||||||
if (m == NULL) {
|
if (m == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BridgeError = PyErr_NewException ((char *) "bridge.error", NULL, NULL);
|
BridgeError = PyErr_NewException ((char *) "bridge_sample.error", NULL, NULL);
|
||||||
Py_INCREF (BridgeError);
|
Py_INCREF (BridgeError);
|
||||||
PyModule_AddObject (m, "error", BridgeError);
|
PyModule_AddObject (m, "error", BridgeError);
|
||||||
}
|
}
|
||||||
|
|
@ -35,10 +35,11 @@ DESTDIR = $$OUT_PWD/../..
|
||||||
TEMPLATE = lib
|
TEMPLATE = lib
|
||||||
|
|
||||||
# That's how we name our library
|
# That's how we name our library
|
||||||
TARGET = bridge
|
TARGET = bridge_sample
|
||||||
|
|
||||||
# The only source
|
# The only source
|
||||||
SOURCES = bridge.cc
|
SOURCES = \
|
||||||
|
bridge_sample.cc
|
||||||
|
|
||||||
# Include QtCore required for some includes
|
# Include QtCore required for some includes
|
||||||
QT = core
|
QT = core
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,8 @@ int run_pymodtest (tl::TestBase * /*_this*/, const std::string &fn)
|
||||||
#define PYMODTEST(n, file) \
|
#define PYMODTEST(n, file) \
|
||||||
TEST(n) { EXPECT_EQ (run_pymodtest(_this, file), 0); }
|
TEST(n) { EXPECT_EQ (run_pymodtest(_this, file), 0); }
|
||||||
|
|
||||||
|
PYMODTEST (bridge, "bridge.py")
|
||||||
|
|
||||||
PYMODTEST (import_tl, "import_tl.py")
|
PYMODTEST (import_tl, "import_tl.py")
|
||||||
PYMODTEST (import_db, "import_db.py")
|
PYMODTEST (import_db, "import_db.py")
|
||||||
PYMODTEST (import_lay, "import_lay.py")
|
PYMODTEST (import_lay, "import_lay.py")
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
# KLayout Layout Viewer
|
||||||
|
# Copyright (C) 2006-2018 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 pykl.db as db
|
||||||
|
import bridge_sample as bridge
|
||||||
|
import unittest
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Tests the basic abilities of the module
|
||||||
|
|
||||||
|
class BridgeTest(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_1(self):
|
||||||
|
p = db.DSimplePolygon(db.DBox(1,2,3,4))
|
||||||
|
a = bridge.p2a(p)
|
||||||
|
self.assertEqual(repr(bridge.p2a(p)), "[(1.0, 2.0), (1.0, 4.0), (3.0, 4.0), (3.0, 2.0)]")
|
||||||
|
|
||||||
|
def test_2(self):
|
||||||
|
p = db.DSimplePolygon(db.DBox(1,2,3,4))
|
||||||
|
a = bridge.p2a(p)
|
||||||
|
pp = bridge.a2p(a)
|
||||||
|
self.assertEqual(repr(pp), "(1,2;1,4;3,4;3,2)")
|
||||||
|
self.assertEqual(type(pp).__name__, "DSimplePolygon")
|
||||||
|
|
||||||
|
# run unit tests
|
||||||
|
if __name__ == '__main__':
|
||||||
|
suite = unittest.TestSuite()
|
||||||
|
suite = unittest.TestLoader().loadTestsFromTestCase(BridgeTest)
|
||||||
|
|
||||||
|
if not unittest.TextTestRunner(verbosity = 1).run(suite).wasSuccessful():
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue