@@ -400,6 +400,29 @@ def test_long_asvoidptr(self):
400400 self .assertRaises (OverflowError , asvoidptr , - 2 ** 1000 )
401401 # CRASHES asvoidptr(NULL)
402402
403+ def test_long_aspid (self ):
404+ # Test PyLong_AsPid()
405+ aspid = _testcapi .pylong_aspid
406+ from _testcapi import SIZEOF_PID_T
407+ bits = 8 * SIZEOF_PID_T
408+ PID_T_MIN = - 2 ** (bits - 1 )
409+ PID_T_MAX = 2 ** (bits - 1 ) - 1
410+ # round trip (object -> long -> object)
411+ for value in (PID_T_MIN , PID_T_MAX , - 1 , 0 , 1 , 1234 ):
412+ with self .subTest (value = value ):
413+ self .assertEqual (aspid (value ), value )
414+
415+ self .assertEqual (aspid (IntSubclass (42 )), 42 )
416+ self .assertEqual (aspid (Index (42 )), 42 )
417+ self .assertEqual (aspid (MyIndexAndInt ()), 10 )
418+
419+ self .assertRaises (OverflowError , aspid , PID_T_MIN - 1 )
420+ self .assertRaises (OverflowError , aspid , PID_T_MAX + 1 )
421+ self .assertRaises (TypeError , aspid , 1.0 )
422+ self .assertRaises (TypeError , aspid , b'2' )
423+ self .assertRaises (TypeError , aspid , '3' )
424+ self .assertRaises (SystemError , aspid , NULL )
425+
403426
404427if __name__ == "__main__" :
405428 unittest .main ()
0 commit comments