Coverage for tests/test_float.py: 100%
107 statements
« prev ^ index » next coverage.py v7.4.1, created at 2024-02-08 22:32 +0100
« prev ^ index » next coverage.py v7.4.1, created at 2024-02-08 22:32 +0100
1"""
2test for Float()
3"""
4import unittest
5import math
7from stricto import Float, Error
10def pair_only(value, o): # pylint: disable=unused-argument
11 """
12 return the value if par, or value +1
13 """
14 return value + 1.0 if value % 2 else value
17def check_pair(value, o): # pylint: disable=unused-argument
18 """
19 return true if pair
20 """
21 return not value % 2
24class TestInt(unittest.TestCase):
25 """
26 Test on Float
27 """
28 def __init__(self, m):
29 unittest.TestCase.__init__(self, m)
30 self.on_change_bool = False
32 def test_error_type(self):
33 """
34 Test error of type
35 """
36 a = Float()
37 with self.assertRaises(Error) as e:
38 a.set("dd")
39 self.assertEqual(e.exception.message, "Must be a float")
41 def test_default(self):
42 """
43 Test default value
44 """
45 a = Float()
46 self.assertEqual(a, None)
47 a = Float(default=3.14)
48 b = a + 2.0
49 self.assertEqual(a, 3.14)
50 self.assertEqual(math.isclose(b.get_value(), 5.14), True)
52 def test_min(self):
53 """
54 Test min
55 """
56 a = Float(min=10.0)
57 with self.assertRaises(Error) as e:
58 a.set(9.9)
59 self.assertEqual(e.exception.message, "Must be above Minimal")
61 def test_max(self):
62 """
63 Test max
64 """
65 a = Float(max=10.0)
66 with self.assertRaises(Error) as e:
67 a.set(10.00001)
68 self.assertEqual(e.exception.message, "Must be below Maximal")
70 def test_float_operator(self):
71 """
72 Test __operators__
73 """
74 c = Float( default=5.0)
75 for d in [ Float(default=2.0), 2.0 ]:
76 self.assertEqual(c+d, 7)
77 self.assertEqual(c-d, 3)
78 self.assertEqual(c*d, 10)
79 self.assertEqual(c**d, 25)
80 self.assertEqual(c//d, 2)
81 self.assertEqual(c/d, 2.5)
82 self.assertEqual(c%d, 1)
84 def test_copy(self):
85 """
86 Test ref and copy()
87 """
88 a = Float(max=10.0)
89 a.set(9.0)
90 b = a.copy()
91 self.assertEqual(b, 9.0)
92 with self.assertRaises(Error) as e:
93 b.set(a + 3)
94 self.assertEqual(e.exception.message, "Must be below Maximal")
96 def test_comparison(self):
97 """
98 test comparison operators
99 """
100 a = Float(max=10.0)
101 a.set(9.0)
102 b = Float()
103 b.set(9.0)
104 self.assertEqual(b, a)
105 b.set(11.0)
106 self.assertGreater(b, a)
107 self.assertGreaterEqual(b, a)
109 def test_object_affectation(self):
110 """
111 Test __add__
112 """
113 a = Float(max=10.0)
114 a.set(9.0)
115 b = Float()
116 b.set(9.0)
117 with self.assertRaises(Error) as e:
118 c = a + b
119 self.assertEqual(e.exception.message, "Must be below Maximal")
120 c = b + a
121 self.assertEqual(type(c), Float)
122 self.assertEqual(c, 18.0)
124 def test_transform(self):
125 """
126 Test transform= option
127 """
128 a = Float(transform=pair_only)
129 a.set(10.0)
130 self.assertEqual(a, 10.0)
131 a.set(9.0)
132 self.assertEqual(a, 10.0)
134 def test_transform_lambda(self):
135 """
136 Test transform with a lambda
137 """
138 a = Float(transform=lambda value, o: value + 1.0 if value % 2 else value)
139 a.set(10.0)
140 self.assertEqual(a, 10.0)
141 a.set(9.0)
142 self.assertEqual(a, 10.0)
144 def test_constraint(self):
145 """
146 Test constraints
147 """
148 a = Float(constraint=check_pair)
149 with self.assertRaises(Error) as e:
150 a.set(11.0)
151 self.assertEqual(e.exception.message, "constraint not validated")
152 a = Float(constraint=[check_pair])
153 with self.assertRaises(Error) as e:
154 a.set(11.0)
155 self.assertEqual(e.exception.message, "constraint not validated")
156 a.set(10.0)
157 self.assertEqual(a, 10.0)
159 def test_transform_on_change(self):
160 """
161 Test onChange option
162 """
163 self.on_change_bool = False
165 def change_test(old_value, value, o): # pylint: disable=unused-argument
166 """
167 just a change option
168 """
169 self.on_change_bool = True
171 a = Float(onChange=change_test)
172 self.on_change_bool = False
173 a.set(10.0)
174 self.assertEqual(self.on_change_bool, True)
175 self.on_change_bool = False
176 a.set(10.0)
177 self.assertEqual(self.on_change_bool, False)
178 a.set(11.0)
179 self.assertEqual(self.on_change_bool, True)