17db96d56Sopenharmony_cifrom enum import Enum, IntEnum 27db96d56Sopenharmony_cifrom math import isnan 37db96d56Sopenharmony_cifrom test.test_json import PyTest, CTest 47db96d56Sopenharmony_ci 57db96d56Sopenharmony_ciSMALL = 1 67db96d56Sopenharmony_ciBIG = 1<<32 77db96d56Sopenharmony_ciHUGE = 1<<64 87db96d56Sopenharmony_ciREALLY_HUGE = 1<<96 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ciclass BigNum(IntEnum): 117db96d56Sopenharmony_ci small = SMALL 127db96d56Sopenharmony_ci big = BIG 137db96d56Sopenharmony_ci huge = HUGE 147db96d56Sopenharmony_ci really_huge = REALLY_HUGE 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ciE = 2.718281 177db96d56Sopenharmony_ciPI = 3.141593 187db96d56Sopenharmony_ciTAU = 2 * PI 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_ciclass FloatNum(float, Enum): 217db96d56Sopenharmony_ci e = E 227db96d56Sopenharmony_ci pi = PI 237db96d56Sopenharmony_ci tau = TAU 247db96d56Sopenharmony_ci 257db96d56Sopenharmony_ciINF = float('inf') 267db96d56Sopenharmony_ciNEG_INF = float('-inf') 277db96d56Sopenharmony_ciNAN = float('nan') 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_ciclass WierdNum(float, Enum): 307db96d56Sopenharmony_ci inf = INF 317db96d56Sopenharmony_ci neg_inf = NEG_INF 327db96d56Sopenharmony_ci nan = NAN 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ciclass TestEnum: 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_ci def test_floats(self): 377db96d56Sopenharmony_ci for enum in FloatNum: 387db96d56Sopenharmony_ci self.assertEqual(self.dumps(enum), repr(enum.value)) 397db96d56Sopenharmony_ci self.assertEqual(float(self.dumps(enum)), enum) 407db96d56Sopenharmony_ci self.assertEqual(self.loads(self.dumps(enum)), enum) 417db96d56Sopenharmony_ci 427db96d56Sopenharmony_ci def test_weird_floats(self): 437db96d56Sopenharmony_ci for enum, expected in zip(WierdNum, ('Infinity', '-Infinity', 'NaN')): 447db96d56Sopenharmony_ci self.assertEqual(self.dumps(enum), expected) 457db96d56Sopenharmony_ci if not isnan(enum): 467db96d56Sopenharmony_ci self.assertEqual(float(self.dumps(enum)), enum) 477db96d56Sopenharmony_ci self.assertEqual(self.loads(self.dumps(enum)), enum) 487db96d56Sopenharmony_ci else: 497db96d56Sopenharmony_ci self.assertTrue(isnan(float(self.dumps(enum)))) 507db96d56Sopenharmony_ci self.assertTrue(isnan(self.loads(self.dumps(enum)))) 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ci def test_ints(self): 537db96d56Sopenharmony_ci for enum in BigNum: 547db96d56Sopenharmony_ci self.assertEqual(self.dumps(enum), str(enum.value)) 557db96d56Sopenharmony_ci self.assertEqual(int(self.dumps(enum)), enum) 567db96d56Sopenharmony_ci self.assertEqual(self.loads(self.dumps(enum)), enum) 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_ci def test_list(self): 597db96d56Sopenharmony_ci self.assertEqual(self.dumps(list(BigNum)), 607db96d56Sopenharmony_ci str([SMALL, BIG, HUGE, REALLY_HUGE])) 617db96d56Sopenharmony_ci self.assertEqual(self.loads(self.dumps(list(BigNum))), 627db96d56Sopenharmony_ci list(BigNum)) 637db96d56Sopenharmony_ci self.assertEqual(self.dumps(list(FloatNum)), 647db96d56Sopenharmony_ci str([E, PI, TAU])) 657db96d56Sopenharmony_ci self.assertEqual(self.loads(self.dumps(list(FloatNum))), 667db96d56Sopenharmony_ci list(FloatNum)) 677db96d56Sopenharmony_ci self.assertEqual(self.dumps(list(WierdNum)), 687db96d56Sopenharmony_ci '[Infinity, -Infinity, NaN]') 697db96d56Sopenharmony_ci self.assertEqual(self.loads(self.dumps(list(WierdNum)))[:2], 707db96d56Sopenharmony_ci list(WierdNum)[:2]) 717db96d56Sopenharmony_ci self.assertTrue(isnan(self.loads(self.dumps(list(WierdNum)))[2])) 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ci def test_dict_keys(self): 747db96d56Sopenharmony_ci s, b, h, r = BigNum 757db96d56Sopenharmony_ci e, p, t = FloatNum 767db96d56Sopenharmony_ci i, j, n = WierdNum 777db96d56Sopenharmony_ci d = { 787db96d56Sopenharmony_ci s:'tiny', b:'large', h:'larger', r:'largest', 797db96d56Sopenharmony_ci e:"Euler's number", p:'pi', t:'tau', 807db96d56Sopenharmony_ci i:'Infinity', j:'-Infinity', n:'NaN', 817db96d56Sopenharmony_ci } 827db96d56Sopenharmony_ci nd = self.loads(self.dumps(d)) 837db96d56Sopenharmony_ci self.assertEqual(nd[str(SMALL)], 'tiny') 847db96d56Sopenharmony_ci self.assertEqual(nd[str(BIG)], 'large') 857db96d56Sopenharmony_ci self.assertEqual(nd[str(HUGE)], 'larger') 867db96d56Sopenharmony_ci self.assertEqual(nd[str(REALLY_HUGE)], 'largest') 877db96d56Sopenharmony_ci self.assertEqual(nd[repr(E)], "Euler's number") 887db96d56Sopenharmony_ci self.assertEqual(nd[repr(PI)], 'pi') 897db96d56Sopenharmony_ci self.assertEqual(nd[repr(TAU)], 'tau') 907db96d56Sopenharmony_ci self.assertEqual(nd['Infinity'], 'Infinity') 917db96d56Sopenharmony_ci self.assertEqual(nd['-Infinity'], '-Infinity') 927db96d56Sopenharmony_ci self.assertEqual(nd['NaN'], 'NaN') 937db96d56Sopenharmony_ci 947db96d56Sopenharmony_ci def test_dict_values(self): 957db96d56Sopenharmony_ci d = dict( 967db96d56Sopenharmony_ci tiny=BigNum.small, 977db96d56Sopenharmony_ci large=BigNum.big, 987db96d56Sopenharmony_ci larger=BigNum.huge, 997db96d56Sopenharmony_ci largest=BigNum.really_huge, 1007db96d56Sopenharmony_ci e=FloatNum.e, 1017db96d56Sopenharmony_ci pi=FloatNum.pi, 1027db96d56Sopenharmony_ci tau=FloatNum.tau, 1037db96d56Sopenharmony_ci i=WierdNum.inf, 1047db96d56Sopenharmony_ci j=WierdNum.neg_inf, 1057db96d56Sopenharmony_ci n=WierdNum.nan, 1067db96d56Sopenharmony_ci ) 1077db96d56Sopenharmony_ci nd = self.loads(self.dumps(d)) 1087db96d56Sopenharmony_ci self.assertEqual(nd['tiny'], SMALL) 1097db96d56Sopenharmony_ci self.assertEqual(nd['large'], BIG) 1107db96d56Sopenharmony_ci self.assertEqual(nd['larger'], HUGE) 1117db96d56Sopenharmony_ci self.assertEqual(nd['largest'], REALLY_HUGE) 1127db96d56Sopenharmony_ci self.assertEqual(nd['e'], E) 1137db96d56Sopenharmony_ci self.assertEqual(nd['pi'], PI) 1147db96d56Sopenharmony_ci self.assertEqual(nd['tau'], TAU) 1157db96d56Sopenharmony_ci self.assertEqual(nd['i'], INF) 1167db96d56Sopenharmony_ci self.assertEqual(nd['j'], NEG_INF) 1177db96d56Sopenharmony_ci self.assertTrue(isnan(nd['n'])) 1187db96d56Sopenharmony_ci 1197db96d56Sopenharmony_ciclass TestPyEnum(TestEnum, PyTest): pass 1207db96d56Sopenharmony_ciclass TestCEnum(TestEnum, CTest): pass 121