diff options
author | Georg Brandl <georg@python.org> | 2007-03-18 18:28:25 +0000 |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2007-03-18 18:28:25 +0000 |
commit | d9dbe7205646adac785e4c6fc04d20a6d35455c6 (patch) | |
tree | 2a39d920adb19ceaddc8e6e5563ef3b7d36d6c9f | |
parent | 1d4b8345742c4b662748af7c7a9d303254e768fb (diff) | |
download | cpython-git-d9dbe7205646adac785e4c6fc04d20a6d35455c6.tar.gz |
Patch #1678339: test case for bug in difflib.
-rw-r--r-- | Lib/test/outstanding_bugs.py | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/Lib/test/outstanding_bugs.py b/Lib/test/outstanding_bugs.py index 04afcbd8ad..6276c512e9 100644 --- a/Lib/test/outstanding_bugs.py +++ b/Lib/test/outstanding_bugs.py @@ -10,13 +10,44 @@ import unittest from test import test_support # -# No test cases for outstanding bugs at the moment. +# One test case for outstanding bugs at the moment: # +class TestDifflibLongestMatch(unittest.TestCase): + # From Patch #1678339: + # The find_longest_match method in the difflib's SequenceMatcher has a bug. + + # The bug is in turn caused by a problem with creating a b2j mapping which + # should contain a list of indices for each of the list elements in b. + # However, when the b2j mapping is being created (this is being done in + # __chain_b method in the SequenceMatcher) the mapping becomes broken. The + # cause of this is that for the frequently used elements the list of indices + # is removed and the element is being enlisted in the populardict mapping. + + # The test case tries to match two strings like: + # abbbbbb.... and ...bbbbbbc + + # The number of b is equal and the find_longest_match should have returned + # the proper amount. However, in case the number of "b"s is large enough, the + # method reports that the length of the longest common substring is 0. It + # simply can't find it. + + # A bug was raised some time ago on this matter. It's ID is 1528074. + + def test_find_longest_match(self): + import difflib + for i in (190, 200, 210): + text1 = "a" + "b"*i + text2 = "b"*i + "c" + m = difflib.SequenceMatcher(None, text1, text2) + (aptr, bptr, l) = m.find_longest_match(0, len(text1), 0, len(text2)) + self.assertEquals(i, l) + self.assertEquals(aptr, 1) + self.assertEquals(bptr, 0) + def test_main(): - #test_support.run_unittest() - pass + test_support.run_unittest(TestDifflibLongestMatch) if __name__ == "__main__": test_main() |