[pypy-commit] pypy default: merged upstream
alex_gaynor
noreply at buildbot.pypy.org
Tue Jul 23 05:59:04 CEST 2013
Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch:
Changeset: r65535:42cc3499acc4
Date: 2013-07-22 20:58 -0700
http://bitbucket.org/pypy/pypy/changeset/42cc3499acc4/
Log: merged upstream
diff --git a/pypy/doc/coding-guide.rst b/pypy/doc/coding-guide.rst
--- a/pypy/doc/coding-guide.rst
+++ b/pypy/doc/coding-guide.rst
@@ -626,7 +626,7 @@
Here is the order in which PyPy looks up Python modules:
-*pypy/modules*
+*pypy/module*
mixed interpreter/app-level builtin modules, such as
the ``sys`` and ``__builtin__`` module.
@@ -657,7 +657,7 @@
on some classes being old-style.
We just maintain those changes in place,
-to see what is changed we have a branch called `vendot/stdlib`
+to see what is changed we have a branch called `vendor/stdlib`
wich contains the unmodified cpython stdlib
.. _`mixed module mechanism`:
diff --git a/pypy/doc/rffi.rst b/pypy/doc/rffi.rst
--- a/pypy/doc/rffi.rst
+++ b/pypy/doc/rffi.rst
@@ -43,7 +43,7 @@
See cbuild_ for more info on ExternalCompilationInfo.
.. _`low level types`: rtyper.html#low-level-type
-.. _cbuild: https://bitbucket.org/pypy/pypy/src/tip/pypy/translator/tool/cbuild.py
+.. _cbuild: https://bitbucket.org/pypy/pypy/src/tip/rpython/translator/tool/cbuild.py
Types
@@ -69,9 +69,3 @@
as a fake low-level implementation for tests performed by an llinterp.
.. _`extfunc.py`: https://bitbucket.org/pypy/pypy/src/tip/pypy/rpython/extfunc.py
-
-
-OO backends
------------
-
-XXX to be written
diff --git a/pypy/module/test_lib_pypy/test_ctypes_config_cache.py b/pypy/module/test_lib_pypy/test_ctypes_config_cache.py
--- a/pypy/module/test_lib_pypy/test_ctypes_config_cache.py
+++ b/pypy/module/test_lib_pypy/test_ctypes_config_cache.py
@@ -33,10 +33,8 @@
def test_resource():
- try:
- import lib_pypy.resource
- except ImportError:
- py.test.skip('no syslog on this platform')
+ if sys.platform == 'win32':
+ py.test.skip('no resource module on this platform')
d = run('resource.ctc.py', '_resource_cache.py')
assert 'RLIM_NLIMITS' in d
diff --git a/pypy/module/test_lib_pypy/test_md5_extra.py b/pypy/module/test_lib_pypy/test_md5_extra.py
--- a/pypy/module/test_lib_pypy/test_md5_extra.py
+++ b/pypy/module/test_lib_pypy/test_md5_extra.py
@@ -1,227 +1,226 @@
"""A test script to compare MD5 implementations.
-A note about performance: the pure Python MD5 takes roughly
-160 sec. per MB of data on a 233 MHz Intel Pentium CPU.
+A note about performance: the pure Python MD5 takes roughly 160 sec. per
+MB of data on a 233 MHz Intel Pentium CPU.
"""
+import md5
-from __future__ import absolute_import
-import md5 # CPython's implementation in C.
-from lib_pypy import _md5 as pymd5
+from pypy.module.test_lib_pypy.support import import_lib_pypy
-# Helpers...
+def compare_host(message, d2, d2h):
+ """Compare results against the host Python's builtin md5.
-def formatHex(str):
- "Print a string's HEX code in groups of two digits."
-
- d = map(None, str)
- d = map(ord, d)
- d = map(lambda x:"%02x" % x, d)
- return ' '.join(d)
-
-
-def format(str):
- "Print a string as-is in groups of two characters."
-
- s = ''
- for i in range(0, len(str)-1, 2):
- s = s + "%03s" % str[i:i+2]
- return s[1:]
-
-
-def printDiff(message, d1, d2, expectedResult=None):
- "Print different outputs for same message."
-
- print "Message: '%s'" % message
- print "Message length: %d" % len(message)
- if expectedResult:
- print "%-48s (expected)" % format(expectedResult)
- print "%-48s (Std. lib. MD5)" % formatHex(d1)
- print "%-48s (Pure Python MD5)" % formatHex(d2)
- print
-
-
-# The real comparison function.
-
-def compareImp(message):
- """Compare two MD5 implementations, C vs. pure Python module.
-
- For equal digests this returns None, otherwise it returns
- a tuple of both digests.
+ For equal digests this returns None, otherwise it returns a tuple of
+ both digests.
"""
-
- # Use Python's standard library MD5 compiled C module.
+ # Use the host Python's standard library MD5 compiled C module.
m1 = md5.md5()
m1.update(message)
d1 = m1.digest()
d1h = m1.hexdigest()
-
- # Use MD5 module in pure Python.
- m2 = pymd5.new()
- m2.update(message)
- d2 = m2.digest()
- d2h = m2.hexdigest()
+ # Return None if equal or the different digests if not equal.
+ return None if d1 == d2 and d1h == d2h else (d1, d2)
- # Return None if equal or the different digests if not equal.
- if d1 == d2 and d1h == d2h:
- return
- else:
- return d1, d2
+class TestMD5Update:
-class TestMD5Compare:
- "Compare pure Python MD5 against Python's std. lib. version."
-
+ spaceconfig = dict(usemodules=('struct',))
+
+ def test_update(self):
+ """Test updating cloned objects."""
+ cases = (
+ "123",
+ "1234",
+ "12345",
+ "123456",
+ "1234567",
+ "12345678",
+ "123456789 123456789 123456789 ",
+ "123456789 123456789 ",
+ "123456789 123456789 1",
+ "123456789 123456789 12",
+ "123456789 123456789 123",
+ "123456789 123456789 1234",
+ "123456789 123456789 123456789 1",
+ "123456789 123456789 123456789 12",
+ "123456789 123456789 123456789 123",
+ "123456789 123456789 123456789 1234",
+ "123456789 123456789 123456789 12345",
+ "123456789 123456789 123456789 123456",
+ "123456789 123456789 123456789 1234567",
+ "123456789 123456789 123456789 12345678",
+ )
+ space = self.space
+ w__md5 = import_lib_pypy(space, '_md5')
+
+ # Load both with same prefix.
+ prefix1 = 2**10 * 'a'
+
+ # The host md5
+ m1 = md5.md5()
+ m1.update(prefix1)
+ m1c = m1.copy()
+
+ # The app-level _md5
+ w_m2 = space.call_method(w__md5, 'new')
+ space.call_method(w_m2, 'update', space.wrap(prefix1))
+ w_m2c = space.call_method(w_m2, 'copy')
+
+ # Update and compare...
+ for i in range(len(cases)):
+ message = cases[i][0]
+
+ m1c.update(message)
+ d1 = m1c.hexdigest()
+
+ space.call_method(w_m2c, 'update', space.wrap(message))
+ w_d2 = space.call_method(w_m2c, 'hexdigest')
+ d2 = space.str_w(w_d2)
+
+ assert d1 == d2
+
+
+class AppTestMD5Compare:
+ """Compare pure Python MD5 against Python's std. lib. version."""
+
+ spaceconfig = dict(usemodules=('struct',))
+
+ def setup_class(cls):
+ from pypy.interpreter import gateway
+ space = cls.space
+ cls.w__md5 = import_lib_pypy(space, '_md5')
+ if cls.runappdirect:
+ # interp2app doesn't work in appdirect mode
+ cls.w_compare_host = staticmethod(compare_host)
+ else:
+ compare_host.unwrap_spec = [str, str, str]
+ cls.w_compare_host = space.wrap(gateway.interp2app(compare_host))
+
+ def w_compare(self, message):
+ # Generate results against the app-level pure Python MD5 and
+ # pass them off for comparison against the host Python's MD5
+ m2 = self._md5.new()
+ m2.update(message)
+ return self.compare_host(message, m2.digest(), m2.hexdigest())
+
+ def w__format_hex(self, string):
+ """Print a string's HEX code in groups of two digits."""
+ d = map(None, string)
+ d = map(ord, d)
+ d = map(lambda x: "%02x" % x, d)
+ return ' '.join(d)
+
+ def w__format(self, string):
+ """Print a string as-is in groups of two characters."""
+ s = ''
+ for i in range(0, len(string) - 1, 2):
+ s = s + "%03s" % string[i:i + 2]
+ return s[1:]
+
+ def w_print_diff(self, message, d1, d2, expectedResult=None):
+ """Print different outputs for same message."""
+ print("Message: '%s'" % message)
+ print("Message length: %d" % len(message))
+ if expectedResult:
+ print("%-48s (expected)" % self._format(expectedResult))
+ print("%-48s (Std. lib. MD5)" % self._format_hex(d1))
+ print("%-48s (Pure Python MD5)" % self._format_hex(d2))
+ print()
+
def test1(self):
- "Test cases with known digest result."
-
+ """Test cases with known digest result."""
cases = (
- ("",
- "d41d8cd98f00b204e9800998ecf8427e"),
- ("a",
- "0cc175b9c0f1b6a831c399e269772661"),
- ("abc",
- "900150983cd24fb0d6963f7d28e17f72"),
- ("message digest",
- "f96b697d7cb7938d525a2f31aaf161d0"),
- ("abcdefghijklmnopqrstuvwxyz",
- "c3fcd3d76192e4007dfb496cca67e13b"),
- ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
- "d174ab98d277d9f5a5611c2c9f419d9f"),
- ("1234567890"*8,
- "57edf4a22be3c955ac49da2e2107b67a"),
- )
+ ("",
+ "d41d8cd98f00b204e9800998ecf8427e"),
+ ("a",
+ "0cc175b9c0f1b6a831c399e269772661"),
+ ("abc",
+ "900150983cd24fb0d6963f7d28e17f72"),
+ ("message digest",
+ "f96b697d7cb7938d525a2f31aaf161d0"),
+ ("abcdefghijklmnopqrstuvwxyz",
+ "c3fcd3d76192e4007dfb496cca67e13b"),
+ ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
+ "d174ab98d277d9f5a5611c2c9f419d9f"),
+ ("1234567890"*8,
+ "57edf4a22be3c955ac49da2e2107b67a"),
+ )
- for i in xrange(len(cases)):
- res = compareImp(cases[i][0])
+ for i in range(len(cases)):
+ res = self.compare(cases[i][0])
if res is not None:
d1, d2 = res
message, expectedResult = cases[i][0], None
if len(cases[i]) == 2:
expectedResult = cases[i][1]
- printDiff(message, d1, d2, expectedResult)
+ self.print_diff(message, d1, d2, expectedResult)
assert res is None
+ def test2(self):
+ """Test cases without known digest result."""
+ cases = (
+ "123",
+ "1234",
+ "12345",
+ "123456",
+ "1234567",
+ "12345678",
+ "123456789 123456789 123456789 ",
+ "123456789 123456789 ",
+ "123456789 123456789 1",
+ "123456789 123456789 12",
+ "123456789 123456789 123",
+ "123456789 123456789 1234",
+ "123456789 123456789 123456789 1",
+ "123456789 123456789 123456789 12",
+ "123456789 123456789 123456789 123",
+ "123456789 123456789 123456789 1234",
+ "123456789 123456789 123456789 12345",
+ "123456789 123456789 123456789 123456",
+ "123456789 123456789 123456789 1234567",
+ "123456789 123456789 123456789 12345678",
+ )
- def test2(self):
- "Test cases without known digest result."
-
- cases = (
- "123",
- "1234",
- "12345",
- "123456",
- "1234567",
- "12345678",
- "123456789 123456789 123456789 ",
- "123456789 123456789 ",
- "123456789 123456789 1",
- "123456789 123456789 12",
- "123456789 123456789 123",
- "123456789 123456789 1234",
- "123456789 123456789 123456789 1",
- "123456789 123456789 123456789 12",
- "123456789 123456789 123456789 123",
- "123456789 123456789 123456789 1234",
- "123456789 123456789 123456789 12345",
- "123456789 123456789 123456789 123456",
- "123456789 123456789 123456789 1234567",
- "123456789 123456789 123456789 12345678",
- )
-
- for i in xrange(len(cases)):
- res = compareImp(cases[i][0])
+ for i in range(len(cases)):
+ res = self.compare(cases[i][0])
if res is not None:
d1, d2 = res
message = cases[i][0]
- printDiff(message, d1, d2)
+ self.print_diff(message, d1, d2)
assert res is None
+ def test3(self):
+ """Test cases with long messages (can take a while)."""
+ cases = (
+ (2**10*'a',),
+ (2**10*'abcd',),
+ #(2**20*'a',), # 1 MB, takes about 160 sec. on a 233 Mhz Pentium.
+ )
- def test3(self):
- "Test cases with long messages (can take a while)."
-
- cases = (
- (2**10*'a',),
- (2**10*'abcd',),
-## (2**20*'a',), ## 1 MB, takes about 160 sec. on a 233 Mhz Pentium.
- )
-
- for i in xrange(len(cases)):
- res = compareImp(cases[i][0])
+ for i in range(len(cases)):
+ res = self.compare(cases[i][0])
if res is not None:
d1, d2 = res
message = cases[i][0]
- printDiff(message, d1, d2)
+ self.print_diff(message, d1, d2)
assert res is None
-
def test4(self):
- "Test cases with increasingly growing message lengths."
-
+ """Test cases with increasingly growing message lengths."""
i = 0
- while i < 2**5:
+ while i < 2**5:
message = i * 'a'
- res = compareImp(message)
+ res = self.compare(message)
if res is not None:
d1, d2 = res
- printDiff(message, d1, d2)
+ self.print_diff(message, d1, d2)
assert res is None
- i = i + 1
+ i += 1
-
- def test5(self):
- "Test updating cloned objects."
-
- cases = (
- "123",
- "1234",
- "12345",
- "123456",
- "1234567",
- "12345678",
- "123456789 123456789 123456789 ",
- "123456789 123456789 ",
- "123456789 123456789 1",
- "123456789 123456789 12",
- "123456789 123456789 123",
- "123456789 123456789 1234",
- "123456789 123456789 123456789 1",
- "123456789 123456789 123456789 12",
- "123456789 123456789 123456789 123",
- "123456789 123456789 123456789 1234",
- "123456789 123456789 123456789 12345",
- "123456789 123456789 123456789 123456",
- "123456789 123456789 123456789 1234567",
- "123456789 123456789 123456789 12345678",
- )
-
- # Load both with same prefix.
- prefix1 = 2**10 * 'a'
-
- m1 = md5.md5()
- m1.update(prefix1)
- m1c = m1.copy()
-
- m2 = pymd5.new()
- m2.update(prefix1)
- m2c = m2.copy()
-
- # Update and compare...
- for i in xrange(len(cases)):
- message = cases[i][0]
-
- m1c.update(message)
- d1 = m1c.hexdigest()
-
- m2c.update(message)
- d2 = m2c.hexdigest()
-
- assert d1 == d2
-
-
-def test_attributes():
- assert pymd5.digest_size == 16
- assert pymd5.new().digest_size == 16
- assert pymd5.new().digestsize == 16
- assert pymd5.new().block_size == 64
+ def test_attributes(self):
+ _md5 = self._md5
+ assert _md5.digest_size == 16
+ assert _md5.new().digest_size == 16
+ assert _md5.new().digestsize == 16
+ assert _md5.new().block_size == 64
More information about the pypy-commit
mailing list