[Python-checkins] python/dist/src/Modules _testcapimodule.c,1.18,1.19
tim_one@users.sourceforge.net
tim_one@users.sourceforge.net
Fri, 31 Jan 2003 07:52:38 -0800
Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1:/tmp/cvs-serv32241/Modules
Modified Files:
_testcapimodule.c
Log Message:
_PyLong_NumBits(): The definition of this was too specific to the quirky
needs of pickling longs. Backed off to a definition that's much easier
to understand. The pickler will have to work a little harder, but other
uses are more likely to be correct <0.5 wink>.
_PyLong_Sign(): New teensy function to characterize a long, as to <0, ==0,
or >0.
Index: _testcapimodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/_testcapimodule.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -d -r1.18 -r1.19
*** _testcapimodule.c 28 Jan 2003 20:37:43 -0000 1.18
--- _testcapimodule.c 31 Jan 2003 15:52:04 -0000 1.19
***************
*** 335,369 ****
#endif
! /* Simple test of _PyLong_NumBits. */
static PyObject *
test_long_numbits(PyObject *self)
{
! struct pair {
long input;
! size_t output;
! } testcases[] = {{0, 1},
! {1L, 2},
! {-1L, 2},
! {2L, 3},
! {-2L, 3},
! {3L, 3},
! {-3L, 3},
! {4L, 4},
! {-4L, 4},
! {0x7fffL, 16}, /* one Python long digit */
! {-0x7fffL, 16},
! {0xfffffffL, 29},
! {-0xfffffffL, 29}};
int i;
! for (i = 0; i < sizeof(testcases) / sizeof(struct pair); ++i) {
! long input = testcases[i].input;
! PyObject *plong = PyLong_FromLong(input);
size_t nbits = _PyLong_NumBits(plong);
Py_DECREF(plong);
! if (nbits != testcases[i].output)
return raiseTestError("test_long_numbits",
! "wrong result");
}
Py_INCREF(Py_None);
--- 335,375 ----
#endif
! /* Simple test of _PyLong_NumBits and _PyLong_Sign. */
static PyObject *
test_long_numbits(PyObject *self)
{
! struct triple {
long input;
! size_t nbits;
! int sign;
! } testcases[] = {{0, 0, 0},
! {1L, 1, 1},
! {-1L, 1, -1},
! {2L, 2, 1},
! {-2L, 2, -1},
! {3L, 2, 1},
! {-3L, 2, -1},
! {4L, 3, 1},
! {-4L, 3, -1},
! {0x7fffL, 15, 1}, /* one Python long digit */
! {-0x7fffL, 15, -1},
! {0xffffL, 16, 1},
! {-0xffffL, 16, -1},
! {0xfffffffL, 28, 1},
! {-0xfffffffL, 28, -1}};
int i;
! for (i = 0; i < sizeof(testcases) / sizeof(struct triple); ++i) {
! PyObject *plong = PyLong_FromLong(testcases[i].input);
size_t nbits = _PyLong_NumBits(plong);
+ int sign = _PyLong_Sign(plong);
Py_DECREF(plong);
! if (nbits != testcases[i].nbits)
return raiseTestError("test_long_numbits",
! "wrong result for _PyLong_NumBits");
! if (sign != testcases[i].sign)
! return raiseTestError("test_long_numbits",
! "wrong result for _PyLong_Sign");
}
Py_INCREF(Py_None);