Author: Matti Picus <[email protected]>
Branch: unicode-utf8-py3
Changeset: r95040:38112d3a526d
Date: 2018-08-29 10:14 +0200
http://bitbucket.org/pypy/pypy/changeset/38112d3a526d/
Log: Merge py3.5 into branch
diff --git a/pypy/module/cpyext/cdatetime.py b/pypy/module/cpyext/cdatetime.py
--- a/pypy/module/cpyext/cdatetime.py
+++ b/pypy/module/cpyext/cdatetime.py
@@ -137,8 +137,9 @@
If it is a datetime.time or datetime.datetime, it may have tzinfo
'''
state = space.fromcache(State)
- # cannot raise here, so just crash
- assert len(state.datetimeAPI) > 0
+ if len(state.datetimeAPI) ==0:
+ # can happen in subclassing
+ _PyDateTime_Import(space)
if state.datetimeAPI[0].c_TimeType == py_obj.c_ob_type:
py_datetime = rffi.cast(PyDateTime_Time, py_obj)
w_tzinfo = space.getattr(w_obj, space.newtext('tzinfo'))
diff --git a/pypy/module/cpyext/include/pymath.h
b/pypy/module/cpyext/include/pymath.h
--- a/pypy/module/cpyext/include/pymath.h
+++ b/pypy/module/cpyext/include/pymath.h
@@ -6,6 +6,74 @@
functions and constants
**************************************************************************/
+/* High precision definition of pi and e (Euler)
+ * The values are taken from libc6's math.h.
+ */
+#ifndef Py_MATH_PIl
+#define Py_MATH_PIl 3.1415926535897932384626433832795029L
+#endif
+#ifndef Py_MATH_PI
+#define Py_MATH_PI 3.14159265358979323846
+#endif
+
+#ifndef Py_MATH_El
+#define Py_MATH_El 2.7182818284590452353602874713526625L
+#endif
+
+#ifndef Py_MATH_E
+#define Py_MATH_E 2.7182818284590452354
+#endif
+
+/* Tau (2pi) to 40 digits, taken from tauday.com/tau-digits. */
+#ifndef Py_MATH_TAU
+#define Py_MATH_TAU 6.2831853071795864769252867665590057683943L
+#endif
+
+/* Py_IS_NAN(X)
+ * Return 1 if float or double arg is a NaN, else 0.
+ * Caution:
+ * X is evaluated more than once.
+ * This may not work on all platforms. Each platform has *some*
+ * way to spell this, though -- override in pyconfig.h if you have
+ * a platform where it doesn't work.
+ */
+#ifndef Py_IS_NAN
+#if __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L
+#define Py_IS_NAN(X) isnan(X)
+#else
+#define Py_IS_NAN(X) ((X) != (X))
+#endif
+#endif
+
+/* Py_IS_INFINITY(X)
+ * Return 1 if float or double arg is an infinity, else 0.
+ * Caution:
+ * X is evaluated more than once.
+ * This implementation may set the underflow flag if |X| is very small;
+ * it really can't be implemented correctly (& easily) before C99.
+ * Override in pyconfig.h if you have a better spelling on your platform.
+ */
+#ifndef Py_IS_INFINITY
+# if __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L
+# define Py_IS_INFINITY(X) isinf(X)
+# else
+# define Py_IS_INFINITY(X) ((X) && ((X)*0.5 == (X)))
+# endif
+#endif
+
+/* Py_IS_FINITE(X)
+ * Return 1 if float or double arg is neither infinite nor NAN, else 0.
+ * Some compilers (e.g. VisualStudio) have intrisics for this, so a special
+ * macro for this particular test is useful
+ */
+#ifndef Py_IS_FINITE
+#if __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L
+#define Py_IS_FINITE(X) isfinite(X)
+#else
+#define Py_IS_FINITE(X) (!Py_IS_INFINITY(X) && !Py_IS_NAN(X))
+#endif
+#endif
+
/* HUGE_VAL is supposed to expand to a positive double infinity. Python
* uses Py_HUGE_VAL instead because some platforms are broken in this
* respect. We used to embed code in pyport.h to try to worm around that,
diff --git a/pypy/module/cpyext/test/test_floatobject.py
b/pypy/module/cpyext/test/test_floatobject.py
deleted file mode 100644
--- a/pypy/module/cpyext/test/test_floatobject.py
+++ /dev/null
@@ -1,112 +0,0 @@
-import pytest
-from pypy.interpreter.error import OperationError
-from pypy.module.cpyext.test.test_api import BaseApiTest
-from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase
-from rpython.rtyper.lltypesystem import rffi
-from pypy.module.cpyext.floatobject import (
- PyFloat_FromDouble, PyFloat_AsDouble, PyFloat_AS_DOUBLE, PyNumber_Float,
- _PyFloat_Unpack4, _PyFloat_Unpack8)
-
-class TestFloatObject(BaseApiTest):
- def test_floatobject(self, space):
- assert space.unwrap(PyFloat_FromDouble(space, 3.14)) == 3.14
- assert PyFloat_AsDouble(space, space.wrap(23.45)) == 23.45
- assert PyFloat_AS_DOUBLE(space, space.wrap(23.45)) == 23.45
- with pytest.raises(OperationError):
- PyFloat_AsDouble(space, space.w_None)
-
- def test_coerce(self, space):
- assert space.type(PyNumber_Float(space, space.wrap(3))) is
space.w_float
- assert space.type(PyNumber_Float(space, space.wrap("3"))) is
space.w_float
-
- w_obj = space.appexec([], """():
- class Coerce(object):
- def __float__(self):
- return 42.5
- return Coerce()""")
- assert space.eq_w(PyNumber_Float(space, w_obj), space.wrap(42.5))
-
- def test_unpack(self, space):
- with rffi.scoped_str2charp("\x9a\x99\x99?") as ptr:
- assert abs(_PyFloat_Unpack4(space, ptr, 1) - 1.2) < 1e-7
- with rffi.scoped_str2charp("?\x99\x99\x9a") as ptr:
- assert abs(_PyFloat_Unpack4(space, ptr, 0) - 1.2) < 1e-7
- with rffi.scoped_str2charp("\x1f\x85\xebQ\xb8\x1e\t@") as ptr:
- assert abs(_PyFloat_Unpack8(space, ptr, 1) - 3.14) < 1e-15
- with rffi.scoped_str2charp("@\t\x1e\xb8Q\xeb\x85\x1f") as ptr:
- assert abs(_PyFloat_Unpack8(space, ptr, 0) - 3.14) < 1e-15
-
-class AppTestFloatObject(AppTestCpythonExtensionBase):
- def test_fromstring(self):
- module = self.import_extension('foo', [
- ("from_string", "METH_NOARGS",
- """
- PyObject* str = PyUnicode_FromString("1234.56");
- PyObject* res = PyFloat_FromString(str);
- Py_DECREF(str);
- return res;
- """),
- ])
- assert module.from_string() == 1234.56
- assert type(module.from_string()) is float
-
-class AppTestFloatMacros(AppTestCpythonExtensionBase):
- def test_return_nan(self):
- import math
-
- module = self.import_extension('foo', [
- ("return_nan", "METH_NOARGS",
- "Py_RETURN_NAN;"),
- ])
- assert math.isnan(module.return_nan())
-
- def test_return_inf(self):
- import math
-
- module = self.import_extension('foo', [
- ("return_inf", "METH_NOARGS",
- "Py_RETURN_INF(10);"),
- ])
- inf = module.return_inf()
- assert inf > 0
- assert math.isinf(inf)
-
- def test_return_inf_negative(self):
- import math
-
- module = self.import_extension('foo', [
- ("return_neginf", "METH_NOARGS",
- "Py_RETURN_INF(-10);"),
- ])
- neginf = module.return_neginf()
- assert neginf < 0
- assert math.isinf(neginf)
-
- def test_macro_accepts_wrong_pointer_type(self):
- module = self.import_extension('foo', [
- ("test_macros", "METH_NOARGS",
- """
- PyObject* o = PyFloat_FromDouble(1.0);
- // no PyFloatObject
- char* dumb_pointer = (char*)o;
-
- PyFloat_AS_DOUBLE(o);
- PyFloat_AS_DOUBLE(dumb_pointer);
-
- Py_RETURN_NONE;"""),
- ])
-
- def test_PyFloat_Check(self):
- module = self.import_extension('foo', [
- ("test", "METH_NOARGS",
- """
- PyObject* pyobj = PyFloat_FromDouble(1.0);
- PyFloatObject* pfo = (PyFloatObject*)pyobj;
- int res = (PyFloat_Check(pyobj) +
- PyFloat_CheckExact(pyobj) * 10 +
- PyFloat_Check(pfo) * 100 +
- PyFloat_CheckExact(pfo) * 1000);
- Py_DecRef(pyobj);
- return PyLong_FromLong(res);"""),
- ])
- assert module.test() == 1111
diff --git a/pypy/module/cpyext/test0/__init__.py
b/pypy/module/cpyext/test0/__init__.py
new file mode 100644
diff --git a/pypy/module/cpyext/test/conftest.py
b/pypy/module/cpyext/test0/conftest.py
copy from pypy/module/cpyext/test/conftest.py
copy to pypy/module/cpyext/test0/conftest.py
diff --git a/pypy/module/cpyext/test/test_arraymodule.py
b/pypy/module/cpyext/test0/test_arraymodule.py
rename from pypy/module/cpyext/test/test_arraymodule.py
rename to pypy/module/cpyext/test0/test_arraymodule.py
diff --git a/pypy/module/cpyext/test/test_boolobject.py
b/pypy/module/cpyext/test0/test_boolobject.py
rename from pypy/module/cpyext/test/test_boolobject.py
rename to pypy/module/cpyext/test0/test_boolobject.py
diff --git a/pypy/module/cpyext/test/test_borrow.py
b/pypy/module/cpyext/test0/test_borrow.py
rename from pypy/module/cpyext/test/test_borrow.py
rename to pypy/module/cpyext/test0/test_borrow.py
diff --git a/pypy/module/cpyext/test/test_bytearrayobject.py
b/pypy/module/cpyext/test0/test_bytearrayobject.py
rename from pypy/module/cpyext/test/test_bytearrayobject.py
rename to pypy/module/cpyext/test0/test_bytearrayobject.py
diff --git a/pypy/module/cpyext/test/test_bytesobject.py
b/pypy/module/cpyext/test0/test_bytesobject.py
rename from pypy/module/cpyext/test/test_bytesobject.py
rename to pypy/module/cpyext/test0/test_bytesobject.py
diff --git a/pypy/module/cpyext/test/test_capsule.py
b/pypy/module/cpyext/test0/test_capsule.py
rename from pypy/module/cpyext/test/test_capsule.py
rename to pypy/module/cpyext/test0/test_capsule.py
diff --git a/pypy/module/cpyext/test/test_cell.py
b/pypy/module/cpyext/test0/test_cell.py
rename from pypy/module/cpyext/test/test_cell.py
rename to pypy/module/cpyext/test0/test_cell.py
diff --git a/pypy/module/cpyext/test/test_classobject.py
b/pypy/module/cpyext/test0/test_classobject.py
rename from pypy/module/cpyext/test/test_classobject.py
rename to pypy/module/cpyext/test0/test_classobject.py
diff --git a/pypy/module/cpyext/test/test_codecs.py
b/pypy/module/cpyext/test0/test_codecs.py
rename from pypy/module/cpyext/test/test_codecs.py
rename to pypy/module/cpyext/test0/test_codecs.py
diff --git a/pypy/module/cpyext/test/test_complexobject.py
b/pypy/module/cpyext/test0/test_complexobject.py
rename from pypy/module/cpyext/test/test_complexobject.py
rename to pypy/module/cpyext/test0/test_complexobject.py
diff --git a/pypy/module/cpyext/test/test_cparser.py
b/pypy/module/cpyext/test0/test_cparser.py
rename from pypy/module/cpyext/test/test_cparser.py
rename to pypy/module/cpyext/test0/test_cparser.py
diff --git a/pypy/module/cpyext/test/test_datetime.py
b/pypy/module/cpyext/test0/test_datetime.py
rename from pypy/module/cpyext/test/test_datetime.py
rename to pypy/module/cpyext/test0/test_datetime.py
diff --git a/pypy/module/cpyext/test/test_dictobject.py
b/pypy/module/cpyext/test0/test_dictobject.py
rename from pypy/module/cpyext/test/test_dictobject.py
rename to pypy/module/cpyext/test0/test_dictobject.py
diff --git a/pypy/module/cpyext/test/test_eval.py
b/pypy/module/cpyext/test0/test_eval.py
rename from pypy/module/cpyext/test/test_eval.py
rename to pypy/module/cpyext/test0/test_eval.py
diff --git a/pypy/module/cpyext/test/test_fileobject.py
b/pypy/module/cpyext/test0/test_fileobject.py
rename from pypy/module/cpyext/test/test_fileobject.py
rename to pypy/module/cpyext/test0/test_fileobject.py
diff --git a/pypy/module/cpyext/test0/test_floatobject.py
b/pypy/module/cpyext/test0/test_floatobject.py
new file mode 100644
--- /dev/null
+++ b/pypy/module/cpyext/test0/test_floatobject.py
@@ -0,0 +1,196 @@
+import pytest
+from pypy.interpreter.error import OperationError
+from pypy.module.cpyext.test.test_api import BaseApiTest
+from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase
+from rpython.rtyper.lltypesystem import rffi
+from pypy.module.cpyext.floatobject import (
+ PyFloat_FromDouble, PyFloat_AsDouble, PyFloat_AS_DOUBLE, PyNumber_Float,
+ _PyFloat_Unpack4, _PyFloat_Unpack8)
+
+class TestFloatObject(BaseApiTest):
+ def test_floatobject(self, space):
+ assert space.unwrap(PyFloat_FromDouble(space, 3.14)) == 3.14
+ assert PyFloat_AsDouble(space, space.wrap(23.45)) == 23.45
+ assert PyFloat_AS_DOUBLE(space, space.wrap(23.45)) == 23.45
+ with pytest.raises(OperationError):
+ PyFloat_AsDouble(space, space.w_None)
+
+ def test_coerce(self, space):
+ assert space.type(PyNumber_Float(space, space.wrap(3))) is
space.w_float
+ assert space.type(PyNumber_Float(space, space.wrap("3"))) is
space.w_float
+
+ w_obj = space.appexec([], """():
+ class Coerce(object):
+ def __float__(self):
+ return 42.5
+ return Coerce()""")
+ assert space.eq_w(PyNumber_Float(space, w_obj), space.wrap(42.5))
+
+ def test_unpack(self, space):
+ with rffi.scoped_str2charp("\x9a\x99\x99?") as ptr:
+ assert abs(_PyFloat_Unpack4(space, ptr, 1) - 1.2) < 1e-7
+ with rffi.scoped_str2charp("?\x99\x99\x9a") as ptr:
+ assert abs(_PyFloat_Unpack4(space, ptr, 0) - 1.2) < 1e-7
+ with rffi.scoped_str2charp("\x1f\x85\xebQ\xb8\x1e\t@") as ptr:
+ assert abs(_PyFloat_Unpack8(space, ptr, 1) - 3.14) < 1e-15
+ with rffi.scoped_str2charp("@\t\x1e\xb8Q\xeb\x85\x1f") as ptr:
+ assert abs(_PyFloat_Unpack8(space, ptr, 0) - 3.14) < 1e-15
+
+class AppTestFloatObject(AppTestCpythonExtensionBase):
+ def test_fromstring(self):
+ module = self.import_extension('foo', [
+ ("from_string", "METH_NOARGS",
+ """
+ PyObject* str = PyUnicode_FromString("1234.56");
+ PyObject* res = PyFloat_FromString(str);
+ Py_DECREF(str);
+ return res;
+ """),
+ ])
+ assert module.from_string() == 1234.56
+ assert type(module.from_string()) is float
+
+class AppTestFloatMacros(AppTestCpythonExtensionBase):
+ def test_return_nan(self):
+ import math
+
+ module = self.import_extension('foo', [
+ ("return_nan", "METH_NOARGS",
+ "Py_RETURN_NAN;"),
+ ])
+ assert math.isnan(module.return_nan())
+
+ def test_return_inf(self):
+ import math
+
+ module = self.import_extension('foo', [
+ ("return_inf", "METH_NOARGS",
+ "Py_RETURN_INF(10);"),
+ ])
+ inf = module.return_inf()
+ assert inf > 0
+ assert math.isinf(inf)
+
+ def test_return_inf_negative(self):
+ import math
+
+ module = self.import_extension('foo', [
+ ("return_neginf", "METH_NOARGS",
+ "Py_RETURN_INF(-10);"),
+ ])
+ neginf = module.return_neginf()
+ assert neginf < 0
+ assert math.isinf(neginf)
+
+ def test_macro_accepts_wrong_pointer_type(self):
+ module = self.import_extension('foo', [
+ ("test_macros", "METH_NOARGS",
+ """
+ PyObject* o = PyFloat_FromDouble(1.0);
+ // no PyFloatObject
+ char* dumb_pointer = (char*)o;
+
+ PyFloat_AS_DOUBLE(o);
+ PyFloat_AS_DOUBLE(dumb_pointer);
+
+ Py_RETURN_NONE;"""),
+ ])
+
+ def test_PyFloat_Check(self):
+ module = self.import_extension('foo', [
+ ("test", "METH_NOARGS",
+ """
+ PyObject* pyobj = PyFloat_FromDouble(1.0);
+ PyFloatObject* pfo = (PyFloatObject*)pyobj;
+ int res = (PyFloat_Check(pyobj) +
+ PyFloat_CheckExact(pyobj) * 10 +
+ PyFloat_Check(pfo) * 100 +
+ PyFloat_CheckExact(pfo) * 1000);
+ Py_DecRef(pyobj);
+ return PyLong_FromLong(res);"""),
+ ])
+ assert module.test() == 1111
+
+ def test_pymath_consts(self):
+ # test preprocessor constants in their string form to avoid
+ # floating-point conversion issues (and to avoid having to
+ # conditionalize on compiler support for long double)
+ for const_name, const_strval in [
+ ('Py_MATH_PIl', b"3.1415926535897932384626433832795029L"),
+ ('Py_MATH_PI', b"3.14159265358979323846"),
+ ('Py_MATH_El', b"2.7182818284590452353602874713526625L"),
+ ('Py_MATH_E', b"2.7182818284590452354"),
+ ('Py_MATH_TAU',
b"6.2831853071795864769252867665590057683943L"),
+ ]:
+ module = self.import_extension('foo_%s' % const_name, [
+ ("test", "METH_NOARGS",
+ """
+ #define xstr(s) str(s)
+ #define str(s) #s
+ return PyBytes_FromString(xstr(%s));""" % const_name)
+ ])
+ assert module.test() == const_strval
+
+ def test_Py_IS_NAN(self):
+ module = self.import_extension('foo', [
+ ("test", "METH_O",
+ """
+ double d = PyFloat_AsDouble(args);
+ return PyBool_FromLong(Py_IS_NAN(d));
+ """),
+ ])
+ assert not module.test(0)
+ assert not module.test(1)
+ assert not module.test(-1)
+ assert not module.test(float('inf'))
+ assert module.test(float('nan'))
+
+ def test_Py_IS_INFINITY(self):
+ module = self.import_extension('foo', [
+ ("test", "METH_O",
+ """
+ double d = PyFloat_AsDouble(args);
+ return PyBool_FromLong(Py_IS_INFINITY(d));
+ """),
+ ])
+ assert not module.test(0)
+ assert not module.test(1)
+ assert not module.test(-1)
+ assert not module.test(float('nan'))
+ assert module.test(float('inf'))
+ assert module.test(float('-inf'))
+
+ def test_Py_IS_FINITE(self):
+ module = self.import_extension('foo', [
+ ("test", "METH_O",
+ """
+ double d = PyFloat_AsDouble(args);
+ return PyBool_FromLong(Py_IS_FINITE(d));
+ """),
+ ])
+ assert module.test(0)
+ assert module.test(1)
+ assert module.test(-1)
+ assert not module.test(float('nan'))
+ assert not module.test(float('inf'))
+ assert not module.test(float('-inf'))
+
+ def test_Py_HUGE_VAL(self):
+ module = self.import_extension('foo', [
+ ("test", "METH_NOARGS",
+ """
+ return PyFloat_FromDouble(Py_HUGE_VAL);
+ """),
+ ])
+ assert module.test() == float('inf')
+
+ def test_Py_NAN(self):
+ module = self.import_extension('foo', [
+ ("test", "METH_NOARGS",
+ """
+ return PyFloat_FromDouble(Py_NAN);
+ """),
+ ])
+ import struct
+ float_bits = struct.Struct('d').pack
+ assert float_bits(module.test()) == float_bits(float('nan'))
diff --git a/pypy/module/cpyext/test/test_frameobject.py
b/pypy/module/cpyext/test0/test_frameobject.py
rename from pypy/module/cpyext/test/test_frameobject.py
rename to pypy/module/cpyext/test0/test_frameobject.py
diff --git a/pypy/module/cpyext/test/test_funcobject.py
b/pypy/module/cpyext/test0/test_funcobject.py
rename from pypy/module/cpyext/test/test_funcobject.py
rename to pypy/module/cpyext/test0/test_funcobject.py
diff --git a/pypy/module/cpyext/test/test_genobject.py
b/pypy/module/cpyext/test0/test_genobject.py
rename from pypy/module/cpyext/test/test_genobject.py
rename to pypy/module/cpyext/test0/test_genobject.py
diff --git a/pypy/module/cpyext/test/test_getargs.py
b/pypy/module/cpyext/test0/test_getargs.py
rename from pypy/module/cpyext/test/test_getargs.py
rename to pypy/module/cpyext/test0/test_getargs.py
diff --git a/pypy/module/cpyext/test/test_import.py
b/pypy/module/cpyext/test0/test_import.py
rename from pypy/module/cpyext/test/test_import.py
rename to pypy/module/cpyext/test0/test_import.py
diff --git a/pypy/module/cpyext/test/test_iterator.py
b/pypy/module/cpyext/test0/test_iterator.py
rename from pypy/module/cpyext/test/test_iterator.py
rename to pypy/module/cpyext/test0/test_iterator.py
diff --git a/pypy/module/cpyext/test/test_listobject.py
b/pypy/module/cpyext/test0/test_listobject.py
rename from pypy/module/cpyext/test/test_listobject.py
rename to pypy/module/cpyext/test0/test_listobject.py
diff --git a/pypy/module/cpyext/test/test_longobject.py
b/pypy/module/cpyext/test0/test_longobject.py
rename from pypy/module/cpyext/test/test_longobject.py
rename to pypy/module/cpyext/test0/test_longobject.py
diff --git a/pypy/module/cpyext/test/test_mapping.py
b/pypy/module/cpyext/test0/test_mapping.py
rename from pypy/module/cpyext/test/test_mapping.py
rename to pypy/module/cpyext/test0/test_mapping.py
diff --git a/pypy/module/cpyext/test/test_marshal.py
b/pypy/module/cpyext/test0/test_marshal.py
rename from pypy/module/cpyext/test/test_marshal.py
rename to pypy/module/cpyext/test0/test_marshal.py
diff --git a/pypy/module/cpyext/test/test_memoryobject.py
b/pypy/module/cpyext/test0/test_memoryobject.py
rename from pypy/module/cpyext/test/test_memoryobject.py
rename to pypy/module/cpyext/test0/test_memoryobject.py
diff --git a/pypy/module/cpyext/test/test_methodobject.py
b/pypy/module/cpyext/test0/test_methodobject.py
rename from pypy/module/cpyext/test/test_methodobject.py
rename to pypy/module/cpyext/test0/test_methodobject.py
diff --git a/pypy/module/cpyext/test/test_module.py
b/pypy/module/cpyext/test0/test_module.py
rename from pypy/module/cpyext/test/test_module.py
rename to pypy/module/cpyext/test0/test_module.py
diff --git a/pypy/module/cpyext/test/test_ndarrayobject.py
b/pypy/module/cpyext/test0/test_ndarrayobject.py
rename from pypy/module/cpyext/test/test_ndarrayobject.py
rename to pypy/module/cpyext/test0/test_ndarrayobject.py
diff --git a/pypy/module/cpyext/test/test_number.py
b/pypy/module/cpyext/test0/test_number.py
rename from pypy/module/cpyext/test/test_number.py
rename to pypy/module/cpyext/test0/test_number.py
diff --git a/pypy/module/cpyext/test1/__init__.py
b/pypy/module/cpyext/test1/__init__.py
new file mode 100644
diff --git a/pypy/module/cpyext/test/conftest.py
b/pypy/module/cpyext/test1/conftest.py
copy from pypy/module/cpyext/test/conftest.py
copy to pypy/module/cpyext/test1/conftest.py
diff --git a/pypy/module/cpyext/test/test_object.py
b/pypy/module/cpyext/test1/test_object.py
rename from pypy/module/cpyext/test/test_object.py
rename to pypy/module/cpyext/test1/test_object.py
diff --git a/pypy/module/cpyext/test1/test_pycobject.py
b/pypy/module/cpyext/test1/test_pycobject.py
new file mode 100644
--- /dev/null
+++ b/pypy/module/cpyext/test1/test_pycobject.py
@@ -0,0 +1,30 @@
+import py
+from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase
+
+class AppTestStringObject(AppTestCpythonExtensionBase):
+ def test_pycobject_import(self):
+ module = self.import_extension('foo', [
+ ("set_ptr", "METH_O",
+ """
+ PyObject *pointer, *module;
+ void *ptr = PyLong_AsVoidPtr(args);
+ if (PyErr_Occurred()) return NULL;
+ pointer = PyCObject_FromVoidPtr(ptr, NULL);
+ if (PyErr_Occurred()) return NULL;
+ module = PyImport_ImportModule("foo");
+ PyModule_AddObject(module, "_ptr", pointer);
+ Py_DECREF(module);
+ if (PyErr_Occurred()) return NULL;
+ Py_RETURN_NONE;
+ """),
+ ("get_ptr", "METH_NOARGS",
+ """
+ void *ptr = PyCObject_Import("foo", "_ptr");
+ if (PyErr_Occurred()) return NULL;
+ return PyLong_FromVoidPtr(ptr);
+ """)])
+ module.set_ptr(1234)
+ assert "PyCObject object" in str(module._ptr)
+ import gc; gc.collect()
+ assert module.get_ptr() == 1234
+ del module._ptr
diff --git a/pypy/module/cpyext/test/test_pyerrors.py
b/pypy/module/cpyext/test1/test_pyerrors.py
rename from pypy/module/cpyext/test/test_pyerrors.py
rename to pypy/module/cpyext/test1/test_pyerrors.py
diff --git a/pypy/module/cpyext/test/test_pyfile.py
b/pypy/module/cpyext/test1/test_pyfile.py
rename from pypy/module/cpyext/test/test_pyfile.py
rename to pypy/module/cpyext/test1/test_pyfile.py
diff --git a/pypy/module/cpyext/test/test_pysignals.py
b/pypy/module/cpyext/test1/test_pysignals.py
rename from pypy/module/cpyext/test/test_pysignals.py
rename to pypy/module/cpyext/test1/test_pysignals.py
diff --git a/pypy/module/cpyext/test/test_pystate.py
b/pypy/module/cpyext/test1/test_pystate.py
rename from pypy/module/cpyext/test/test_pystate.py
rename to pypy/module/cpyext/test1/test_pystate.py
diff --git a/pypy/module/cpyext/test/test_pystrtod.py
b/pypy/module/cpyext/test1/test_pystrtod.py
rename from pypy/module/cpyext/test/test_pystrtod.py
rename to pypy/module/cpyext/test1/test_pystrtod.py
diff --git a/pypy/module/cpyext/test/test_sequence.py
b/pypy/module/cpyext/test1/test_sequence.py
rename from pypy/module/cpyext/test/test_sequence.py
rename to pypy/module/cpyext/test1/test_sequence.py
diff --git a/pypy/module/cpyext/test/test_setobject.py
b/pypy/module/cpyext/test1/test_setobject.py
rename from pypy/module/cpyext/test/test_setobject.py
rename to pypy/module/cpyext/test1/test_setobject.py
diff --git a/pypy/module/cpyext/test/test_sliceobject.py
b/pypy/module/cpyext/test1/test_sliceobject.py
rename from pypy/module/cpyext/test/test_sliceobject.py
rename to pypy/module/cpyext/test1/test_sliceobject.py
diff --git a/pypy/module/cpyext/test/test_structseq.py
b/pypy/module/cpyext/test1/test_structseq.py
rename from pypy/module/cpyext/test/test_structseq.py
rename to pypy/module/cpyext/test1/test_structseq.py
diff --git a/pypy/module/cpyext/test/test_sysmodule.py
b/pypy/module/cpyext/test1/test_sysmodule.py
rename from pypy/module/cpyext/test/test_sysmodule.py
rename to pypy/module/cpyext/test1/test_sysmodule.py
diff --git a/pypy/module/cpyext/test/test_thread.py
b/pypy/module/cpyext/test1/test_thread.py
rename from pypy/module/cpyext/test/test_thread.py
rename to pypy/module/cpyext/test1/test_thread.py
diff --git a/pypy/module/cpyext/test/test_traceback.py
b/pypy/module/cpyext/test1/test_traceback.py
rename from pypy/module/cpyext/test/test_traceback.py
rename to pypy/module/cpyext/test1/test_traceback.py
diff --git a/pypy/module/cpyext/test/test_translate.py
b/pypy/module/cpyext/test1/test_translate.py
rename from pypy/module/cpyext/test/test_translate.py
rename to pypy/module/cpyext/test1/test_translate.py
diff --git a/pypy/module/cpyext/test/test_tupleobject.py
b/pypy/module/cpyext/test1/test_tupleobject.py
rename from pypy/module/cpyext/test/test_tupleobject.py
rename to pypy/module/cpyext/test1/test_tupleobject.py
diff --git a/pypy/module/cpyext/test/test_typeobject.py
b/pypy/module/cpyext/test1/test_typeobject.py
rename from pypy/module/cpyext/test/test_typeobject.py
rename to pypy/module/cpyext/test1/test_typeobject.py
diff --git a/pypy/module/cpyext/test/test_unicodeobject.py
b/pypy/module/cpyext/test1/test_unicodeobject.py
rename from pypy/module/cpyext/test/test_unicodeobject.py
rename to pypy/module/cpyext/test1/test_unicodeobject.py
diff --git a/pypy/module/cpyext/test/test_userslots.py
b/pypy/module/cpyext/test1/test_userslots.py
rename from pypy/module/cpyext/test/test_userslots.py
rename to pypy/module/cpyext/test1/test_userslots.py
diff --git a/pypy/module/cpyext/test/test_version.py
b/pypy/module/cpyext/test1/test_version.py
rename from pypy/module/cpyext/test/test_version.py
rename to pypy/module/cpyext/test1/test_version.py
diff --git a/pypy/module/cpyext/test/test_weakref.py
b/pypy/module/cpyext/test1/test_weakref.py
rename from pypy/module/cpyext/test/test_weakref.py
rename to pypy/module/cpyext/test1/test_weakref.py
diff --git a/pypy/module/imp/test/test_import.py
b/pypy/module/imp/test/test_import.py
--- a/pypy/module/imp/test/test_import.py
+++ b/pypy/module/imp/test/test_import.py
@@ -302,6 +302,13 @@
assert ambig == sys.modules.get('ambig')
assert hasattr(ambig,'imapackage')
+ def test_trailing_dot(self):
+ # bug-for-bug compatibility with CPython
+ import sys
+ __import__('pkg.pkg1.')
+ assert 'pkg.pkg1' in sys.modules
+ assert 'pkg.pkg1.' not in sys.modules
+
def test_from_a(self):
import sys
from a import imamodule
@@ -709,7 +716,6 @@
exec("from pkg.withoutall import *", d)
assert "" in d
-
def test_import_star_with_bogus___all__(self):
for case in ["not-imported-yet", "already-imported"]:
try:
diff --git a/pypy/module/micronumpy/concrete.py
b/pypy/module/micronumpy/concrete.py
--- a/pypy/module/micronumpy/concrete.py
+++ b/pypy/module/micronumpy/concrete.py
@@ -388,7 +388,7 @@
not self.flags & NPY.ARRAY_F_CONTIGUOUS):
raise oefmt(errtype, "ndarray is not Fortran contiguous")
if ((flags & space.BUF_ANY_CONTIGUOUS) == space.BUF_ANY_CONTIGUOUS and
- not (self.flags & NPY.ARRAY_F_CONTIGUOUS and
+ not (self.flags & NPY.ARRAY_F_CONTIGUOUS or
self.flags & NPY.ARRAY_C_CONTIGUOUS)):
raise oefmt(errtype, "ndarray is not contiguous")
if ((flags & space.BUF_STRIDES) != space.BUF_STRIDES and
diff --git a/rpython/rlib/rposix.py b/rpython/rlib/rposix.py
--- a/rpython/rlib/rposix.py
+++ b/rpython/rlib/rposix.py
@@ -874,11 +874,11 @@
if traits.str is unicode:
if path and path[-1] not in (u'/', u'\\', u':'):
- path += u'/'
+ path += u'\\'
mask = path + u'*.*'
else:
if path and path[-1] not in ('/', '\\', ':'):
- path += '/'
+ path += '\\'
mask = path + '*.*'
filedata = lltype.malloc(win32traits.WIN32_FIND_DATA, flavor='raw')
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit