Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 363f6d6

Browse files
committed
Port test_pow.py to PyUnit. From SF patch #662807
1 parent 93fe564 commit 363f6d6

2 files changed

Lines changed: 110 additions & 149 deletions

File tree

Lib/test/output/test_pow

Lines changed: 0 additions & 25 deletions
This file was deleted.

Lib/test/test_pow.py

Lines changed: 110 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -1,125 +1,111 @@
1-
import sys
2-
from test import test_support
3-
4-
5-
def powtest(type):
6-
if type != float:
7-
print " Testing 2-argument pow() function..."
8-
for i in range(-1000, 1000):
9-
if pow(type(i), 0) != 1:
10-
raise ValueError, 'pow('+str(i)+',0) != 1'
11-
if pow(type(i), 1) != type(i):
12-
raise ValueError, 'pow('+str(i)+',1) != '+str(i)
13-
if pow(type(0), 1) != type(0):
14-
raise ValueError, 'pow(0,'+str(i)+') != 0'
15-
if pow(type(1), 1) != type(1):
16-
raise ValueError, 'pow(1,'+str(i)+') != 1'
17-
18-
for i in range(-100, 100):
19-
if pow(type(i), 3) != i*i*i:
20-
raise ValueError, 'pow('+str(i)+',3) != '+str(i*i*i)
21-
22-
pow2 = 1
23-
for i in range(0,31):
24-
if pow(2, i) != pow2:
25-
raise ValueError, 'pow(2,'+str(i)+') != '+str(pow2)
26-
if i != 30 : pow2 = pow2*2
27-
28-
for othertype in int, long:
29-
for i in range(-10, 0) + range(1, 10):
30-
ii = type(i)
31-
for j in range(1, 11):
32-
jj = -othertype(j)
33-
try:
1+
import test.test_support, unittest
2+
3+
class PowTest(unittest.TestCase):
4+
5+
def powtest(self, type):
6+
if type != float:
7+
for i in range(-1000, 1000):
8+
self.assertEquals(pow(type(i), 0), 1)
9+
self.assertEquals(pow(type(i), 1), type(i))
10+
self.assertEquals(pow(type(0), 1), type(0))
11+
self.assertEquals(pow(type(1), 1), type(1))
12+
13+
for i in range(-100, 100):
14+
self.assertEquals(pow(type(i), 3), i*i*i)
15+
16+
pow2 = 1
17+
for i in range(0,31):
18+
self.assertEquals(pow(2, i), pow2)
19+
if i != 30 : pow2 = pow2*2
20+
21+
for othertype in int, long:
22+
for i in range(-10, 0) + range(1, 10):
23+
ii = type(i)
24+
for j in range(1, 11):
25+
jj = -othertype(j)
3426
pow(ii, jj)
35-
except ValueError:
36-
raise ValueError, "pow(%s, %s) failed" % (ii, jj)
37-
38-
for othertype in int, long, float:
39-
for i in range(1, 100):
40-
zero = type(0)
41-
exp = -othertype(i/10.0)
42-
if exp == 0:
43-
continue
44-
try:
45-
pow(zero, exp)
46-
except ZeroDivisionError:
47-
pass # taking zero to any negative exponent should fail
48-
else:
49-
raise ValueError, "pow(%s, %s) did not fail" % (zero, exp)
50-
51-
print " Testing 3-argument pow() function..."
52-
il, ih = -20, 20
53-
jl, jh = -5, 5
54-
kl, kh = -10, 10
55-
compare = cmp
56-
if type == float:
57-
il = 1
58-
compare = test_support.fcmp
59-
elif type == int:
60-
jl = 0
61-
elif type == long:
62-
jl, jh = 0, 15
63-
for i in range(il, ih+1):
64-
for j in range(jl, jh+1):
65-
for k in range(kl, kh+1):
66-
if k != 0:
67-
if type == float or j < 0:
68-
try:
69-
pow(type(i),j,k)
70-
except TypeError:
71-
pass
72-
else:
73-
raise ValueError, "expected TypeError from " + \
74-
"pow%r" % ((type(i), j, k),)
75-
continue
76-
if compare(pow(type(i),j,k), pow(type(i),j)% type(k)):
77-
raise ValueError, "pow(" +str(i)+ "," +str(j)+ \
78-
"," +str(k)+ ") != pow(" +str(i)+ "," + \
79-
str(j)+ ") % " +str(k)
80-
81-
82-
print 'Testing integer mode...'
83-
powtest(int)
84-
print 'Testing long integer mode...'
85-
powtest(long)
86-
print 'Testing floating point mode...'
87-
powtest(float)
88-
89-
# Other tests-- not very systematic
90-
91-
print 'The number in both columns should match.'
92-
print `pow(3,3) % 8`, `pow(3,3,8)`
93-
print `pow(3,3) % -8`, `pow(3,3,-8)`
94-
print `pow(3,2) % -2`, `pow(3,2,-2)`
95-
print `pow(-3,3) % 8`, `pow(-3,3,8)`
96-
print `pow(-3,3) % -8`, `pow(-3,3,-8)`
97-
print `pow(5,2) % -8`, `pow(5,2,-8)`
98-
print
99-
100-
print `pow(3L,3L) % 8`, `pow(3L,3L,8)`
101-
print `pow(3L,3L) % -8`, `pow(3L,3L,-8)`
102-
print `pow(3L,2) % -2`, `pow(3L,2,-2)`
103-
print `pow(-3L,3L) % 8`, `pow(-3L,3L,8)`
104-
print `pow(-3L,3L) % -8`, `pow(-3L,3L,-8)`
105-
print `pow(5L,2) % -8`, `pow(5L,2,-8)`
106-
print
107-
108-
print
109-
110-
for i in range(-10, 11):
111-
for j in range(0, 6):
112-
for k in range(-7, 11):
113-
if j >= 0 and k != 0:
114-
o = pow(i,j) % k
115-
n = pow(i,j,k)
116-
if o != n: print 'Integer mismatch:', i,j,k
117-
if j >= 0 and k != 0:
118-
o = pow(long(i),j) % k
119-
n = pow(long(i),j,k)
120-
if o != n: print 'Integer mismatch:', i,j,k
121-
122-
class TestRpow:
123-
def __rpow__(self, other):
124-
return None
125-
None ** TestRpow() # Won't fail when __rpow__ invoked. SF bug #643260.
27+
28+
for othertype in int, long, float:
29+
for i in range(1, 100):
30+
zero = type(0)
31+
exp = -othertype(i/10.0)
32+
if exp == 0:
33+
continue
34+
self.assertRaises(ZeroDivisionError, pow, zero, exp)
35+
36+
il, ih = -20, 20
37+
jl, jh = -5, 5
38+
kl, kh = -10, 10
39+
asseq = self.assertEqual
40+
if type == float:
41+
il = 1
42+
asseq = self.assertAlmostEqual
43+
elif type == int:
44+
jl = 0
45+
elif type == long:
46+
jl, jh = 0, 15
47+
for i in range(il, ih+1):
48+
for j in range(jl, jh+1):
49+
for k in range(kl, kh+1):
50+
if k != 0:
51+
if type == float or j < 0:
52+
self.assertRaises(TypeError, pow, type(i), j, k)
53+
continue
54+
asseq(
55+
pow(type(i),j,k),
56+
pow(type(i),j)% type(k)
57+
)
58+
59+
def test_powint(self):
60+
self.powtest(int)
61+
62+
def test_powlong(self):
63+
self.powtest(long)
64+
65+
def test_powfloat(self):
66+
self.powtest(float)
67+
68+
def test_other(self):
69+
# Other tests-- not very systematic
70+
self.assertEquals(pow(3,3) % 8, pow(3,3,8))
71+
self.assertEquals(pow(3,3) % -8, pow(3,3,-8))
72+
self.assertEquals(pow(3,2) % -2, pow(3,2,-2))
73+
self.assertEquals(pow(-3,3) % 8, pow(-3,3,8))
74+
self.assertEquals(pow(-3,3) % -8, pow(-3,3,-8))
75+
self.assertEquals(pow(5,2) % -8, pow(5,2,-8))
76+
77+
self.assertEquals(pow(3L,3L) % 8, pow(3L,3L,8))
78+
self.assertEquals(pow(3L,3L) % -8, pow(3L,3L,-8))
79+
self.assertEquals(pow(3L,2) % -2, pow(3L,2,-2))
80+
self.assertEquals(pow(-3L,3L) % 8, pow(-3L,3L,8))
81+
self.assertEquals(pow(-3L,3L) % -8, pow(-3L,3L,-8))
82+
self.assertEquals(pow(5L,2) % -8, pow(5L,2,-8))
83+
84+
for i in range(-10, 11):
85+
for j in range(0, 6):
86+
for k in range(-7, 11):
87+
if j >= 0 and k != 0:
88+
self.assertEquals(
89+
pow(i,j) % k,
90+
pow(i,j,k)
91+
)
92+
if j >= 0 and k != 0:
93+
self.assertEquals(
94+
pow(long(i),j) % k,
95+
pow(long(i),j,k)
96+
)
97+
98+
def test_bug643260(self):
99+
class TestRpow:
100+
def __rpow__(self, other):
101+
return None
102+
None ** TestRpow() # Won't fail when __rpow__ invoked. SF bug #643260.
103+
104+
105+
def test_main():
106+
suite = unittest.TestSuite()
107+
suite.addTest(unittest.makeSuite(PowTest))
108+
test.test_support.run_suite(suite)
109+
110+
if __name__ == "__main__":
111+
test_main()

0 commit comments

Comments
 (0)