(root)/
Python-3.11.7/
Lib/
test/
test_json/
test_enum.py
       1  from enum import Enum, IntEnum
       2  from math import isnan
       3  from test.test_json import PyTest, CTest
       4  
       5  SMALL = 1
       6  BIG = 1<<32
       7  HUGE = 1<<64
       8  REALLY_HUGE = 1<<96
       9  
      10  class ESC[4;38;5;81mBigNum(ESC[4;38;5;149mIntEnum):
      11      small = SMALL
      12      big = BIG
      13      huge = HUGE
      14      really_huge = REALLY_HUGE
      15  
      16  E = 2.718281
      17  PI = 3.141593
      18  TAU = 2 * PI
      19  
      20  class ESC[4;38;5;81mFloatNum(ESC[4;38;5;149mfloat, ESC[4;38;5;149mEnum):
      21      e = E
      22      pi = PI
      23      tau = TAU
      24  
      25  INF = float('inf')
      26  NEG_INF = float('-inf')
      27  NAN = float('nan')
      28  
      29  class ESC[4;38;5;81mWierdNum(ESC[4;38;5;149mfloat, ESC[4;38;5;149mEnum):
      30      inf = INF
      31      neg_inf = NEG_INF
      32      nan = NAN
      33  
      34  class ESC[4;38;5;81mTestEnum:
      35  
      36      def test_floats(self):
      37          for enum in FloatNum:
      38              self.assertEqual(self.dumps(enum), repr(enum.value))
      39              self.assertEqual(float(self.dumps(enum)), enum)
      40              self.assertEqual(self.loads(self.dumps(enum)), enum)
      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  
      52      def test_ints(self):
      53          for enum in BigNum:
      54              self.assertEqual(self.dumps(enum), str(enum.value))
      55              self.assertEqual(int(self.dumps(enum)), enum)
      56              self.assertEqual(self.loads(self.dumps(enum)), enum)
      57  
      58      def test_list(self):
      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]))
      72  
      73      def test_dict_keys(self):
      74          s, b, h, r = BigNum
      75          e, p, t = FloatNum
      76          i, j, n = WierdNum
      77          d = {
      78              s:'tiny', b:'large', h:'larger', r:'largest',
      79              e:"Euler's number", p:'pi', t:'tau',
      80              i:'Infinity', j:'-Infinity', n:'NaN',
      81              }
      82          nd = self.loads(self.dumps(d))
      83          self.assertEqual(nd[str(SMALL)], 'tiny')
      84          self.assertEqual(nd[str(BIG)], 'large')
      85          self.assertEqual(nd[str(HUGE)], 'larger')
      86          self.assertEqual(nd[str(REALLY_HUGE)], 'largest')
      87          self.assertEqual(nd[repr(E)], "Euler's number")
      88          self.assertEqual(nd[repr(PI)], 'pi')
      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')
      93  
      94      def test_dict_values(self):
      95          d = dict(
      96                  tiny=BigNum.small,
      97                  large=BigNum.big,
      98                  larger=BigNum.huge,
      99                  largest=BigNum.really_huge,
     100                  e=FloatNum.e,
     101                  pi=FloatNum.pi,
     102                  tau=FloatNum.tau,
     103                  i=WierdNum.inf,
     104                  j=WierdNum.neg_inf,
     105                  n=WierdNum.nan,
     106                  )
     107          nd = self.loads(self.dumps(d))
     108          self.assertEqual(nd['tiny'], SMALL)
     109          self.assertEqual(nd['large'], BIG)
     110          self.assertEqual(nd['larger'], HUGE)
     111          self.assertEqual(nd['largest'], REALLY_HUGE)
     112          self.assertEqual(nd['e'], E)
     113          self.assertEqual(nd['pi'], PI)
     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']))
     118  
     119  class ESC[4;38;5;81mTestPyEnum(ESC[4;38;5;149mTestEnum, ESC[4;38;5;149mPyTest): pass
     120  class ESC[4;38;5;81mTestCEnum(ESC[4;38;5;149mTestEnum, ESC[4;38;5;149mCTest): pass