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