/ test / unit / technology / 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 rule as _rle
 6  
 7  
 8  class RuleTest(unittest.TestCase):
 9      def test_error(self):
10          class MyRule(_rle._Rule):
11              def __init__(self):
12                  pass
13  
14              def __eq__(self, other: object) -> bool:
15                  return super().__eq__(other)
16  
17              def __hash__(self):
18                  return super().__hash__()
19  
20          rule = MyRule()
21  
22          with self.assertRaises(TypeError):
23              rule == rule
24          with self.assertRaises(TypeError):
25              hash(rule)
26          with self.assertRaises(ValueError):
27              bool(rule)
28  
29      def test_rule(self):
30          class MyRule(_rle._Rule):
31              def __init__(self, *, name: str):
32                  self.name = name
33  
34              def __eq__(self, other):
35                  return isinstance(other, MyRule) and self.name == other.name
36  
37              def __hash__(self):
38                  return hash(self.name)
39  
40          rule1 = MyRule(name="Rule1")
41          rule1b = MyRule(name="Rule1")
42          rule2 = MyRule(name="Rule2")
43  
44          self.assertEqual(rule1, rule1b)
45          self.assertEqual(hash(rule1), hash(rule1b))
46          self.assertNotEqual(rule1, rule2)
47  
48          # Just create a Rules object to increase code coverage
49          rules = _rle.Rules((rule1, rule2))
50          self.assertEqual(rule1, rules[0])
51  
52      def test_condition(self):
53          class MyCond(_rle._Condition):
54              def __init__(self, *, str1: str, str2: str):
55                  super().__init__(elements=(str1, str2))
56  
57              def __repr__(self):
58                  return f"MyCond(str1={self._elements[0]!r}, str2={self._elements[1]!r})"
59  
60          strs = ("Hello", "world")
61          cond = MyCond(str1=strs[0], str2=strs[1])
62          cond2 = MyCond(str1=strs[0], str2=strs[1])
63  
64          self.assertNotEqual(cond, strs[0])
65          self.assertEqual(cond, cond2)
66          self.assertEqual(hash(cond), hash(cond2))
67          self.assertEqual(hash(cond), hash(strs))