@@ -723,6 +723,37 @@ def test_gc_head_size(self):
723723 # but lists are
724724 self .assertEqual (sys .getsizeof ([]), vsize ('Pn' ) + gc_header_size )
725725
726+ def test_errors (self ):
727+ class BadSizeof :
728+ def __sizeof__ (self ):
729+ raise ValueError
730+ self .assertRaises (ValueError , sys .getsizeof , BadSizeof ())
731+
732+ class InvalidSizeof :
733+ def __sizeof__ (self ):
734+ return None
735+ self .assertRaises (TypeError , sys .getsizeof , InvalidSizeof ())
736+ sentinel = ["sentinel" ]
737+ self .assertIs (sys .getsizeof (InvalidSizeof (), sentinel ), sentinel )
738+
739+ class FloatSizeof :
740+ def __sizeof__ (self ):
741+ return 4.5
742+ self .assertRaises (TypeError , sys .getsizeof , FloatSizeof ())
743+ self .assertIs (sys .getsizeof (FloatSizeof (), sentinel ), sentinel )
744+
745+ class OverflowSizeof (int ):
746+ def __sizeof__ (self ):
747+ return int (self )
748+ self .assertEqual (sys .getsizeof (OverflowSizeof (sys .maxsize )),
749+ sys .maxsize + self .gc_headsize )
750+ with self .assertRaises (OverflowError ):
751+ sys .getsizeof (OverflowSizeof (sys .maxsize + 1 ))
752+ with self .assertRaises (ValueError ):
753+ sys .getsizeof (OverflowSizeof (- 1 ))
754+ with self .assertRaises ((ValueError , OverflowError )):
755+ sys .getsizeof (OverflowSizeof (- sys .maxsize - 1 ))
756+
726757 def test_default (self ):
727758 size = test .support .calcvobjsize
728759 self .assertEqual (sys .getsizeof (True ), size ('' ) + self .longdigit )
0 commit comments