/ test / unit / dispatch / rule.py
rule.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, property_ as _prp, rule as _rle
 6  from pdkmaster.dispatch.rule import RuleDispatcher
 7  
 8  
 9  # Simple dispatcher that just returns the type of the edge
10  class MyDispatcher(RuleDispatcher):
11      def _Rule(self, rule: _rle.RuleT):
12          return type(rule)
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              RuleDispatcher()(mask)
21  
22      def test_dispatch(self):
23          disp = MyDispatcher()
24  
25          with self.assertRaises(RuntimeError):
26              disp("error")
27  
28          prop = _prp._Property(name="prop")
29  
30          # _prp.Operators
31          gt = prop > 1.0
32          ge = prop >= 1.0
33          sm = prop < 1.0
34          se = prop <= 1.0
35          eq = prop == 1.0
36  
37          mask1 = _msk.DesignMask(name="mask1")
38          mask2 = _msk.DesignMask(name="mask2")
39  
40          alias = mask1.alias("alias")
41  
42          inside = mask1.is_inside(mask2)
43          outside = mask2.is_outside(mask2)
44  
45          connect = _msk.Connect(mask1=mask1, mask2=mask2)
46  
47          # Just run with all mask to get code coverage
48          rules = (
49              gt, ge, sm, se, eq,
50              mask1, alias, inside, outside, connect,
51          )
52          for rule in rules:
53              self.assertIs(disp(rule), type(rule))