@@ -772,8 +772,25 @@ def check(fmt, vals, result):
772772        check (b'%i%b %*.*b' , (10 , b'3' , 5 , 3 , b'abc' ,), b'103   abc' )
773773        check (b'%c' , b'a' , b'a' )
774774
775+         class  PseudoFloat :
776+             def  __init__ (self , value ):
777+                 self .value  =  float (value )
778+             def  __int__ (self ):
779+                 return  int (self .value )
780+ 
781+         pi  =  PseudoFloat (3.1415 )
782+ 
783+         self .assertRaisesRegex (TypeError , '%x format: an integer is required, not float' , operator .mod , '%x' , 3.14 )
784+         self .assertRaisesRegex (TypeError , '%X format: an integer is required, not float' , operator .mod , '%X' , 2.11 )
785+         self .assertRaisesRegex (TypeError , '%o format: an integer is required, not float' , operator .mod , '%o' , 1.79 )
786+         self .assertRaisesRegex (TypeError , '%x format: an integer is required, not PseudoFloat' , operator .mod , '%x' , pi )
787+         self .assertRaisesRegex (TypeError , '%x format: an integer is required, not complex' , operator .mod , '%x' , 3j )
788+         self .assertRaisesRegex (TypeError , '%X format: an integer is required, not complex' , operator .mod , '%X' , 2j )
789+         self .assertRaisesRegex (TypeError , '%o format: an integer is required, not complex' , operator .mod , '%o' , 1j )
790+         self .assertRaisesRegex (TypeError , '%u format: a real number is required, not complex' , operator .mod , '%u' , 3j )
775791        self .assertRaisesRegex (TypeError , '%i format: a real number is required, not complex' , operator .mod , '%i' , 2j )
776792        self .assertRaisesRegex (TypeError , '%d format: a real number is required, not complex' , operator .mod , '%d' , 2j )
793+         self .assertRaisesRegex (TypeError , r'%c requires an int or a unicode character, not .*\.PseudoFloat' , operator .mod , '%c' , pi )
777794
778795    def  test_imod (self ):
779796        b  =  self .type2test (b'hello, %b!' )
0 commit comments