Hi,
I just checked out the source code and ran the unittest as per instructions on
http://codespeak.net/pypy/index.cgi?source
i.e.
python pypy/pypy/testall.py
(Note that there is a typo in the filename there (should be test_all.py), and that this runs the tests in trivial objectspace.)
There is a test failure in
objspace/std/test/test_unicodestring.py
which is reproduced by
python py.py -T
PyPy in TrivialObjSpace on top of Python 2.3.3
>>>> u'a' == 'a'
||Traceback (interpreter-level):
...
Traceback (application-level):
File "<inline>", line 1 in ?
'a' == u'a'
(application-level) TypeError: unicode.__cmp__(x,y) requires y to be a 'unicode', not a 'str'
This works correctly in standard object space.
As far as I can tell pypy -T tries u'a'.__cmp__('a'), which raises the exception, while CPython ends up doing 'a'.__eq__(str(u'a'))
I do think that pypy approaches this more rationally in standard object space (i.e., implementing __eq__ and __lt__ for unicode, rather than __cmp__, as CPython does). So it's probably a good idea to accept the exception in trivila object space, rather than trying to emulate the convoluted rules for comparison in CPython.
It would probably be a good idea to skip the test in trivial object space (see patch).
Cheers,
Roeland Rengelink
Index: test_unicodestring.py =================================================================== --- test_unicodestring.py (revision 5925) +++ test_unicodestring.py (working copy) @@ -5,13 +5,17 @@ from pypy.tool import testit
-class TestUnicodeString(testit.AppTestCase): +class TestUnicodeStringStdOnly(testit.AppTestCase): + def setUp(self): + self.space = testit.objspace('std') + def test_compares(self): self.assertEqual(u'a', 'a') self.assertEqual('a', u'a') self.assertNotEqual(u'a', 'b') self.assertNotEqual('a', u'b')
+class TestUnicodeString(testit.AppTestCase):
def test_addition(self):
def check(a, b):
self.assertEqual(a, b)_______________________________________________ [EMAIL PROTECTED] http://codespeak.net/mailman/listinfo/pypy-dev
