@@ -737,6 +737,36 @@ def check(fmt, vals, result):
737
737
check (b'%i%b %*.*b' , (10 , b'3' , 5 , 3 , b'abc' ,), b'103 abc' )
738
738
check (b'%c' , b'a' , b'a' )
739
739
740
+ class PseudoFloat :
741
+ def __init__ (self , value ):
742
+ self .value = float (value )
743
+ def __int__ (self ):
744
+ return int (self .value )
745
+
746
+ pi = PseudoFloat (3.1415 )
747
+
748
+ exceptions_params = [
749
+ ('%x format: an integer is required, not float' , b'%x' , 3.14 ),
750
+ ('%X format: an integer is required, not float' , b'%X' , 2.11 ),
751
+ ('%o format: an integer is required, not float' , b'%o' , 1.79 ),
752
+ ('%x format: an integer is required, not PseudoFloat' , b'%x' , pi ),
753
+ ('%x format: an integer is required, not complex' , b'%x' , 3j ),
754
+ ('%X format: an integer is required, not complex' , b'%X' , 2j ),
755
+ ('%o format: an integer is required, not complex' , b'%o' , 1j ),
756
+ ('%u format: a real number is required, not complex' , b'%u' , 3j ),
757
+ ('%i format: a real number is required, not complex' , b'%i' , 2j ),
758
+ ('%d format: a real number is required, not complex' , b'%d' , 2j ),
759
+ (
760
+ r'%c requires an integer in range\(256\)'
761
+ r' or a single byte, not .*\.PseudoFloat' ,
762
+ b'%c' , pi
763
+ ),
764
+ ]
765
+
766
+ for msg , format_bytes , value in exceptions_params :
767
+ with self .assertRaisesRegex (TypeError , msg ):
768
+ operator .mod (format_bytes , value )
769
+
740
770
def test_imod (self ):
741
771
b = self .type2test (b'hello, %b!' )
742
772
orig = b
0 commit comments