edge.py
1 # SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-or-later OR CERN-OHL-S-2.0+ OR Apache-2.0 2 # type: ignore 3 import unittest 4 5 from pdkmaster.technology import mask as _msk, edge as _edg 6 from pdkmaster.dispatch.edge import EdgeDispatcher 7 8 9 # Simple dispatcher that just returns the type of the edge 10 class MyDispatcher(EdgeDispatcher): 11 def _Edge(self, edge: _edg.EdgeT): 12 return type(edge) 13 14 15 class EdgeDispatchTest(unittest.TestCase): 16 def test_notimplemented(self): 17 with self.assertRaises(NotImplementedError): 18 # Call ShapeDispatched._Shape() method 19 mask = _msk.DesignMask(name="test") 20 EdgeDispatcher()(_edg.MaskEdge(mask)) 21 22 def test_dispatch(self): 23 disp = MyDispatcher() 24 25 with self.assertRaises(RuntimeError): 26 disp("error") 27 28 mask1 = _msk.DesignMask(name="mask1") 29 mask2 = _msk.DesignMask(name="mask2") 30 31 edge1 = _edg.MaskEdge(mask1) 32 edge2 = _edg.MaskEdge(mask2) 33 operation = edge1.interact_with(mask2) 34 join = _edg.Join(edges=(edge1, edge2)) 35 intersect = _edg.Intersect(edges=(edge1, edge2)) 36 37 # Just run with all mask to get code coverage 38 edges = ( 39 edge1, operation, join, intersect 40 ) 41 for edge in edges: 42 self.assertIs(disp(edge), type(edge))