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))