OLD | NEW |
1 import test.support, unittest | 1 import test.support, unittest |
2 | 2 |
3 class PowTest(unittest.TestCase): | 3 class PowTest(unittest.TestCase): |
4 | 4 |
5 def powtest(self, type): | 5 def powtest(self, type): |
6 if type != float: | 6 if type != float: |
7 for i in range(-1000, 1000): | 7 for i in range(-1000, 1000): |
8 self.assertEquals(pow(type(i), 0), 1) | 8 self.assertEqual(pow(type(i), 0), 1) |
9 self.assertEquals(pow(type(i), 1), type(i)) | 9 self.assertEqual(pow(type(i), 1), type(i)) |
10 self.assertEquals(pow(type(0), 1), type(0)) | 10 self.assertEqual(pow(type(0), 1), type(0)) |
11 self.assertEquals(pow(type(1), 1), type(1)) | 11 self.assertEqual(pow(type(1), 1), type(1)) |
12 | 12 |
13 for i in range(-100, 100): | 13 for i in range(-100, 100): |
14 self.assertEquals(pow(type(i), 3), i*i*i) | 14 self.assertEqual(pow(type(i), 3), i*i*i) |
15 | 15 |
16 pow2 = 1 | 16 pow2 = 1 |
17 for i in range(0, 31): | 17 for i in range(0, 31): |
18 self.assertEquals(pow(2, i), pow2) | 18 self.assertEqual(pow(2, i), pow2) |
19 if i != 30 : pow2 = pow2*2 | 19 if i != 30 : pow2 = pow2*2 |
20 | 20 |
21 for othertype in (int,): | 21 for othertype in (int,): |
22 for i in list(range(-10, 0)) + list(range(1, 10)): | 22 for i in list(range(-10, 0)) + list(range(1, 10)): |
23 ii = type(i) | 23 ii = type(i) |
24 for j in range(1, 11): | 24 for j in range(1, 11): |
25 jj = -othertype(j) | 25 jj = -othertype(j) |
26 pow(ii, jj) | 26 pow(ii, jj) |
27 | 27 |
28 for othertype in int, float: | 28 for othertype in int, float: |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 self.powtest(int) | 60 self.powtest(int) |
61 | 61 |
62 def test_powlong(self): | 62 def test_powlong(self): |
63 self.powtest(int) | 63 self.powtest(int) |
64 | 64 |
65 def test_powfloat(self): | 65 def test_powfloat(self): |
66 self.powtest(float) | 66 self.powtest(float) |
67 | 67 |
68 def test_other(self): | 68 def test_other(self): |
69 # Other tests-- not very systematic | 69 # Other tests-- not very systematic |
70 self.assertEquals(pow(3,3) % 8, pow(3,3,8)) | 70 self.assertEqual(pow(3,3) % 8, pow(3,3,8)) |
71 self.assertEquals(pow(3,3) % -8, pow(3,3,-8)) | 71 self.assertEqual(pow(3,3) % -8, pow(3,3,-8)) |
72 self.assertEquals(pow(3,2) % -2, pow(3,2,-2)) | 72 self.assertEqual(pow(3,2) % -2, pow(3,2,-2)) |
73 self.assertEquals(pow(-3,3) % 8, pow(-3,3,8)) | 73 self.assertEqual(pow(-3,3) % 8, pow(-3,3,8)) |
74 self.assertEquals(pow(-3,3) % -8, pow(-3,3,-8)) | 74 self.assertEqual(pow(-3,3) % -8, pow(-3,3,-8)) |
75 self.assertEquals(pow(5,2) % -8, pow(5,2,-8)) | 75 self.assertEqual(pow(5,2) % -8, pow(5,2,-8)) |
76 | 76 |
77 self.assertEquals(pow(3,3) % 8, pow(3,3,8)) | 77 self.assertEqual(pow(3,3) % 8, pow(3,3,8)) |
78 self.assertEquals(pow(3,3) % -8, pow(3,3,-8)) | 78 self.assertEqual(pow(3,3) % -8, pow(3,3,-8)) |
79 self.assertEquals(pow(3,2) % -2, pow(3,2,-2)) | 79 self.assertEqual(pow(3,2) % -2, pow(3,2,-2)) |
80 self.assertEquals(pow(-3,3) % 8, pow(-3,3,8)) | 80 self.assertEqual(pow(-3,3) % 8, pow(-3,3,8)) |
81 self.assertEquals(pow(-3,3) % -8, pow(-3,3,-8)) | 81 self.assertEqual(pow(-3,3) % -8, pow(-3,3,-8)) |
82 self.assertEquals(pow(5,2) % -8, pow(5,2,-8)) | 82 self.assertEqual(pow(5,2) % -8, pow(5,2,-8)) |
83 | 83 |
84 for i in range(-10, 11): | 84 for i in range(-10, 11): |
85 for j in range(0, 6): | 85 for j in range(0, 6): |
86 for k in range(-7, 11): | 86 for k in range(-7, 11): |
87 if j >= 0 and k != 0: | 87 if j >= 0 and k != 0: |
88 self.assertEquals( | 88 self.assertEqual( |
89 pow(i,j) % k, | 89 pow(i,j) % k, |
90 pow(i,j,k) | 90 pow(i,j,k) |
91 ) | 91 ) |
92 if j >= 0 and k != 0: | 92 if j >= 0 and k != 0: |
93 self.assertEquals( | 93 self.assertEqual( |
94 pow(int(i),j) % k, | 94 pow(int(i),j) % k, |
95 pow(int(i),j,k) | 95 pow(int(i),j,k) |
96 ) | 96 ) |
97 | 97 |
98 def test_bug643260(self): | 98 def test_bug643260(self): |
99 class TestRpow: | 99 class TestRpow: |
100 def __rpow__(self, other): | 100 def __rpow__(self, other): |
101 return None | 101 return None |
102 None ** TestRpow() # Won't fail when __rpow__ invoked. SF bug #643260. | 102 None ** TestRpow() # Won't fail when __rpow__ invoked. SF bug #643260. |
103 | 103 |
104 def test_bug705231(self): | 104 def test_bug705231(self): |
105 # -1.0 raised to an integer should never blow up. It did if the | 105 # -1.0 raised to an integer should never blow up. It did if the |
106 # platform pow() was buggy, and Python didn't worm around it. | 106 # platform pow() was buggy, and Python didn't worm around it. |
107 eq = self.assertEquals | 107 eq = self.assertEqual |
108 a = -1.0 | 108 a = -1.0 |
109 # The next two tests can still fail if the platform floor() | 109 # The next two tests can still fail if the platform floor() |
110 # function doesn't treat all large inputs as integers | 110 # function doesn't treat all large inputs as integers |
111 # test_math should also fail if that is happening | 111 # test_math should also fail if that is happening |
112 eq(pow(a, 1.23e167), 1.0) | 112 eq(pow(a, 1.23e167), 1.0) |
113 eq(pow(a, -1.23e167), 1.0) | 113 eq(pow(a, -1.23e167), 1.0) |
114 for b in range(-10, 11): | 114 for b in range(-10, 11): |
115 eq(pow(a, float(b)), b & 1 and -1.0 or 1.0) | 115 eq(pow(a, float(b)), b & 1 and -1.0 or 1.0) |
116 for n in range(0, 100): | 116 for n in range(0, 100): |
117 fiveto = float(5 ** n) | 117 fiveto = float(5 ** n) |
118 # For small n, fiveto will be odd. Eventually we run out of | 118 # For small n, fiveto will be odd. Eventually we run out of |
119 # mantissa bits, though, and thereafer fiveto will be even. | 119 # mantissa bits, though, and thereafer fiveto will be even. |
120 expected = fiveto % 2.0 and -1.0 or 1.0 | 120 expected = fiveto % 2.0 and -1.0 or 1.0 |
121 eq(pow(a, fiveto), expected) | 121 eq(pow(a, fiveto), expected) |
122 eq(pow(a, -fiveto), expected) | 122 eq(pow(a, -fiveto), expected) |
123 eq(expected, 1.0) # else we didn't push fiveto to evenness | 123 eq(expected, 1.0) # else we didn't push fiveto to evenness |
124 | 124 |
125 def test_main(): | 125 def test_main(): |
126 test.support.run_unittest(PowTest) | 126 test.support.run_unittest(PowTest) |
127 | 127 |
128 if __name__ == "__main__": | 128 if __name__ == "__main__": |
129 test_main() | 129 test_main() |
OLD | NEW |