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