You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
C implementation of OrderedDict often has two paths. One for exact OrderedDict and other for subclasses. But only one of the paths is tested.
Proposed patch adds tests for a subclass of C implemented OrderedDict.
test_issue24347 is failed with OrderedDict subclass. Either there is a bug in OrderedDict implementation, or the test should be more lenient.
The patch was not ready for commit. The problem is that test_issue24347 fails in CPythonOrderedDictSubclassTests. The failure is random, you need to run test several times to encounter it.
Experimenting with this test I found other bug probably related to bpo-24347.
>>> from collections import OrderedDict
>>> od = OrderedDict()
>>> dict.__setitem__(od, 1, 2)
>>> od
OrderedDict([<NULL>])
I expected rather raising an exception or showing an empty OrderedDict, that exposing NULL.
New patch adds PurePythonOrderedDictSubclassTests, moves all tests except test_key_change_during_iteration from CPythonOrderedDictTests to OrderedDictTests to test Python implementation too, fixes a bug in values and items iteration that caused test_issue24347 to fail, and adds additional explicit checks for values() and items() to test_issue24347.
Activity
serhiy-storchaka commentedon Oct 20, 2015
C implementation of OrderedDict often has two paths. One for exact OrderedDict and other for subclasses. But only one of the paths is tested.
Proposed patch adds tests for a subclass of C implemented OrderedDict.
test_issue24347 is failed with OrderedDict subclass. Either there is a bug in OrderedDict implementation, or the test should be more lenient.
ericsnowcurrently commentedon Oct 20, 2015
LGTM as long as you also add PurePythonOrderedDictSubclassTests to match CPythonOrderedDictSubclassTests (per PEP-399).
serhiy-storchaka commentedon Oct 21, 2015
The patch was not ready for commit. The problem is that test_issue24347 fails in CPythonOrderedDictSubclassTests. The failure is random, you need to run test several times to encounter it.
Experimenting with this test I found other bug probably related to bpo-24347.
I expected rather raising an exception or showing an empty OrderedDict, that exposing NULL.
ericsnowcurrently commentedon Oct 21, 2015
Regarding dict.__setitem__, see issue bpo-24726. Raymond outlined what needs to be fixed.
serhiy-storchaka commentedon Oct 21, 2015
New patch adds PurePythonOrderedDictSubclassTests, moves all tests except test_key_change_during_iteration from CPythonOrderedDictTests to OrderedDictTests to test Python implementation too, fixes a bug in values and items iteration that caused test_issue24347 to fail, and adds additional explicit checks for values() and items() to test_issue24347.
python-dev commentedon Nov 4, 2015
New changeset 499398d91b97 by Serhiy Storchaka in branch '3.5':
Issue bpo-25449: Iterating OrderedDict with keys with unstable hash now raises
https://hg.python.org/cpython/rev/499398d91b97
New changeset 9db4191723eb by Serhiy Storchaka in branch 'default':
Issue bpo-25449: Iterating OrderedDict with keys with unstable hash now raises
https://hg.python.org/cpython/rev/9db4191723eb
New changeset 59c7615ea921 by Serhiy Storchaka in branch '3.5':
Issue bpo-25449: Fixed a crash and leaking NULL in repr() of OrderedDict that
https://hg.python.org/cpython/rev/59c7615ea921
New changeset 76e848554b5d by Serhiy Storchaka in branch 'default':
Issue bpo-25449: Fixed a crash and leaking NULL in repr() of OrderedDict that
https://hg.python.org/cpython/rev/76e848554b5d
serhiy-storchaka commentedon Nov 4, 2015
59c7615ea921 and 76e848554b5d were related to bpo-24726.