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)