import test
.test_support
, unittest
class PowTest(unittest
.TestCase
):
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
)
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):
for othertype
in int, long, float:
self
.assertRaises(ZeroDivisionError, pow, zero
, exp
)
asseq
= self
.assertAlmostEqual
for i
in range(il
, ih
+1):
for j
in range(jl
, jh
+1):
for k
in range(kl
, kh
+1):
if type == float or j
< 0:
self
.assertRaises(TypeError, pow, type(i
), j
, k
)
# 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))
def test_bug643260(self
):
def __rpow__(self
, other
):
None ** TestRpow() # Won't fail when __rpow__ invoked. SF bug #643260.
def test_bug705231(self
):
# -1.0 raised to an integer should never blow up. It did if the
# platform pow() was buggy, and Python didn't worm around it.
eq(pow(a
, 1.23e167
), 1.0)
eq(pow(a
, -1.23e167
), 1.0)
eq(pow(a
, float(b
)), b
& 1 and -1.0 or 1.0)
# For small n, fiveto will be odd. Eventually we run out of
# mantissa bits, though, and thereafer fiveto will be even.
expected
= fiveto
% 2.0 and -1.0 or 1.0
eq(pow(a
, fiveto
), expected
)
eq(pow(a
, -fiveto
), expected
)
eq(expected
, 1.0) # else we didn't push fiveto to evenness
test
.test_support
.run_unittest(PowTest
)
if __name__
== "__main__":