Lines Matching refs:self
34 def __init__(self, num=0, den=1):
46 self.__num = int(num//g)
47 self.__den = int(den//g)
49 def _get_num(self):
51 return self.__num
54 def _get_den(self):
56 return self.__den
59 def __repr__(self):
61 return "Rat(%d, %d)" % (self.__num, self.__den)
63 def __str__(self):
65 return str(float(self))
67 def __float__(self):
69 return self.__num*1.0/self.__den
71 def __int__(self):
72 """Convert a Rat to an int; self.den must be 1."""
73 if self.__den == 1:
75 return int(self.__num)
78 repr(self))
79 raise ValueError("can't convert %s to int" % repr(self))
81 def __add__(self, other):
86 return Rat(self.__num*other.__den + other.__num*self.__den,
87 self.__den*other.__den)
89 return float(self) + other
94 def __sub__(self, other):
99 return Rat(self.__num*other.__den - other.__num*self.__den,
100 self.__den*other.__den)
102 return float(self) - other
105 def __rsub__(self, other):
110 return Rat(other.__num*self.__den - self.__num*other.__den,
111 self.__den*other.__den)
113 return other - float(self)
116 def __mul__(self, other):
119 return Rat(self.__num*other.__num, self.__den*other.__den)
121 return Rat(self.__num*other, self.__den)
123 return float(self)*other
128 def __truediv__(self, other):
131 return Rat(self.__num*other.__den, self.__den*other.__num)
133 return Rat(self.__num, self.__den*other)
135 return float(self) / other
138 def __rtruediv__(self, other):
141 return Rat(other.__num*self.__den, other.__den*self.__num)
143 return Rat(other*self.__den, self.__num)
145 return other / float(self)
148 def __floordiv__(self, other):
154 x = self/other
157 def __rfloordiv__(self, other):
159 x = other/self
162 def __divmod__(self, other):
168 x = self//other
169 return (x, self - other * x)
171 def __rdivmod__(self, other):
177 return divmod(other, self)
179 def __mod__(self, other):
181 return divmod(self, other)[1]
183 def __rmod__(self, other):
185 return divmod(other, self)[1]
187 def __eq__(self, other):
190 return self.__den == 1 and self.__num == other
192 return self.__num == other.__num and self.__den == other.__den
194 return float(self) == other
200 def test_gcd(self):
201 self.assertEqual(gcd(10, 12), 2)
202 self.assertEqual(gcd(10, 15), 5)
203 self.assertEqual(gcd(10, 11), 1)
204 self.assertEqual(gcd(100, 15), 5)
205 self.assertEqual(gcd(-10, 2), -2)
206 self.assertEqual(gcd(10, -2), 2)
207 self.assertEqual(gcd(-10, -2), -2)
210 self.assertTrue(gcd(i, j) > 0)
211 self.assertTrue(gcd(-i, j) < 0)
212 self.assertTrue(gcd(i, -j) > 0)
213 self.assertTrue(gcd(-i, -j) < 0)
215 def test_constructor(self):
217 self.assertEqual(a.num, 2)
218 self.assertEqual(a.den, 3)
220 self.assertEqual(a.num, -2)
221 self.assertEqual(a.den, 3)
223 self.assertEqual(a.num, -2)
224 self.assertEqual(a.den, 3)
226 self.assertEqual(a.num, 2)
227 self.assertEqual(a.den, 3)
229 self.assertEqual(a.num, 7)
230 self.assertEqual(a.den, 1)
236 self.fail("Rat(1, 0) didn't raise ZeroDivisionError")
243 self.fail("Rat(%r) didn't raise TypeError" % bad)
249 self.fail("Rat(1, %r) didn't raise TypeError" % bad)
251 def test_add(self):
252 self.assertEqual(Rat(2, 3) + Rat(1, 3), 1)
253 self.assertEqual(Rat(2, 3) + 1, Rat(5, 3))
254 self.assertEqual(1 + Rat(2, 3), Rat(5, 3))
255 self.assertEqual(1.0 + Rat(1, 2), 1.5)
256 self.assertEqual(Rat(1, 2) + 1.0, 1.5)
258 def test_sub(self):
259 self.assertEqual(Rat(7, 2) - Rat(7, 5), Rat(21, 10))
260 self.assertEqual(Rat(7, 5) - 1, Rat(2, 5))
261 self.assertEqual(1 - Rat(3, 5), Rat(2, 5))
262 self.assertEqual(Rat(3, 2) - 1.0, 0.5)
263 self.assertEqual(1.0 - Rat(1, 2), 0.5)
265 def test_mul(self):
266 self.assertEqual(Rat(2, 3) * Rat(5, 7), Rat(10, 21))
267 self.assertEqual(Rat(10, 3) * 3, 10)
268 self.assertEqual(3 * Rat(10, 3), 10)
269 self.assertEqual(Rat(10, 5) * 0.5, 1.0)
270 self.assertEqual(0.5 * Rat(10, 5), 1.0)
272 def test_div(self):
273 self.assertEqual(Rat(10, 3) / Rat(5, 7), Rat(14, 3))
274 self.assertEqual(Rat(10, 3) / 3, Rat(10, 9))
275 self.assertEqual(2 / Rat(5), Rat(2, 5))
276 self.assertEqual(3.0 * Rat(1, 2), 1.5)
277 self.assertEqual(Rat(1, 2) * 3.0, 1.5)
279 def test_floordiv(self):
280 self.assertEqual(Rat(10) // Rat(4), 2)
281 self.assertEqual(Rat(10, 3) // Rat(4, 3), 2)
282 self.assertEqual(Rat(10) // 4, 2)
283 self.assertEqual(10 // Rat(4), 2)
285 def test_eq(self):
286 self.assertEqual(Rat(10), Rat(20, 2))
287 self.assertEqual(Rat(10), 10)
288 self.assertEqual(10, Rat(10))
289 self.assertEqual(Rat(10), 10.0)
290 self.assertEqual(10.0, Rat(10))
292 def test_true_div(self):
293 self.assertEqual(Rat(10, 3) / Rat(5, 7), Rat(14, 3))
294 self.assertEqual(Rat(10, 3) / 3, Rat(10, 9))
295 self.assertEqual(2 / Rat(5), Rat(2, 5))
296 self.assertEqual(3.0 * Rat(1, 2), 1.5)
297 self.assertEqual(Rat(1, 2) * 3.0, 1.5)
298 self.assertEqual(eval('1/2'), 0.5)
305 def __init__(self, logger):
306 self.logger = logger
307 def log_operation(self, *args):
308 self.logger(*args)
325 def __eq__(self, other):
326 self.log_operation('A.__eq__')
328 def __le__(self, other):
329 self.log_operation('A.__le__')
331 def __ge__(self, other):
332 self.log_operation('A.__ge__')
336 def __eq__(self, other):
337 self.log_operation('B.__eq__')
339 def __le__(self, other):
340 self.log_operation('B.__le__')
342 def __ge__(self, other):
343 self.log_operation('B.__ge__')
347 def __eq__(self, other):
348 self.log_operation('C.__eq__')
350 def __le__(self, other):
351 self.log_operation('C.__le__')
353 def __ge__(self, other):
354 self.log_operation('C.__ge__')
359 def __eq__(self, other):
360 self.log_operation('V.__eq__')
362 def __le__(self, other):
363 self.log_operation('V.__le__')
365 def __ge__(self, other):
366 self.log_operation('V.__ge__')
372 def test_comparison_orders(self):
373 self.assertEqual(op_sequence(eq, A, A), ['A.__eq__', 'A.__eq__'])
374 self.assertEqual(op_sequence(eq, A, B), ['A.__eq__', 'B.__eq__'])
375 self.assertEqual(op_sequence(eq, B, A), ['B.__eq__', 'A.__eq__'])
377 self.assertEqual(op_sequence(eq, B, C), ['C.__eq__', 'B.__eq__'])
378 self.assertEqual(op_sequence(eq, C, B), ['C.__eq__', 'B.__eq__'])
380 self.assertEqual(op_sequence(le, A, A), ['A.__le__', 'A.__ge__'])
381 self.assertEqual(op_sequence(le, A, B), ['A.__le__', 'B.__ge__'])
382 self.assertEqual(op_sequence(le, B, A), ['B.__le__', 'A.__ge__'])
383 self.assertEqual(op_sequence(le, B, C), ['C.__ge__', 'B.__le__'])
384 self.assertEqual(op_sequence(le, C, B), ['C.__le__', 'B.__ge__'])
386 self.assertTrue(issubclass(V, B))
387 self.assertEqual(op_sequence(eq, B, V), ['B.__eq__', 'V.__eq__'])
388 self.assertEqual(op_sequence(le, B, V), ['B.__le__', 'V.__ge__'])
392 def __eq__(self, other):
412 def __eq__(self, other):
419 def test_fallback_rmethod_blocking(self):
421 self.assertEqual(e, e)
422 self.assertEqual(e, f)
423 self.assertEqual(f, e)
425 self.assertEqual(e, x)
426 self.assertRaises(TypeError, eq, x, e)
428 self.assertRaises(TypeError, eq, e, s)
429 self.assertRaises(TypeError, eq, s, e)
431 def test_fallback_ne_blocking(self):
433 self.assertFalse(e != e)
434 self.assertRaises(TypeError, ne, e, sn)
435 self.assertRaises(TypeError, ne, sn, e)
436 self.assertFalse(e != xn)
437 self.assertRaises(TypeError, ne, xn, e)