Close #18745: Improve enum tests in test_json for infinities and NaN.
diff --git a/Lib/test/test_json/test_enum.py b/Lib/test/test_json/test_enum.py
index 66c6480..10f4148 100644
--- a/Lib/test/test_json/test_enum.py
+++ b/Lib/test/test_json/test_enum.py
@@ -1,4 +1,5 @@
 from enum import Enum, IntEnum
+from math import isnan
 from test.test_json import PyTest, CTest
 
 SMALL = 1
@@ -21,6 +22,15 @@
     pi = PI
     tau = TAU
 
+INF = float('inf')
+NEG_INF = float('-inf')
+NAN = float('nan')
+
+class WierdNum(float, Enum):
+    inf = INF
+    neg_inf = NEG_INF
+    nan = NAN
+
 class TestEnum:
 
     def test_floats(self):
@@ -29,6 +39,16 @@
             self.assertEqual(float(self.dumps(enum)), enum)
             self.assertEqual(self.loads(self.dumps(enum)), enum)
 
+    def test_weird_floats(self):
+        for enum, expected in zip(WierdNum, ('Infinity', '-Infinity', 'NaN')):
+            self.assertEqual(self.dumps(enum), expected)
+            if not isnan(enum):
+                self.assertEqual(float(self.dumps(enum)), enum)
+                self.assertEqual(self.loads(self.dumps(enum)), enum)
+            else:
+                self.assertTrue(isnan(float(self.dumps(enum))))
+                self.assertTrue(isnan(self.loads(self.dumps(enum))))
+
     def test_ints(self):
         for enum in BigNum:
             self.assertEqual(self.dumps(enum), str(enum.value))
@@ -36,18 +56,28 @@
             self.assertEqual(self.loads(self.dumps(enum)), enum)
 
     def test_list(self):
-        self.assertEqual(
-                self.dumps(list(BigNum)),
-                str([SMALL, BIG, HUGE, REALLY_HUGE]),
-                )
-        self.assertEqual(self.dumps(list(FloatNum)), str([E, PI, TAU]))
+        self.assertEqual(self.dumps(list(BigNum)),
+                         str([SMALL, BIG, HUGE, REALLY_HUGE]))
+        self.assertEqual(self.loads(self.dumps(list(BigNum))),
+                         list(BigNum))
+        self.assertEqual(self.dumps(list(FloatNum)),
+                         str([E, PI, TAU]))
+        self.assertEqual(self.loads(self.dumps(list(FloatNum))),
+                         list(FloatNum))
+        self.assertEqual(self.dumps(list(WierdNum)),
+                        '[Infinity, -Infinity, NaN]')
+        self.assertEqual(self.loads(self.dumps(list(WierdNum)))[:2],
+                         list(WierdNum)[:2])
+        self.assertTrue(isnan(self.loads(self.dumps(list(WierdNum)))[2]))
 
     def test_dict_keys(self):
         s, b, h, r = BigNum
         e, p, t = FloatNum
+        i, j, n = WierdNum
         d = {
             s:'tiny', b:'large', h:'larger', r:'largest',
             e:"Euler's number", p:'pi', t:'tau',
+            i:'Infinity', j:'-Infinity', n:'NaN',
             }
         nd = self.loads(self.dumps(d))
         self.assertEqual(nd[str(SMALL)], 'tiny')
@@ -57,6 +87,9 @@
         self.assertEqual(nd[repr(E)], "Euler's number")
         self.assertEqual(nd[repr(PI)], 'pi')
         self.assertEqual(nd[repr(TAU)], 'tau')
+        self.assertEqual(nd['Infinity'], 'Infinity')
+        self.assertEqual(nd['-Infinity'], '-Infinity')
+        self.assertEqual(nd['NaN'], 'NaN')
 
     def test_dict_values(self):
         d = dict(
@@ -67,6 +100,9 @@
                 e=FloatNum.e,
                 pi=FloatNum.pi,
                 tau=FloatNum.tau,
+                i=WierdNum.inf,
+                j=WierdNum.neg_inf,
+                n=WierdNum.nan,
                 )
         nd = self.loads(self.dumps(d))
         self.assertEqual(nd['tiny'], SMALL)
@@ -76,6 +112,9 @@
         self.assertEqual(nd['e'], E)
         self.assertEqual(nd['pi'], PI)
         self.assertEqual(nd['tau'], TAU)
+        self.assertEqual(nd['i'], INF)
+        self.assertEqual(nd['j'], NEG_INF)
+        self.assertTrue(isnan(nd['n']))
 
 class TestPyEnum(TestEnum, PyTest): pass
 class TestCEnum(TestEnum, CTest): pass