[Python-checkins] python/dist/src/Lib/test test_pow.py,1.16,1.17

doerwalter@users.sourceforge.net doerwalter@users.sourceforge.net
Mon, 03 Feb 2003 12:17:21 -0800


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

Modified Files:
	test_pow.py 
Log Message:
Port test_pow.py to PyUnit. From SF patch #662807


Index: test_pow.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_pow.py,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -d -r1.16 -r1.17
*** test_pow.py	7 Dec 2002 10:05:27 -0000	1.16
--- test_pow.py	3 Feb 2003 20:17:19 -0000	1.17
***************
*** 1,125 ****
! import sys
! from test import test_support
  
  
! def powtest(type):
!     if type != float:
!         print "    Testing 2-argument pow() function..."
!         for i in range(-1000, 1000):
!             if pow(type(i), 0) != 1:
!                 raise ValueError, 'pow('+str(i)+',0) != 1'
!             if pow(type(i), 1) != type(i):
!                 raise ValueError, 'pow('+str(i)+',1) != '+str(i)
!             if pow(type(0), 1) != type(0):
!                 raise ValueError, 'pow(0,'+str(i)+') != 0'
!             if pow(type(1), 1) != type(1):
!                 raise ValueError, 'pow(1,'+str(i)+') != 1'
  
!         for i in range(-100, 100):
!             if pow(type(i), 3) != i*i*i:
!                 raise ValueError, 'pow('+str(i)+',3) != '+str(i*i*i)
  
!         pow2 = 1
!         for i in range(0,31):
!             if pow(2, i) != pow2:
!                 raise ValueError, 'pow(2,'+str(i)+') != '+str(pow2)
!             if i != 30 : pow2 = pow2*2
  
!         for othertype in int, long:
!             for i in range(-10, 0) + range(1, 10):
!                 ii = type(i)
!                 for j in range(1, 11):
!                     jj = -othertype(j)
!                     try:
                          pow(ii, jj)
-                     except ValueError:
-                         raise ValueError, "pow(%s, %s) failed" % (ii, jj)
  
!     for othertype in int, long, float:
!         for i in range(1, 100):
!             zero = type(0)
!             exp = -othertype(i/10.0)
!             if exp == 0:
!                 continue
!             try:
!                 pow(zero, exp)
!             except ZeroDivisionError:
!                 pass # taking zero to any negative exponent should fail
!             else:
!                 raise ValueError, "pow(%s, %s) did not fail" % (zero, exp)
  
!     print "    Testing 3-argument pow() function..."
!     il, ih = -20, 20
!     jl, jh = -5,   5
!     kl, kh = -10, 10
!     compare = cmp
!     if type == float:
!         il = 1
!         compare = test_support.fcmp
!     elif type == int:
!         jl = 0
!     elif type == long:
!         jl, jh = 0, 15
!     for i in range(il, ih+1):
!         for j in range(jl, jh+1):
!             for k in range(kl, kh+1):
!                 if k != 0:
!                     if type == float or j < 0:
!                         try:
!                             pow(type(i),j,k)
!                         except TypeError:
!                             pass
!                         else:
!                             raise ValueError, "expected TypeError from " + \
!                                 "pow%r" % ((type(i), j, k),)
!                         continue
!                     if compare(pow(type(i),j,k), pow(type(i),j)% type(k)):
!                         raise ValueError, "pow(" +str(i)+ "," +str(j)+ \
!                              "," +str(k)+ ") != pow(" +str(i)+ "," + \
!                              str(j)+ ") % " +str(k)
  
  
! print 'Testing integer mode...'
! powtest(int)
! print 'Testing long integer mode...'
! powtest(long)
! print 'Testing floating point mode...'
! powtest(float)
  
! # Other tests-- not very systematic
  
! print 'The number in both columns should match.'
! print `pow(3,3) % 8`, `pow(3,3,8)`
! print `pow(3,3) % -8`, `pow(3,3,-8)`
! print `pow(3,2) % -2`, `pow(3,2,-2)`
! print `pow(-3,3) % 8`, `pow(-3,3,8)`
! print `pow(-3,3) % -8`, `pow(-3,3,-8)`
! print `pow(5,2) % -8`, `pow(5,2,-8)`
! print
  
! print `pow(3L,3L) % 8`, `pow(3L,3L,8)`
! print `pow(3L,3L) % -8`, `pow(3L,3L,-8)`
! print `pow(3L,2) % -2`, `pow(3L,2,-2)`
! print `pow(-3L,3L) % 8`, `pow(-3L,3L,8)`
! print `pow(-3L,3L) % -8`, `pow(-3L,3L,-8)`
! print `pow(5L,2) % -8`, `pow(5L,2,-8)`
! print
  
! print
  
! for i in range(-10, 11):
!     for j in range(0, 6):
!         for k in range(-7, 11):
!             if j >= 0 and k != 0:
!                 o = pow(i,j) % k
!                 n = pow(i,j,k)
!                 if o != n: print 'Integer mismatch:', i,j,k
!             if j >= 0 and k != 0:
!                 o = pow(long(i),j) % k
!                 n = pow(long(i),j,k)
!                 if o != n: print 'Integer mismatch:', i,j,k
  
! class TestRpow:
!     def __rpow__(self, other):
!         return None
! None ** TestRpow()      # Won't fail when __rpow__ invoked.  SF bug #643260.
--- 1,111 ----
! import test.test_support, unittest
  
+ class PowTest(unittest.TestCase):
  
!     def powtest(self, type):
!         if type != float:
!             for i in range(-1000, 1000):
!                 self.assertEquals(pow(type(i), 0), 1)
!                 self.assertEquals(pow(type(i), 1), type(i))
!                 self.assertEquals(pow(type(0), 1), type(0))
!                 self.assertEquals(pow(type(1), 1), type(1))
  
!             for i in range(-100, 100):
!                 self.assertEquals(pow(type(i), 3), i*i*i)
  
!             pow2 = 1
!             for i in range(0,31):
!                 self.assertEquals(pow(2, i), pow2)
!                 if i != 30 : pow2 = pow2*2
  
!             for othertype in int, long:
!                 for i in range(-10, 0) + range(1, 10):
!                     ii = type(i)
!                     for j in range(1, 11):
!                         jj = -othertype(j)
                          pow(ii, jj)
  
!         for othertype in int, long, float:
!             for i in range(1, 100):
!                 zero = type(0)
!                 exp = -othertype(i/10.0)
!                 if exp == 0:
!                     continue
!                 self.assertRaises(ZeroDivisionError, pow, zero, exp)
  
!         il, ih = -20, 20
!         jl, jh = -5,   5
!         kl, kh = -10, 10
!         asseq = self.assertEqual
!         if type == float:
!             il = 1
!             asseq = self.assertAlmostEqual
!         elif type == int:
!             jl = 0
!         elif type == long:
!             jl, jh = 0, 15
!         for i in range(il, ih+1):
!             for j in range(jl, jh+1):
!                 for k in range(kl, kh+1):
!                     if k != 0:
!                         if type == float or j < 0:
!                             self.assertRaises(TypeError, pow, type(i), j, k)
!                             continue
!                         asseq(
!                             pow(type(i),j,k),
!                             pow(type(i),j)% type(k)
!                         )
  
+     def test_powint(self):
+         self.powtest(int)
  
!     def test_powlong(self):
!         self.powtest(long)
  
!     def test_powfloat(self):
!         self.powtest(float)
  
!     def test_other(self):
!         # Other tests-- not very systematic
!         self.assertEquals(pow(3,3) % 8, pow(3,3,8))
!         self.assertEquals(pow(3,3) % -8, pow(3,3,-8))
!         self.assertEquals(pow(3,2) % -2, pow(3,2,-2))
!         self.assertEquals(pow(-3,3) % 8, pow(-3,3,8))
!         self.assertEquals(pow(-3,3) % -8, pow(-3,3,-8))
!         self.assertEquals(pow(5,2) % -8, pow(5,2,-8))
  
!         self.assertEquals(pow(3L,3L) % 8, pow(3L,3L,8))
!         self.assertEquals(pow(3L,3L) % -8, pow(3L,3L,-8))
!         self.assertEquals(pow(3L,2) % -2, pow(3L,2,-2))
!         self.assertEquals(pow(-3L,3L) % 8, pow(-3L,3L,8))
!         self.assertEquals(pow(-3L,3L) % -8, pow(-3L,3L,-8))
!         self.assertEquals(pow(5L,2) % -8, pow(5L,2,-8))
  
!         for i in range(-10, 11):
!             for j in range(0, 6):
!                 for k in range(-7, 11):
!                     if j >= 0 and k != 0:
!                         self.assertEquals(
!                             pow(i,j) % k,
!                             pow(i,j,k)
!                         )
!                     if j >= 0 and k != 0:
!                         self.assertEquals(
!                             pow(long(i),j) % k,
!                             pow(long(i),j,k)
!                         )
  
!     def test_bug643260(self):
!         class TestRpow:
!             def __rpow__(self, other):
!                 return None
!         None ** TestRpow() # Won't fail when __rpow__ invoked.  SF bug #643260.
  
! 
! def test_main():
!     suite = unittest.TestSuite()
!     suite.addTest(unittest.makeSuite(PowTest))
!     test.test_support.run_suite(suite)
! 
! if __name__ == "__main__":
!     test_main()