/ test / unit / dispatch / edge.py
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))