1
1
from enum import Enum , IntEnum
2
+ from math import isnan
2
3
from test .test_json import PyTest , CTest
3
4
4
5
SMALL = 1
@@ -21,6 +22,15 @@ class FloatNum(float, Enum):
21
22
pi = PI
22
23
tau = TAU
23
24
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
+
24
34
class TestEnum :
25
35
26
36
def test_floats (self ):
@@ -29,25 +39,45 @@ def test_floats(self):
29
39
self .assertEqual (float (self .dumps (enum )), enum )
30
40
self .assertEqual (self .loads (self .dumps (enum )), enum )
31
41
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
+
32
52
def test_ints (self ):
33
53
for enum in BigNum :
34
54
self .assertEqual (self .dumps (enum ), str (enum .value ))
35
55
self .assertEqual (int (self .dumps (enum )), enum )
36
56
self .assertEqual (self .loads (self .dumps (enum )), enum )
37
57
38
58
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 ]))
44
72
45
73
def test_dict_keys (self ):
46
74
s , b , h , r = BigNum
47
75
e , p , t = FloatNum
76
+ i , j , n = WierdNum
48
77
d = {
49
78
s :'tiny' , b :'large' , h :'larger' , r :'largest' ,
50
79
e :"Euler's number" , p :'pi' , t :'tau' ,
80
+ i :'Infinity' , j :'-Infinity' , n :'NaN' ,
51
81
}
52
82
nd = self .loads (self .dumps (d ))
53
83
self .assertEqual (nd [str (SMALL )], 'tiny' )
@@ -57,6 +87,9 @@ def test_dict_keys(self):
57
87
self .assertEqual (nd [repr (E )], "Euler's number" )
58
88
self .assertEqual (nd [repr (PI )], 'pi' )
59
89
self .assertEqual (nd [repr (TAU )], 'tau' )
90
+ self .assertEqual (nd ['Infinity' ], 'Infinity' )
91
+ self .assertEqual (nd ['-Infinity' ], '-Infinity' )
92
+ self .assertEqual (nd ['NaN' ], 'NaN' )
60
93
61
94
def test_dict_values (self ):
62
95
d = dict (
@@ -67,6 +100,9 @@ def test_dict_values(self):
67
100
e = FloatNum .e ,
68
101
pi = FloatNum .pi ,
69
102
tau = FloatNum .tau ,
103
+ i = WierdNum .inf ,
104
+ j = WierdNum .neg_inf ,
105
+ n = WierdNum .nan ,
70
106
)
71
107
nd = self .loads (self .dumps (d ))
72
108
self .assertEqual (nd ['tiny' ], SMALL )
@@ -76,6 +112,9 @@ def test_dict_values(self):
76
112
self .assertEqual (nd ['e' ], E )
77
113
self .assertEqual (nd ['pi' ], PI )
78
114
self .assertEqual (nd ['tau' ], TAU )
115
+ self .assertEqual (nd ['i' ], INF )
116
+ self .assertEqual (nd ['j' ], NEG_INF )
117
+ self .assertTrue (isnan (nd ['n' ]))
79
118
80
119
class TestPyEnum (TestEnum , PyTest ): pass
81
120
class TestCEnum (TestEnum , CTest ): pass
0 commit comments