17db96d56Sopenharmony_ciimport unittest 27db96d56Sopenharmony_cifrom test.support import import_helper 37db96d56Sopenharmony_cifrom test.support import warnings_helper 47db96d56Sopenharmony_ci 57db96d56Sopenharmony_ci# Skip this test if the _testcapi module isn't available. 67db96d56Sopenharmony_ciimport_helper.import_module('_testcapi') 77db96d56Sopenharmony_cifrom _testcapi import _test_structmembersType, \ 87db96d56Sopenharmony_ci CHAR_MAX, CHAR_MIN, UCHAR_MAX, \ 97db96d56Sopenharmony_ci SHRT_MAX, SHRT_MIN, USHRT_MAX, \ 107db96d56Sopenharmony_ci INT_MAX, INT_MIN, UINT_MAX, \ 117db96d56Sopenharmony_ci LONG_MAX, LONG_MIN, ULONG_MAX, \ 127db96d56Sopenharmony_ci LLONG_MAX, LLONG_MIN, ULLONG_MAX, \ 137db96d56Sopenharmony_ci PY_SSIZE_T_MAX, PY_SSIZE_T_MIN 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_cits=_test_structmembersType(False, # T_BOOL 167db96d56Sopenharmony_ci 1, # T_BYTE 177db96d56Sopenharmony_ci 2, # T_UBYTE 187db96d56Sopenharmony_ci 3, # T_SHORT 197db96d56Sopenharmony_ci 4, # T_USHORT 207db96d56Sopenharmony_ci 5, # T_INT 217db96d56Sopenharmony_ci 6, # T_UINT 227db96d56Sopenharmony_ci 7, # T_LONG 237db96d56Sopenharmony_ci 8, # T_ULONG 247db96d56Sopenharmony_ci 23, # T_PYSSIZET 257db96d56Sopenharmony_ci 9.99999,# T_FLOAT 267db96d56Sopenharmony_ci 10.1010101010, # T_DOUBLE 277db96d56Sopenharmony_ci "hi" # T_STRING_INPLACE 287db96d56Sopenharmony_ci ) 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_ciclass ReadWriteTests(unittest.TestCase): 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci def test_bool(self): 337db96d56Sopenharmony_ci ts.T_BOOL = True 347db96d56Sopenharmony_ci self.assertEqual(ts.T_BOOL, True) 357db96d56Sopenharmony_ci ts.T_BOOL = False 367db96d56Sopenharmony_ci self.assertEqual(ts.T_BOOL, False) 377db96d56Sopenharmony_ci self.assertRaises(TypeError, setattr, ts, 'T_BOOL', 1) 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_ci def test_byte(self): 407db96d56Sopenharmony_ci ts.T_BYTE = CHAR_MAX 417db96d56Sopenharmony_ci self.assertEqual(ts.T_BYTE, CHAR_MAX) 427db96d56Sopenharmony_ci ts.T_BYTE = CHAR_MIN 437db96d56Sopenharmony_ci self.assertEqual(ts.T_BYTE, CHAR_MIN) 447db96d56Sopenharmony_ci ts.T_UBYTE = UCHAR_MAX 457db96d56Sopenharmony_ci self.assertEqual(ts.T_UBYTE, UCHAR_MAX) 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_ci def test_short(self): 487db96d56Sopenharmony_ci ts.T_SHORT = SHRT_MAX 497db96d56Sopenharmony_ci self.assertEqual(ts.T_SHORT, SHRT_MAX) 507db96d56Sopenharmony_ci ts.T_SHORT = SHRT_MIN 517db96d56Sopenharmony_ci self.assertEqual(ts.T_SHORT, SHRT_MIN) 527db96d56Sopenharmony_ci ts.T_USHORT = USHRT_MAX 537db96d56Sopenharmony_ci self.assertEqual(ts.T_USHORT, USHRT_MAX) 547db96d56Sopenharmony_ci 557db96d56Sopenharmony_ci def test_int(self): 567db96d56Sopenharmony_ci ts.T_INT = INT_MAX 577db96d56Sopenharmony_ci self.assertEqual(ts.T_INT, INT_MAX) 587db96d56Sopenharmony_ci ts.T_INT = INT_MIN 597db96d56Sopenharmony_ci self.assertEqual(ts.T_INT, INT_MIN) 607db96d56Sopenharmony_ci ts.T_UINT = UINT_MAX 617db96d56Sopenharmony_ci self.assertEqual(ts.T_UINT, UINT_MAX) 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci def test_long(self): 647db96d56Sopenharmony_ci ts.T_LONG = LONG_MAX 657db96d56Sopenharmony_ci self.assertEqual(ts.T_LONG, LONG_MAX) 667db96d56Sopenharmony_ci ts.T_LONG = LONG_MIN 677db96d56Sopenharmony_ci self.assertEqual(ts.T_LONG, LONG_MIN) 687db96d56Sopenharmony_ci ts.T_ULONG = ULONG_MAX 697db96d56Sopenharmony_ci self.assertEqual(ts.T_ULONG, ULONG_MAX) 707db96d56Sopenharmony_ci 717db96d56Sopenharmony_ci def test_py_ssize_t(self): 727db96d56Sopenharmony_ci ts.T_PYSSIZET = PY_SSIZE_T_MAX 737db96d56Sopenharmony_ci self.assertEqual(ts.T_PYSSIZET, PY_SSIZE_T_MAX) 747db96d56Sopenharmony_ci ts.T_PYSSIZET = PY_SSIZE_T_MIN 757db96d56Sopenharmony_ci self.assertEqual(ts.T_PYSSIZET, PY_SSIZE_T_MIN) 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci @unittest.skipUnless(hasattr(ts, "T_LONGLONG"), "long long not present") 787db96d56Sopenharmony_ci def test_longlong(self): 797db96d56Sopenharmony_ci ts.T_LONGLONG = LLONG_MAX 807db96d56Sopenharmony_ci self.assertEqual(ts.T_LONGLONG, LLONG_MAX) 817db96d56Sopenharmony_ci ts.T_LONGLONG = LLONG_MIN 827db96d56Sopenharmony_ci self.assertEqual(ts.T_LONGLONG, LLONG_MIN) 837db96d56Sopenharmony_ci 847db96d56Sopenharmony_ci ts.T_ULONGLONG = ULLONG_MAX 857db96d56Sopenharmony_ci self.assertEqual(ts.T_ULONGLONG, ULLONG_MAX) 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ci ## make sure these will accept a plain int as well as a long 887db96d56Sopenharmony_ci ts.T_LONGLONG = 3 897db96d56Sopenharmony_ci self.assertEqual(ts.T_LONGLONG, 3) 907db96d56Sopenharmony_ci ts.T_ULONGLONG = 4 917db96d56Sopenharmony_ci self.assertEqual(ts.T_ULONGLONG, 4) 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ci def test_bad_assignments(self): 947db96d56Sopenharmony_ci integer_attributes = [ 957db96d56Sopenharmony_ci 'T_BOOL', 967db96d56Sopenharmony_ci 'T_BYTE', 'T_UBYTE', 977db96d56Sopenharmony_ci 'T_SHORT', 'T_USHORT', 987db96d56Sopenharmony_ci 'T_INT', 'T_UINT', 997db96d56Sopenharmony_ci 'T_LONG', 'T_ULONG', 1007db96d56Sopenharmony_ci 'T_PYSSIZET' 1017db96d56Sopenharmony_ci ] 1027db96d56Sopenharmony_ci if hasattr(ts, 'T_LONGLONG'): 1037db96d56Sopenharmony_ci integer_attributes.extend(['T_LONGLONG', 'T_ULONGLONG']) 1047db96d56Sopenharmony_ci 1057db96d56Sopenharmony_ci # issue8014: this produced 'bad argument to internal function' 1067db96d56Sopenharmony_ci # internal error 1077db96d56Sopenharmony_ci for nonint in None, 3.2j, "full of eels", {}, []: 1087db96d56Sopenharmony_ci for attr in integer_attributes: 1097db96d56Sopenharmony_ci self.assertRaises(TypeError, setattr, ts, attr, nonint) 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci def test_inplace_string(self): 1127db96d56Sopenharmony_ci self.assertEqual(ts.T_STRING_INPLACE, "hi") 1137db96d56Sopenharmony_ci self.assertRaises(TypeError, setattr, ts, "T_STRING_INPLACE", "s") 1147db96d56Sopenharmony_ci self.assertRaises(TypeError, delattr, ts, "T_STRING_INPLACE") 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_ci 1177db96d56Sopenharmony_ciclass TestWarnings(unittest.TestCase): 1187db96d56Sopenharmony_ci 1197db96d56Sopenharmony_ci def test_byte_max(self): 1207db96d56Sopenharmony_ci with warnings_helper.check_warnings(('', RuntimeWarning)): 1217db96d56Sopenharmony_ci ts.T_BYTE = CHAR_MAX+1 1227db96d56Sopenharmony_ci 1237db96d56Sopenharmony_ci def test_byte_min(self): 1247db96d56Sopenharmony_ci with warnings_helper.check_warnings(('', RuntimeWarning)): 1257db96d56Sopenharmony_ci ts.T_BYTE = CHAR_MIN-1 1267db96d56Sopenharmony_ci 1277db96d56Sopenharmony_ci def test_ubyte_max(self): 1287db96d56Sopenharmony_ci with warnings_helper.check_warnings(('', RuntimeWarning)): 1297db96d56Sopenharmony_ci ts.T_UBYTE = UCHAR_MAX+1 1307db96d56Sopenharmony_ci 1317db96d56Sopenharmony_ci def test_short_max(self): 1327db96d56Sopenharmony_ci with warnings_helper.check_warnings(('', RuntimeWarning)): 1337db96d56Sopenharmony_ci ts.T_SHORT = SHRT_MAX+1 1347db96d56Sopenharmony_ci 1357db96d56Sopenharmony_ci def test_short_min(self): 1367db96d56Sopenharmony_ci with warnings_helper.check_warnings(('', RuntimeWarning)): 1377db96d56Sopenharmony_ci ts.T_SHORT = SHRT_MIN-1 1387db96d56Sopenharmony_ci 1397db96d56Sopenharmony_ci def test_ushort_max(self): 1407db96d56Sopenharmony_ci with warnings_helper.check_warnings(('', RuntimeWarning)): 1417db96d56Sopenharmony_ci ts.T_USHORT = USHRT_MAX+1 1427db96d56Sopenharmony_ci 1437db96d56Sopenharmony_ci 1447db96d56Sopenharmony_ciif __name__ == "__main__": 1457db96d56Sopenharmony_ci unittest.main() 146