/ test / unit / technology / property.py
property.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 property_ as _prp
 6  
 7  
 8  class PropertyTest(unittest.TestCase):
 9      def test_enclosure(self):
10          with self.assertRaises(ValueError):
11              _prp.Enclosure((0.0, 0.1, 0.2))
12  
13          enc1 = _prp.Enclosure(2.0)
14          enc2 = _prp.Enclosure((1.0, 2.0))
15          enc3 = _prp.Enclosure((2.0, 1.0))
16  
17          self.assertEqual(hash(enc1), hash(enc1.spec))
18          self.assertFalse(enc1.is_assymetric)
19          self.assertTrue(enc2.is_assymetric)
20          self.assertNotEqual(enc1, 2.0)
21          self.assertEqual(enc2.min(), 1.0)
22          self.assertEqual(enc2.max(), 2.0)
23          self.assertEqual(enc2.tall(), enc2)
24          self.assertNotEqual(enc3.tall(), enc3)
25          self.assertEqual(enc3.tall(), enc2)
26          self.assertNotEqual(enc2.wide(), enc2)
27          self.assertEqual(enc2.wide(), enc3)
28          self.assertEqual(enc3.wide(), enc3)
29  
30      def test_property(self):
31          class WrongProp(_prp._Property):
32              value_conv = _prp._Property
33              value_type = _prp._Property
34              value_type_str = "Property"
35  
36          class StrProperty(_prp._Property):
37              value_conv = None
38              value_type = str
39              value_type_str = "str"
40  
41          with self.assertRaises(TypeError):
42              WrongProp(name="wrongprop")
43  
44          prop = _prp._Property(name="height")
45  
46          self.assertEqual(hash(prop), hash(prop.name))
47          with self.assertRaises(TypeError):
48              prop.cast(None)
49          with self.assertRaises(TypeError):
50              prop.cast("a")
51  
52          id = StrProperty(name="id")
53          with self.assertRaises(TypeError):
54              id.cast(2.3)
55  
56      def test_enclosureproperty(self):
57          enc = _prp.Enclosure(2.0)
58          enc2 = _prp.Enclosure(2.0)
59          enc3 = _prp.Enclosure((1.0, 3.0))
60          enc4 = _prp.Enclosure((3.0, 1.0))
61  
62          self.assertEqual(enc, enc2)
63          self.assertNotEqual(enc, enc3)
64          self.assertNotEqual(enc3, enc4)
65  
66          self.assertEqual(str(enc), "Enclosure(2.0)")
67          self.assertEqual(str(enc3), "Enclosure((1.0,3.0))")
68  
69          prop = _prp._EnclosureProperty(name="enclosure")
70  
71          self.assertEqual(prop.cast(2.3), _prp.Enclosure(2.3))
72  
73      def test_binarypropcond(self):
74          class WrongCond(_prp._Comparison):
75              pass
76  
77          with self.assertRaises(TypeError):
78              WrongCond(left=None, right=None)
79  
80          prop = _prp._Property(name="width")
81          cond1 = prop > 1.0
82          cond2 = prop > 1.0
83          cond3 = prop > 2.0
84          cond4 = prop == 1.0
85          cond5 = prop < 1.0
86          cond6 = prop <= 1.0
87          cond7 = prop >= 1.0
88  
89          self.assertNotEqual(cond1, 5)
90          self.assertEqual(cond1, cond2)
91          self.assertNotEqual(cond1, cond3)
92          self.assertNotEqual(cond1, cond4)
93          self.assertNotEqual(cond1, cond5)
94          self.assertNotEqual(cond1, cond6)
95          self.assertNotEqual(cond1, cond7)
96          self.assertEqual(repr(cond1), "_Property(name='width', allow_non=False) > 1.0")
97          with self.assertRaises(TypeError):
98              bool(cond1)
99          self.assertFalse(cond4)