@@ -545,6 +545,37 @@ def test_float(self):
545545 self .assertEqual (float (unicode (" 3.14 " )), 3.14 )
546546 self .assertEqual (float (unicode (" \u0663 .\u0661 \u0664 " ,'raw-unicode-escape' )), 3.14 )
547547
548+ def test_floatconversion (self ):
549+ # Make sure that calls to __float__() work properly
550+ class Foo0 :
551+ def __float__ (self ):
552+ return 42.
553+
554+ class Foo1 (object ):
555+ def __float__ (self ):
556+ return 42.
557+
558+ class Foo2 (float ):
559+ def __float__ (self ):
560+ return 42.
561+
562+ class Foo3 (float ):
563+ def __new__ (cls , value = 0. ):
564+ return float .__new__ (cls , 2 * value )
565+
566+ def __float__ (self ):
567+ return self
568+
569+ class Foo4 (float ):
570+ def __float__ (self ):
571+ return 42
572+
573+ self .assertAlmostEqual (float (Foo0 ()), 42. )
574+ self .assertAlmostEqual (float (Foo1 ()), 42. )
575+ self .assertAlmostEqual (float (Foo2 ()), 42. )
576+ self .assertAlmostEqual (float (Foo3 (21 )), 42. )
577+ self .assertRaises (TypeError , float , Foo4 (42 ))
578+
548579 def test_getattr (self ):
549580 import sys
550581 self .assert_ (getattr (sys , 'stdout' ) is sys .stdout )
@@ -650,6 +681,39 @@ def test_int(self):
650681
651682 self .assertEqual (int ('0123' , 0 ), 83 )
652683
684+ def test_intconversion (self ):
685+ # Test __int__()
686+ class Foo0 :
687+ def __int__ (self ):
688+ return 42
689+
690+ class Foo1 (object ):
691+ def __int__ (self ):
692+ return 42
693+
694+ class Foo2 (int ):
695+ def __int__ (self ):
696+ return 42
697+
698+ class Foo3 (int ):
699+ def __int__ (self ):
700+ return self
701+
702+ class Foo4 (int ):
703+ def __int__ (self ):
704+ return 42L
705+
706+ class Foo5 (int ):
707+ def __int__ (self ):
708+ return 42.
709+
710+ self .assertEqual (int (Foo0 ()), 42 )
711+ self .assertEqual (int (Foo1 ()), 42 )
712+ self .assertEqual (int (Foo2 ()), 42 )
713+ self .assertEqual (int (Foo3 ()), 0 )
714+ self .assertEqual (int (Foo4 ()), 42L )
715+ self .assertRaises (TypeError , int , Foo5 ())
716+
653717 def test_intern (self ):
654718 self .assertRaises (TypeError , intern )
655719 s = "never interned before"
@@ -810,6 +874,39 @@ def test_long(self):
810874 self .assertRaises (ValueError , long , '53' , 40 )
811875 self .assertRaises (TypeError , long , 1 , 12 )
812876
877+ def test_longconversion (self ):
878+ # Test __long__()
879+ class Foo0 :
880+ def __long__ (self ):
881+ return 42L
882+
883+ class Foo1 (object ):
884+ def __long__ (self ):
885+ return 42L
886+
887+ class Foo2 (long ):
888+ def __long__ (self ):
889+ return 42L
890+
891+ class Foo3 (long ):
892+ def __long__ (self ):
893+ return self
894+
895+ class Foo4 (long ):
896+ def __long__ (self ):
897+ return 42
898+
899+ class Foo5 (long ):
900+ def __long__ (self ):
901+ return 42.
902+
903+ self .assertEqual (long (Foo0 ()), 42L )
904+ self .assertEqual (long (Foo1 ()), 42L )
905+ self .assertEqual (long (Foo2 ()), 42L )
906+ self .assertEqual (long (Foo3 ()), 0 )
907+ self .assertEqual (long (Foo4 ()), 42 )
908+ self .assertRaises (TypeError , long , Foo5 ())
909+
813910 def test_map (self ):
814911 self .assertEqual (
815912 map (None , 'hello world' ),
0 commit comments