Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit3650c8d

Browse files
skirpichevencukou
authored andcommitted
pythongh-102837: more tests for the math module (pythonGH-111930)
Add tests to improve coverage:* fsum: L1369, L1379, L1383, L1412* trunc: L2081* log: L2267* dist: L2577, L2579* hypot: L2632* sumprod: L2744, L2754, L2774, L2778, L2781, L2785, L2831, L2835, L2838* pow: L2982* prod: L3294, L3308, L3318-3330// line numbers wrt to9dc4fb8(cherry picked from commitc61de45)
1 parenta1447af commit3650c8d

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

‎Lib/test/test_math.py‎

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,7 @@ def msum(iterable):
667667
([],0.0),
668668
([0.0],0.0),
669669
([1e100,1.0,-1e100,1e-100,1e50,-1.0,-1e50],1e-100),
670+
([1e100,1.0,-1e100,1e-100,1e50,-1,-1e50],1e-100),
670671
([2.0**53,-0.5,-2.0**-54],2.0**53-1.0),
671672
([2.0**53,1.0,2.0**-100],2.0**53+2.0),
672673
([2.0**53+10.0,1.0,2.0**-100],2.0**53+12.0),
@@ -714,6 +715,22 @@ def msum(iterable):
714715
s=msum(vals)
715716
self.assertEqual(msum(vals),math.fsum(vals))
716717

718+
self.assertEqual(math.fsum([1.0,math.inf]),math.inf)
719+
self.assertTrue(math.isnan(math.fsum([math.nan,1.0])))
720+
self.assertEqual(math.fsum([1e100,FloatLike(1.0),-1e100,1e-100,
721+
1e50,FloatLike(-1.0),-1e50]),1e-100)
722+
self.assertRaises(OverflowError,math.fsum, [1e+308,1e+308])
723+
self.assertRaises(ValueError,math.fsum, [math.inf,-math.inf])
724+
self.assertRaises(TypeError,math.fsum, ['spam'])
725+
self.assertRaises(TypeError,math.fsum,1)
726+
self.assertRaises(OverflowError,math.fsum, [10**1000])
727+
728+
defbad_iter():
729+
yield1.0
730+
raiseZeroDivisionError
731+
732+
self.assertRaises(ZeroDivisionError,math.fsum,bad_iter())
733+
717734
deftestGcd(self):
718735
gcd=math.gcd
719736
self.assertEqual(gcd(0,0),0)
@@ -774,6 +791,8 @@ def testHypot(self):
774791
# Test allowable types (those with __float__)
775792
self.assertEqual(hypot(12.0,5.0),13.0)
776793
self.assertEqual(hypot(12,5),13)
794+
self.assertEqual(hypot(1,-1),math.sqrt(2))
795+
self.assertEqual(hypot(1,FloatLike(-1.)),math.sqrt(2))
777796
self.assertEqual(hypot(Decimal(12),Decimal(5)),13)
778797
self.assertEqual(hypot(Fraction(12,32),Fraction(5,32)),Fraction(13,32))
779798
self.assertEqual(hypot(bool(1),bool(0),bool(1),bool(1)),math.sqrt(3))
@@ -923,6 +942,10 @@ def testDist(self):
923942
# Test allowable types (those with __float__)
924943
self.assertEqual(dist((14.0,1.0), (2.0,-4.0)),13.0)
925944
self.assertEqual(dist((14,1), (2,-4)),13)
945+
self.assertEqual(dist((FloatLike(14.),1), (2,-4)),13)
946+
self.assertEqual(dist((11,1), (FloatLike(-1.),-4)),13)
947+
self.assertEqual(dist((14,FloatLike(-1.)), (2,-6)),13)
948+
self.assertEqual(dist((14,-1), (2,-6)),13)
926949
self.assertEqual(dist((D(14),D(1)), (D(2),D(-4))),D(13))
927950
self.assertEqual(dist((F(14,32),F(1,32)), (F(2,32),F(-4,32))),
928951
F(13,32))
@@ -974,6 +997,12 @@ class T(tuple):
974997
withself.assertRaises((ValueError,OverflowError)):
975998
dist((2,3), (1,int_too_big_for_float))
976999

1000+
classBadFloat:
1001+
__float__=BadDescr()
1002+
1003+
withself.assertRaises(ValueError):
1004+
dist([1], [BadFloat()])
1005+
9771006
# Verify that the one dimensional case is equivalent to abs()
9781007
foriinrange(20):
9791008
p,q=random.random(),random.random()
@@ -1143,6 +1172,7 @@ def testLdexp(self):
11431172

11441173
deftestLog(self):
11451174
self.assertRaises(TypeError,math.log)
1175+
self.assertRaises(TypeError,math.log,1,2,3)
11461176
self.ftest('log(1/e)',math.log(1/math.e),-1)
11471177
self.ftest('log(1)',math.log(1),0)
11481178
self.ftest('log(e)',math.log(math.e),1)
@@ -1212,6 +1242,8 @@ def testSumProd(self):
12121242
self.assertEqual(sumprod(iter([10,20,30]), (1,2,3)),140)
12131243
self.assertEqual(sumprod([1.5,2.5], [3.5,4.5]),16.5)
12141244
self.assertEqual(sumprod([], []),0)
1245+
self.assertEqual(sumprod([-1], [1.]),-1)
1246+
self.assertEqual(sumprod([1.], [-1]),-1)
12151247

12161248
# Type preservation and coercion
12171249
forvin [
@@ -1237,11 +1269,20 @@ def testSumProd(self):
12371269
self.assertRaises(TypeError,sumprod, [], [], [])# Three args
12381270
self.assertRaises(TypeError,sumprod,None, [10])# Non-iterable
12391271
self.assertRaises(TypeError,sumprod, [10],None)# Non-iterable
1272+
self.assertRaises(TypeError,sumprod, ['x'], [1.0])
12401273

12411274
# Uneven lengths
12421275
self.assertRaises(ValueError,sumprod, [10,20], [30])
12431276
self.assertRaises(ValueError,sumprod, [10], [20,30])
12441277

1278+
# Overflows
1279+
self.assertEqual(sumprod([10**20], [1]),10**20)
1280+
self.assertEqual(sumprod([1], [10**20]),10**20)
1281+
self.assertEqual(sumprod([10**10], [10**10]),10**20)
1282+
self.assertEqual(sumprod([10**7]*10**5, [10**7]*10**5),10**19)
1283+
self.assertRaises(OverflowError,sumprod, [10**1000], [1.0])
1284+
self.assertRaises(OverflowError,sumprod, [1.0], [10**1000])
1285+
12451286
# Error in iterator
12461287
defraise_after(n):
12471288
foriinrange(n):
@@ -1252,6 +1293,11 @@ def raise_after(n):
12521293
withself.assertRaises(RuntimeError):
12531294
sumprod(raise_after(5),range(10))
12541295

1296+
fromtest.test_iterimportBasicIterClass
1297+
1298+
self.assertEqual(sumprod(BasicIterClass(1), [1]),0)
1299+
self.assertEqual(sumprod([1],BasicIterClass(1)),0)
1300+
12551301
# Error in multiplication
12561302
classBadMultiply:
12571303
def__mul__(self,other):
@@ -1491,6 +1537,7 @@ def testPow(self):
14911537
self.assertTrue(math.isnan(math.pow(2,NAN)))
14921538
self.assertTrue(math.isnan(math.pow(0,NAN)))
14931539
self.assertEqual(math.pow(1,NAN),1)
1540+
self.assertRaises(OverflowError,math.pow,1e+100,1e+100)
14941541

14951542
# pow(0., x)
14961543
self.assertEqual(math.pow(0.,INF),0.)
@@ -1847,6 +1894,8 @@ def __trunc__(self):
18471894
return23
18481895
classTestNoTrunc:
18491896
pass
1897+
classTestBadTrunc:
1898+
__trunc__=BadDescr()
18501899

18511900
self.assertEqual(math.trunc(TestTrunc()),23)
18521901
self.assertEqual(math.trunc(FloatTrunc()),23)
@@ -1855,6 +1904,7 @@ class TestNoTrunc:
18551904
self.assertRaises(TypeError,math.trunc,1,2)
18561905
self.assertRaises(TypeError,math.trunc,FloatLike(23.5))
18571906
self.assertRaises(TypeError,math.trunc,TestNoTrunc())
1907+
self.assertRaises(ValueError,math.trunc,TestBadTrunc())
18581908

18591909
deftestIsfinite(self):
18601910
self.assertTrue(math.isfinite(0.0))
@@ -2055,6 +2105,8 @@ def test_mtestfile(self):
20552105
'\n '.join(failures))
20562106

20572107
deftest_prod(self):
2108+
fromfractionsimportFractionasF
2109+
20582110
prod=math.prod
20592111
self.assertEqual(prod([]),1)
20602112
self.assertEqual(prod([],start=5),5)
@@ -2066,6 +2118,14 @@ def test_prod(self):
20662118
self.assertEqual(prod([1.0,2.0,3.0,4.0,5.0]),120.0)
20672119
self.assertEqual(prod([1,2,3,4.0,5.0]),120.0)
20682120
self.assertEqual(prod([1.0,2.0,3.0,4,5]),120.0)
2121+
self.assertEqual(prod([1.,F(3,2)]),1.5)
2122+
2123+
# Error in multiplication
2124+
classBadMultiply:
2125+
def__rmul__(self,other):
2126+
raiseRuntimeError
2127+
withself.assertRaises(RuntimeError):
2128+
prod([10.,BadMultiply()])
20692129

20702130
# Test overflow in fast-path for integers
20712131
self.assertEqual(prod([1,1,2**32,1,1]),2**32)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp