@@ -655,6 +655,40 @@ def test_upcasting_to_floats(self):
655655 self .assertTrue (isinstance (a % 0.5 , float ))
656656 self .assertTrue (isinstance (0.5 % a , float ))
657657
658+ def test_upcasting_to_complex (self ):
659+ """
660+ Integers should automatically be upcasted to complex numbers for
661+ arithmetic operations.
662+
663+ Python 3 cannot mod complex numbers so this does not have to be
664+ supported here.
665+ """
666+ a = int (3 )
667+
668+ # Addition with complex.
669+ self .assertEqual (a + 0.5j , 3.0 + 0.5j )
670+ self .assertEqual (0.5j + a , 3.0 + 0.5j )
671+ self .assertTrue (isinstance (a + 0.5j , complex ))
672+ self .assertTrue (isinstance (0.5j + a , complex ))
673+
674+ # Subtraction with complex.
675+ self .assertEqual (a - 0.5j , 3.0 - 0.5j )
676+ self .assertEqual (0.5j - a , - 3.0 + 0.5j )
677+ self .assertTrue (isinstance (a - 0.5j , complex ))
678+ self .assertTrue (isinstance (0.5j - a , complex ))
679+
680+ # Multiplication with complex.
681+ self .assertEqual (a * 0.5j , 1.5j )
682+ self .assertEqual (0.5j * a , 1.5j )
683+ self .assertTrue (isinstance (a * 0.5j , complex ))
684+ self .assertTrue (isinstance (0.5j * a , complex ))
685+
686+ # Division with complex.
687+ self .assertEqual (a / 0.5j , - 6.0j )
688+ self .assertEqual (0.5j / a , (0.5 / 3.0 ) * 1j )
689+ self .assertTrue (isinstance (a / 0.5j , complex ))
690+ self .assertTrue (isinstance (0.5j / a , complex ))
691+
658692
659693if __name__ == "__main__" :
660694 unittest .main ()
0 commit comments