@@ -770,6 +770,37 @@ def test_gc_head_size(self):
770770 # but lists are
771771 self .assertEqual (sys .getsizeof ([]), vsize ('Pn' ) + gc_header_size )
772772
773+ def test_errors (self ):
774+ class BadSizeof :
775+ def __sizeof__ (self ):
776+ raise ValueError
777+ self .assertRaises (ValueError , sys .getsizeof , BadSizeof ())
778+
779+ class InvalidSizeof :
780+ def __sizeof__ (self ):
781+ return None
782+ self .assertRaises (TypeError , sys .getsizeof , InvalidSizeof ())
783+ sentinel = ["sentinel" ]
784+ self .assertIs (sys .getsizeof (InvalidSizeof (), sentinel ), sentinel )
785+
786+ class FloatSizeof :
787+ def __sizeof__ (self ):
788+ return 4.5
789+ self .assertRaises (TypeError , sys .getsizeof , FloatSizeof ())
790+ self .assertIs (sys .getsizeof (FloatSizeof (), sentinel ), sentinel )
791+
792+ class OverflowSizeof (int ):
793+ def __sizeof__ (self ):
794+ return int (self )
795+ self .assertEqual (sys .getsizeof (OverflowSizeof (sys .maxsize )),
796+ sys .maxsize + self .gc_headsize )
797+ with self .assertRaises (OverflowError ):
798+ sys .getsizeof (OverflowSizeof (sys .maxsize + 1 ))
799+ with self .assertRaises (ValueError ):
800+ sys .getsizeof (OverflowSizeof (- 1 ))
801+ with self .assertRaises ((ValueError , OverflowError )):
802+ sys .getsizeof (OverflowSizeof (- sys .maxsize - 1 ))
803+
773804 def test_default (self ):
774805 size = test .support .calcvobjsize
775806 self .assertEqual (sys .getsizeof (True ), size ('' ) + self .longdigit )
0 commit comments