test_getargs2.py revision 8e6480ca02adb3cb790c0e12cef13cc41d2744e2
1a4ea603b055533e71920a088acb1c106e4895dbdThomas Hellerimport unittest 2a4ea603b055533e71920a088acb1c106e4895dbdThomas Hellerfrom test import test_support 3a4ea603b055533e71920a088acb1c106e4895dbdThomas Hellerimport sys 4a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 5a4ea603b055533e71920a088acb1c106e4895dbdThomas Hellerimport warnings, re 654aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Hellerwarnings.filterwarnings("ignore", 754aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller category=DeprecationWarning, 854aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller message=".*integer argument expected, got float", 954aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller module=__name__) 1054aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Hellerwarnings.filterwarnings("ignore", 1154aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller category=DeprecationWarning, 1254aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller message=".*integer argument expected, got float", 1354aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller module="unittest") 14a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 15a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller""" 16a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> How about the following counterproposal. This also changes some of 17a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> the other format codes to be a little more regular. 18a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> 19a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> Code C type Range check 20a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> 21a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> b unsigned char 0..UCHAR_MAX 22bbb931bebd9237183ee8bb0b5e90cf2ecb3fd046Guido van Rossum> h signed short SHRT_MIN..SHRT_MAX 23a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> B unsigned char none ** 24a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> H unsigned short none ** 25a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> k * unsigned long none 26a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> I * unsigned int 0..UINT_MAX 27a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 28a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 29a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> i int INT_MIN..INT_MAX 30a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> l long LONG_MIN..LONG_MAX 31a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 32a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> K * unsigned long long none 33a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> L long long LLONG_MIN..LLONG_MAX 34a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 35a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> Notes: 36a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> 37a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> * New format codes. 38a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> 39a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> ** Changed from previous "range-and-a-half" to "none"; the 40a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller> range-and-a-half checking wasn't particularly useful. 41a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 42a4ea603b055533e71920a088acb1c106e4895dbdThomas HellerPlus a C API or two, e.g. PyInt_AsLongMask() -> 43a4ea603b055533e71920a088acb1c106e4895dbdThomas Hellerunsigned long and PyInt_AsLongLongMask() -> unsigned 44a4ea603b055533e71920a088acb1c106e4895dbdThomas Hellerlong long (if that exists). 45a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller""" 46a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 47a4ea603b055533e71920a088acb1c106e4895dbdThomas HellerLARGE = 0x7FFFFFFF 48a4ea603b055533e71920a088acb1c106e4895dbdThomas HellerVERY_LARGE = 0xFF0000121212121212121242L 49a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 50a4ea603b055533e71920a088acb1c106e4895dbdThomas Hellerfrom _testcapi import UCHAR_MAX, USHRT_MAX, UINT_MAX, ULONG_MAX, INT_MAX, \ 517f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl INT_MIN, LONG_MIN, LONG_MAX, PY_SSIZE_T_MIN, PY_SSIZE_T_MAX 52a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 53a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller# fake, they are not defined in Python's header files 54a4ea603b055533e71920a088acb1c106e4895dbdThomas HellerLLONG_MAX = 2**63-1 55a4ea603b055533e71920a088acb1c106e4895dbdThomas HellerLLONG_MIN = -2**63 56a4ea603b055533e71920a088acb1c106e4895dbdThomas HellerULLONG_MAX = 2**64-1 57a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 58a4ea603b055533e71920a088acb1c106e4895dbdThomas Hellerclass Long: 59a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller def __int__(self): 60a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller return 99L 61a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 62a4ea603b055533e71920a088acb1c106e4895dbdThomas Hellerclass Int: 63a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller def __int__(self): 64a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller return 99 65a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 66a4ea603b055533e71920a088acb1c106e4895dbdThomas Hellerclass Unsigned_TestCase(unittest.TestCase): 67a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller def test_b(self): 6854aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller from _testcapi import getargs_b 69a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller # b returns 'unsigned char', and does range checking (0 ... UCHAR_MAX) 7054aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(3, getargs_b(3.14)) 7154aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(99, getargs_b(Long())) 7254aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(99, getargs_b(Int())) 73a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 7454aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(OverflowError, getargs_b, -1) 7554aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(0, getargs_b(0)) 7654aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(UCHAR_MAX, getargs_b(UCHAR_MAX)) 7754aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(OverflowError, getargs_b, UCHAR_MAX + 1) 78a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 7954aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_b(42)) 8054aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_b(42L)) 8154aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(OverflowError, getargs_b, VERY_LARGE) 82a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 83a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller def test_B(self): 8454aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller from _testcapi import getargs_B 85a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller # B returns 'unsigned char', no range checking 8654aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(3, getargs_B(3.14)) 8754aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(99, getargs_B(Long())) 8854aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(99, getargs_B(Int())) 89a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 9054aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(UCHAR_MAX, getargs_B(-1)) 9154aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(UCHAR_MAX, getargs_B(-1L)) 9254aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(0, getargs_B(0)) 9354aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(UCHAR_MAX, getargs_B(UCHAR_MAX)) 9454aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(0, getargs_B(UCHAR_MAX+1)) 95a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 9654aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_B(42)) 9754aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_B(42L)) 9854aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(UCHAR_MAX & VERY_LARGE, getargs_B(VERY_LARGE)) 99a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 100a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller def test_H(self): 10154aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller from _testcapi import getargs_H 102a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller # H returns 'unsigned short', no range checking 10354aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(3, getargs_H(3.14)) 10454aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(99, getargs_H(Long())) 10554aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(99, getargs_H(Int())) 106a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 10754aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(USHRT_MAX, getargs_H(-1)) 10854aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(0, getargs_H(0)) 10954aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(USHRT_MAX, getargs_H(USHRT_MAX)) 11054aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(0, getargs_H(USHRT_MAX+1)) 111a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 11254aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_H(42)) 11354aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_H(42L)) 114a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 11554aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(VERY_LARGE & USHRT_MAX, getargs_H(VERY_LARGE)) 116a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 117a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller def test_I(self): 11854aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller from _testcapi import getargs_I 119a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller # I returns 'unsigned int', no range checking 12054aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(3, getargs_I(3.14)) 12154aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(99, getargs_I(Long())) 12254aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(99, getargs_I(Int())) 123a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 12454aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(UINT_MAX, getargs_I(-1)) 12554aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(0, getargs_I(0)) 12654aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(UINT_MAX, getargs_I(UINT_MAX)) 12754aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(0, getargs_I(UINT_MAX+1)) 128a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 12954aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_I(42)) 13054aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_I(42L)) 131a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 13254aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(VERY_LARGE & UINT_MAX, getargs_I(VERY_LARGE)) 133a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 134a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller def test_k(self): 13554aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller from _testcapi import getargs_k 136a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller # k returns 'unsigned long', no range checking 137a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller # it does not accept float, or instances with __int__ 13854aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(TypeError, getargs_k, 3.14) 13954aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(TypeError, getargs_k, Long()) 14054aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(TypeError, getargs_k, Int()) 141a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 14254aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(ULONG_MAX, getargs_k(-1)) 14354aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(0, getargs_k(0)) 14454aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(ULONG_MAX, getargs_k(ULONG_MAX)) 14554aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(0, getargs_k(ULONG_MAX+1)) 146a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 14754aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_k(42)) 14854aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_k(42L)) 149a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 15054aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(VERY_LARGE & ULONG_MAX, getargs_k(VERY_LARGE)) 151a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 152a4ea603b055533e71920a088acb1c106e4895dbdThomas Hellerclass Signed_TestCase(unittest.TestCase): 153a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller def test_i(self): 15454aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller from _testcapi import getargs_i 155a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller # i returns 'int', and does range checking (INT_MIN ... INT_MAX) 15654aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(3, getargs_i(3.14)) 15754aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(99, getargs_i(Long())) 15854aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(99, getargs_i(Int())) 159a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 16054aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(OverflowError, getargs_i, INT_MIN-1) 16154aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(INT_MIN, getargs_i(INT_MIN)) 16254aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(INT_MAX, getargs_i(INT_MAX)) 16354aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(OverflowError, getargs_i, INT_MAX+1) 164a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 16554aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_i(42)) 16654aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_i(42L)) 16754aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(OverflowError, getargs_i, VERY_LARGE) 168a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 169a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller def test_l(self): 17054aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller from _testcapi import getargs_l 171a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller # l returns 'long', and does range checking (LONG_MIN ... LONG_MAX) 17254aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(3, getargs_l(3.14)) 17354aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(99, getargs_l(Long())) 17454aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(99, getargs_l(Int())) 175a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 17654aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(OverflowError, getargs_l, LONG_MIN-1) 17754aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(LONG_MIN, getargs_l(LONG_MIN)) 17854aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(LONG_MAX, getargs_l(LONG_MAX)) 17954aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(OverflowError, getargs_l, LONG_MAX+1) 180a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 18154aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_l(42)) 18254aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_l(42L)) 18354aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(OverflowError, getargs_l, VERY_LARGE) 184a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 1857f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl def test_n(self): 1867f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl from _testcapi import getargs_n 1878e6480ca02adb3cb790c0e12cef13cc41d2744e2Tim Peters # n returns 'Py_ssize_t', and does range checking 1887f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl # (PY_SSIZE_T_MIN ... PY_SSIZE_T_MAX) 1897f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl self.failUnlessEqual(3, getargs_n(3.14)) 1907f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl self.failUnlessEqual(99, getargs_n(Long())) 1917f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl self.failUnlessEqual(99, getargs_n(Int())) 1927f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl 1937f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl self.assertRaises(OverflowError, getargs_n, PY_SSIZE_T_MIN-1) 1947f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl self.failUnlessEqual(PY_SSIZE_T_MIN, getargs_n(PY_SSIZE_T_MIN)) 1957f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl self.failUnlessEqual(PY_SSIZE_T_MAX, getargs_n(PY_SSIZE_T_MAX)) 1967f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl self.assertRaises(OverflowError, getargs_n, PY_SSIZE_T_MAX+1) 1977f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl 1987f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl self.failUnlessEqual(42, getargs_n(42)) 1997f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl self.failUnlessEqual(42, getargs_n(42L)) 2007f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl self.assertRaises(OverflowError, getargs_n, VERY_LARGE) 2017f573f7319f070d47565a2a37d659611ee844dd5Georg Brandl 202a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 203a4ea603b055533e71920a088acb1c106e4895dbdThomas Hellerclass LongLong_TestCase(unittest.TestCase): 204a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller def test_L(self): 20554aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller from _testcapi import getargs_L 206a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller # L returns 'long long', and does range checking (LLONG_MIN ... LLONG_MAX) 2076ce7ed23d0449daa70f396486fae3c1014d93191Martin v. Löwis self.failUnlessRaises(TypeError, getargs_L, "Hello") 2086ce7ed23d0449daa70f396486fae3c1014d93191Martin v. Löwis self.failUnlessEqual(3, getargs_L(3.14)) 2096ce7ed23d0449daa70f396486fae3c1014d93191Martin v. Löwis self.failUnlessEqual(99, getargs_L(Long())) 2106ce7ed23d0449daa70f396486fae3c1014d93191Martin v. Löwis self.failUnlessEqual(99, getargs_L(Int())) 211a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 21254aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(OverflowError, getargs_L, LLONG_MIN-1) 21354aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(LLONG_MIN, getargs_L(LLONG_MIN)) 21454aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(LLONG_MAX, getargs_L(LLONG_MAX)) 21554aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(OverflowError, getargs_L, LLONG_MAX+1) 216a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 21754aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_L(42)) 21854aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_L(42L)) 21954aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(OverflowError, getargs_L, VERY_LARGE) 2200eadaac7dc3ae49974c105ff9e8c1e98a04d7d5aTim Peters 221a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller def test_K(self): 22254aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller from _testcapi import getargs_K 223a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller # K return 'unsigned long long', no range checking 22454aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(TypeError, getargs_K, 3.14) 22554aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(TypeError, getargs_K, Long()) 22654aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.assertRaises(TypeError, getargs_K, Int()) 22754aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(ULLONG_MAX, getargs_K(ULLONG_MAX)) 22854aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(0, getargs_K(0)) 22954aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(0, getargs_K(ULLONG_MAX+1)) 230a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 23154aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_K(42)) 23254aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(42, getargs_K(42L)) 233a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 23454aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller self.failUnlessEqual(VERY_LARGE & ULLONG_MAX, getargs_K(VERY_LARGE)) 235a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 236a4ea603b055533e71920a088acb1c106e4895dbdThomas Hellerdef test_main(): 23721d3a32b99c5763444c34c189ef653ac9745f3c4Walter Dörwald tests = [Signed_TestCase, Unsigned_TestCase] 238a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller try: 23954aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller from _testcapi import getargs_L, getargs_K 24054aa5781d50adf2ab2168399c2f6d16ccff0a5aaThomas Heller except ImportError: 241a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller pass # PY_LONG_LONG not available 242a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller else: 24321d3a32b99c5763444c34c189ef653ac9745f3c4Walter Dörwald tests.append(LongLong_TestCase) 24421d3a32b99c5763444c34c189ef653ac9745f3c4Walter Dörwald test_support.run_unittest(*tests) 245a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller 246a4ea603b055533e71920a088acb1c106e4895dbdThomas Hellerif __name__ == "__main__": 247a4ea603b055533e71920a088acb1c106e4895dbdThomas Heller test_main() 248