[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);