@@ -772,8 +772,35 @@ 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- self .assertRaisesRegex (TypeError , '%i format: a real number is required, not complex' , operator .mod , '%i' , 2j )
776- self .assertRaisesRegex (TypeError , '%d format: a real number is required, not complex' , operator .mod , '%d' , 2j )
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+ exceptions_params = [
784+ ('%x format: an integer is required, not float' , b'%x' , 3.14 ),
785+ ('%X format: an integer is required, not float' , b'%X' , 2.11 ),
786+ ('%o format: an integer is required, not float' , b'%o' , 1.79 ),
787+ ('%x format: an integer is required, not PseudoFloat' , b'%x' , pi ),
788+ ('%x format: an integer is required, not complex' , b'%x' , 3j ),
789+ ('%X format: an integer is required, not complex' , b'%X' , 2j ),
790+ ('%o format: an integer is required, not complex' , b'%o' , 1j ),
791+ ('%u format: a real number is required, not complex' , b'%u' , 3j ),
792+ ('%i format: a real number is required, not complex' , b'%i' , 2j ),
793+ ('%d format: a real number is required, not complex' , b'%d' , 2j ),
794+ (
795+ r'%c requires an integer in range\(256\)'
796+ r' or a single byte, not .*\.PseudoFloat' ,
797+ b'%c' , pi
798+ ),
799+ ]
800+
801+ for msg , format_bytes , value in exceptions_params :
802+ with self .assertRaisesRegex (TypeError , msg ):
803+ operator .mod (format_bytes , value )
777804
778805 def test_imod (self ):
779806 b = self .type2test (b'hello, %b!' )
0 commit comments