11from enum import Enum , IntEnum
2+ from math import isnan
23from test .test_json import PyTest , CTest
34
45SMALL = 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+
2434class 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
80119class TestPyEnum (TestEnum , PyTest ): pass
81120class TestCEnum (TestEnum , CTest ): pass
0 commit comments