[Python-checkins] CVS: python/dist/src/Lib/test test_long.py,1.7,1.8

Tim Peters tim_one@users.sourceforge.net
Thu, 23 Aug 2001 15:56:23 -0700


Update of /cvsroot/python/python/dist/src/Lib/test
In directory usw-pr-cvs1:/tmp/cvs-serv20480/python/Lib/test

Modified Files:
	test_long.py 
Log Message:
SF bug [#454456] int overflow code needs tests.
Added tests for boundary cases in magical PEP 237 int->long auto-overflow,
but nothing here addresses the rest of the bug report so left it open.


Index: test_long.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_long.py,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** test_long.py	2001/08/23 20:34:01	1.7
--- test_long.py	2001/08/23 22:56:21	1.8
***************
*** 256,259 ****
--- 256,319 ----
          raise TestFailed, "int(long(-sys.maxint-1) - 1) didn't overflow"
  
+ # ----------------------------------- tests of auto int->long conversion
+ 
+ def test_auto_overflow():
+     import math, sys
+ 
+     if verbose:
+         print "auto-convert int->long on overflow"
+ 
+     special = [0, 1, 2, 3, sys.maxint-1, sys.maxint, sys.maxint+1]
+     sqrt = int(math.sqrt(sys.maxint))
+     special.extend([sqrt-1, sqrt, sqrt+1])
+     special.extend([-i for i in special])
+ 
+     def checkit(*args):
+         # Heavy use of nested scopes here!
+         verify(got == expected, "for %r expected %r got %r" %
+                                 (args, expected, got))
+ 
+     for x in special:
+         longx = long(x)
+ 
+         expected = -longx
+         got = -x
+         checkit('-', x)
+ 
+         for y in special:
+             longy = long(y)
+ 
+             expected = longx + longy
+             got = x + y
+             checkit(x, '+', y)
+ 
+             expected = longx - longy
+             got = x - y
+             checkit(x, '-', y)
+ 
+             expected = longx * longy
+             got = x * y
+             checkit(x, '*', y)
+ 
+             if y:
+                 expected = longx / longy
+                 got = x / y
+                 checkit(x, '/', y)
+ 
+                 expected = divmod(longx, longy)
+                 got = divmod(longx, longy)
+                 checkit(x, 'divmod', y)
+ 
+             if abs(y) < 5 and not (x == 0 and y < 0):
+                 expected = longx ** longy
+                 got = x ** y
+                 checkit(x, '**', y)
+ 
+                 for z in special:
+                     if z != 0:
+                         expected = pow(longx, longy, long(z))
+                         got = pow(x, y, z)
+                         checkit('pow', x, y, '%', z)
+ 
  # ---------------------------------------------------------------- do it
  
***************
*** 262,263 ****
--- 322,324 ----
  test_format()
  test_misc()
+ test_auto_overflow()