On 9/17/2010 11:12 PM, Steven D'Aprano wrote:
I was writing some tests for a mapping class I have made, and I decided to run those same tests over dict and UserDict. The built-in dict passed all the tests, but UserDict failed one:
You forgot to specify Python version ;-).
class SimpleMappingTest(unittest.TestCase): type2test = UserDict.UserDict
In 3.x, collections.UserDict
def test_iter(self): k, v = [0, 1, 2, 3], 'abcd' m = self.type2test(zip(k, v)) it = iter(m) self.assert_(iter(it) is it) self.assertEquals(sorted(it), k) # This line fails.
Not in 3.x import collections k, v = [0, 1, 2, 3], 'abcd' m = collections.UserDict(zip(k, v)) it = iter(m) assert iter(it) is it assert sorted(it) == k runs clean.
If I look at the source code for the UserDict module, I discover that there's a second mapping class, IterableUserDict,
Not any more. One of numerous 3.x cleanups made possible by dropping obsessive back compatibility, which, as Peter explained, wan the reason for the hack.
-- Terry Jan Reedy -- http://mail.python.org/mailman/listinfo/python-list