mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
gh-142145: Remove quadratic behavior in node ID cache clearing (GH-142146)
* Remove quadratic behavior in node ID cache clearing Co-authored-by: Jacob Walls <38668450+jacobtylerwalls@users.noreply.github.com> * Add news fragment --------- Co-authored-by: Jacob Walls <38668450+jacobtylerwalls@users.noreply.github.com>
This commit is contained in:
parent
8801c6dec7
commit
08d8e18ad8
3 changed files with 20 additions and 8 deletions
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
import copy
|
||||
import pickle
|
||||
import time
|
||||
import io
|
||||
from test import support
|
||||
import unittest
|
||||
|
|
@ -173,6 +174,23 @@ def testAppendChild(self):
|
|||
self.assertEqual(dom.documentElement.childNodes[-1].data, "Hello")
|
||||
dom.unlink()
|
||||
|
||||
def testAppendChildNoQuadraticComplexity(self):
|
||||
impl = getDOMImplementation()
|
||||
|
||||
newdoc = impl.createDocument(None, "some_tag", None)
|
||||
top_element = newdoc.documentElement
|
||||
children = [newdoc.createElement(f"child-{i}") for i in range(1, 2 ** 15 + 1)]
|
||||
element = top_element
|
||||
|
||||
start = time.time()
|
||||
for child in children:
|
||||
element.appendChild(child)
|
||||
element = child
|
||||
end = time.time()
|
||||
|
||||
# This example used to take at least 30 seconds.
|
||||
self.assertLess(end - start, 1)
|
||||
|
||||
def testAppendChildFragment(self):
|
||||
dom, orig, c1, c2, c3, frag = self._create_fragment_test_nodes()
|
||||
dom.documentElement.appendChild(frag)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue