@@ -117,6 +117,12 @@ def assertTypedEquals(self, expected, actual):
117
117
self .assertEqual (type (expected ), type (actual ))
118
118
self .assertEqual (expected , actual )
119
119
120
+ def assertTypedTupleEquals (self , expected , actual ):
121
+ """Asserts that both the types and values in the tuples are the same."""
122
+ self .assertIsInstance (actual , tuple )
123
+ self .assertEqual (list (map (type , expected )), list (map (type , actual )))
124
+ self .assertEqual (expected , actual )
125
+
120
126
def assertRaisesMessage (self , exc_type , message ,
121
127
callable , * args , ** kwargs ):
122
128
"""Asserts that callable(*args, **kwargs) raises exc_type(message)."""
@@ -349,7 +355,10 @@ def testArithmetic(self):
349
355
self .assertEqual (F (1 , 4 ), F (1 , 10 ) / F (2 , 5 ))
350
356
self .assertTypedEquals (2 , F (9 , 10 ) // F (2 , 5 ))
351
357
self .assertTypedEquals (10 ** 23 , F (10 ** 23 , 1 ) // F (1 ))
358
+ self .assertEqual (F (5 , 6 ), F (7 , 3 ) % F (3 , 2 ))
352
359
self .assertEqual (F (2 , 3 ), F (- 7 , 3 ) % F (3 , 2 ))
360
+ self .assertEqual ((F (1 ), F (5 , 6 )), divmod (F (7 , 3 ), F (3 , 2 )))
361
+ self .assertEqual ((F (- 2 ), F (2 , 3 )), divmod (F (- 7 , 3 ), F (3 , 2 )))
353
362
self .assertEqual (F (8 , 27 ), F (2 , 3 ) ** F (3 ))
354
363
self .assertEqual (F (27 , 8 ), F (2 , 3 ) ** F (- 3 ))
355
364
self .assertTypedEquals (2.0 , F (4 ) ** F (1 , 2 ))
@@ -415,7 +424,14 @@ def testMixedArithmetic(self):
415
424
self .assertTypedEquals (float ('inf' ), F (- 1 , 10 ) % float ('inf' ))
416
425
self .assertTypedEquals (- 0.1 , F (- 1 , 10 ) % float ('-inf' ))
417
426
418
- # No need for divmod since we don't override it.
427
+ self .assertTypedTupleEquals ((F (0 ), F (1 , 10 )), divmod (F (1 , 10 ), 1 ))
428
+ self .assertTypedTupleEquals (divmod (0.1 , 1.0 ), divmod (F (1 , 10 ), 1.0 ))
429
+ self .assertTypedTupleEquals ((F (10 , 1 ), F (0 )), divmod (1 , F (1 , 10 )))
430
+ self .assertTypedTupleEquals (divmod (1.0 , 0.1 ), divmod (1.0 , F (1 , 10 )))
431
+ self .assertTypedTupleEquals (divmod (0.1 , float ('inf' )), divmod (F (1 , 10 ), float ('inf' )))
432
+ self .assertTypedTupleEquals (divmod (0.1 , float ('-inf' )), divmod (F (1 , 10 ), float ('-inf' )))
433
+ self .assertTypedTupleEquals (divmod (- 0.1 , float ('inf' )), divmod (F (- 1 , 10 ), float ('inf' )))
434
+ self .assertTypedTupleEquals (divmod (- 0.1 , float ('-inf' )), divmod (F (- 1 , 10 ), float ('-inf' )))
419
435
420
436
# ** has more interesting conversion rules.
421
437
self .assertTypedEquals (F (100 , 1 ), F (1 , 10 ) ** - 2 )
0 commit comments