Skip to content

Commit a661f45

Browse files
committed
Close #18745: Improve enum tests in test_json for infinities and NaN.
1 parent 51bae47 commit a661f45

File tree

1 file changed

+44
-5
lines changed

1 file changed

+44
-5
lines changed

Lib/test/test_json/test_enum.py

+44-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from enum import Enum, IntEnum
2+
from math import isnan
23
from test.test_json import PyTest, CTest
34

45
SMALL = 1
@@ -21,6 +22,15 @@ class FloatNum(float, Enum):
2122
pi = PI
2223
tau = TAU
2324

25+
INF = float('inf')
26+
NEG_INF = float('-inf')
27+
NAN = float('nan')
28+
29+
class WierdNum(float, Enum):
30+
inf = INF
31+
neg_inf = NEG_INF
32+
nan = NAN
33+
2434
class TestEnum:
2535

2636
def test_floats(self):
@@ -29,25 +39,45 @@ def test_floats(self):
2939
self.assertEqual(float(self.dumps(enum)), enum)
3040
self.assertEqual(self.loads(self.dumps(enum)), enum)
3141

42+
def test_weird_floats(self):
43+
for enum, expected in zip(WierdNum, ('Infinity', '-Infinity', 'NaN')):
44+
self.assertEqual(self.dumps(enum), expected)
45+
if not isnan(enum):
46+
self.assertEqual(float(self.dumps(enum)), enum)
47+
self.assertEqual(self.loads(self.dumps(enum)), enum)
48+
else:
49+
self.assertTrue(isnan(float(self.dumps(enum))))
50+
self.assertTrue(isnan(self.loads(self.dumps(enum))))
51+
3252
def test_ints(self):
3353
for enum in BigNum:
3454
self.assertEqual(self.dumps(enum), str(enum.value))
3555
self.assertEqual(int(self.dumps(enum)), enum)
3656
self.assertEqual(self.loads(self.dumps(enum)), enum)
3757

3858
def test_list(self):
39-
self.assertEqual(
40-
self.dumps(list(BigNum)),
41-
str([SMALL, BIG, HUGE, REALLY_HUGE]),
42-
)
43-
self.assertEqual(self.dumps(list(FloatNum)), str([E, PI, TAU]))
59+
self.assertEqual(self.dumps(list(BigNum)),
60+
str([SMALL, BIG, HUGE, REALLY_HUGE]))
61+
self.assertEqual(self.loads(self.dumps(list(BigNum))),
62+
list(BigNum))
63+
self.assertEqual(self.dumps(list(FloatNum)),
64+
str([E, PI, TAU]))
65+
self.assertEqual(self.loads(self.dumps(list(FloatNum))),
66+
list(FloatNum))
67+
self.assertEqual(self.dumps(list(WierdNum)),
68+
'[Infinity, -Infinity, NaN]')
69+
self.assertEqual(self.loads(self.dumps(list(WierdNum)))[:2],
70+
list(WierdNum)[:2])
71+
self.assertTrue(isnan(self.loads(self.dumps(list(WierdNum)))[2]))
4472

4573
def test_dict_keys(self):
4674
s, b, h, r = BigNum
4775
e, p, t = FloatNum
76+
i, j, n = WierdNum
4877
d = {
4978
s:'tiny', b:'large', h:'larger', r:'largest',
5079
e:"Euler's number", p:'pi', t:'tau',
80+
i:'Infinity', j:'-Infinity', n:'NaN',
5181
}
5282
nd = self.loads(self.dumps(d))
5383
self.assertEqual(nd[str(SMALL)], 'tiny')
@@ -57,6 +87,9 @@ def test_dict_keys(self):
5787
self.assertEqual(nd[repr(E)], "Euler's number")
5888
self.assertEqual(nd[repr(PI)], 'pi')
5989
self.assertEqual(nd[repr(TAU)], 'tau')
90+
self.assertEqual(nd['Infinity'], 'Infinity')
91+
self.assertEqual(nd['-Infinity'], '-Infinity')
92+
self.assertEqual(nd['NaN'], 'NaN')
6093

6194
def test_dict_values(self):
6295
d = dict(
@@ -67,6 +100,9 @@ def test_dict_values(self):
67100
e=FloatNum.e,
68101
pi=FloatNum.pi,
69102
tau=FloatNum.tau,
103+
i=WierdNum.inf,
104+
j=WierdNum.neg_inf,
105+
n=WierdNum.nan,
70106
)
71107
nd = self.loads(self.dumps(d))
72108
self.assertEqual(nd['tiny'], SMALL)
@@ -76,6 +112,9 @@ def test_dict_values(self):
76112
self.assertEqual(nd['e'], E)
77113
self.assertEqual(nd['pi'], PI)
78114
self.assertEqual(nd['tau'], TAU)
115+
self.assertEqual(nd['i'], INF)
116+
self.assertEqual(nd['j'], NEG_INF)
117+
self.assertTrue(isnan(nd['n']))
79118

80119
class TestPyEnum(TestEnum, PyTest): pass
81120
class TestCEnum(TestEnum, CTest): pass

0 commit comments

Comments
 (0)