New submission from Michael Felt <aixto...@felt.demon.nl>:
+364 def _assert_values(self, values): +365 for obj in values: +366 with self.subTest(obj): +367 interpreters.channel_send(self.cid, obj) +368 got = interpreters.channel_recv(self.cid) +369 +370 self.assertEqual(got, obj) +371 self.assertIs(type(got), type(obj)) +372 # XXX Check the following in the channel tests? +373 #self.assertIsNot(got, obj) +374 +395 def test_int(self): +396 self._assert_values(range(-1, 258)) +397 The assert fails on -1 with: ====================================================================== FAIL: test_int (test.test__xxsubinterpreters.ShareableTypeTests) [-1] ---------------------------------------------------------------------- Traceback (most recent call last): File "/data/prj/python/python3-3.8.0/Lib/test/test__xxsubinterpreters.py", line 371, in _assert_values self.assertEqual(got, obj) AssertionError: 4294967295 != -1 Note that this value is the unsigned value for 32-bit int as -1 root@x066:[/data/prj/python/python3-3.8.0]grep 4294967295 /usr/include/sys/*.h /usr/include/sys/limits.h:#define ULONG_MAX (4294967295UL) /usr/include/sys/limits.h:#define UINT_MAX (4294967295U) /usr/include/sys/stdint.h:#define UINT32_MAX (4294967295U) After quite a lot of "learning", I narrow the issue to: +1432 static int +1433 _long_shared(PyObject *obj, _PyCrossInterpreterData *data) +1434 { +1435 int64_t value = PyLong_AsLongLong(obj); +1436 if (value == -1 && PyErr_Occurred()) { +1437 if (PyErr_ExceptionMatches(PyExc_OverflowError)) { +1438 PyErr_SetString(PyExc_OverflowError, "try sending as bytes"); +1439 } +1440 return -1; +1441 } +1442 data->data = (void *)value; +1443 data->obj = NULL; +1444 data->new_object = _new_long_object; +1445 data->free = NULL; +1446 return 0; +1447 } +1448 +1426 static PyObject * +1427 _new_long_object(_PyCrossInterpreterData *data) +1428 { +1429 return PyLong_FromLongLong((int64_t)(data->data)); +1430 } The "value" is stored as a void data type, and the high-order 64-bits are zero. When it gets returned as a PyLong... it goes positive. I do not dare touch anything here without some "mentoring". Or, we change the test so that it knows it is in 32-bit mode, and compares with something else. In short, "mentoring" requested. p.s. not had time to test in 64-bit mode. Will post on that later. ---------- messages: 324519 nosy: Michael.Felt priority: normal severity: normal status: open title: test__xxsubinterpreters.ShareableTypeTests._assert_values fails on AIX - 32-bit mode _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue34569> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com