diff options
author | Neil <nyamatongwe@gmail.com> | 2022-12-02 09:48:42 +1100 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2022-12-02 09:48:42 +1100 |
commit | 85dd43cb420a7be3cd5ec2520f55685327978af0 (patch) | |
tree | 2c153e9f18f9f46cf9cd46eabd6a4a2ccff1c890 /test/performanceTests.py | |
parent | 2a15393d36841175ffc27cac959bbc49af40ff29 (diff) | |
download | scintilla-mirror-85dd43cb420a7be3cd5ec2520f55685327978af0.tar.gz |
Detangle ASCII and multi-byte code for case-insenstive UTF-8 searches.
This avoids some work for the common case of ASCII text, which can reduce time
taken for search in text that is ASCII or almost-all ASCII by 30%.
Ensures that the bytes variable is always initialized.
There are a small gains possible by making other minor changes but they would
increase code length and add complexity.
Add performance test for UTF-8 search in almost-all ASCII document.
Increase size of test cases for more consistent results on faster computers.
Diffstat (limited to 'test/performanceTests.py')
-rw-r--r-- | test/performanceTests.py | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/test/performanceTests.py b/test/performanceTests.py index eb7c0c096..a3df73465 100644 --- a/test/performanceTests.py +++ b/test/performanceTests.py @@ -26,7 +26,7 @@ class TestPerformance(unittest.TestCase): def testAddLine(self): data = (string.ascii_letters + string.digits + "\n").encode('utf-8') start = timer() - for i in range(1000): + for i in range(2000): self.ed.AddText(len(data), data) self.assertEquals(self.ed.LineCount, i + 2) end = timer() @@ -38,7 +38,7 @@ class TestPerformance(unittest.TestCase): def testAddLineMiddle(self): data = (string.ascii_letters + string.digits + "\n").encode('utf-8') start = timer() - for i in range(1000): + for i in range(2000): self.ed.AddText(len(data), data) self.assertEquals(self.ed.LineCount, i + 2) end = timer() @@ -64,7 +64,7 @@ class TestPerformance(unittest.TestCase): insert = (string.digits + "\n").encode('utf-8') self.ed.AddText(len(data), data) start = timer() - for i in range(1000): + for i in range(2000): self.ed.InsertText(0, insert) end = timer() duration = end - start @@ -96,7 +96,7 @@ class TestPerformance(unittest.TestCase): self.ed.AddText(len(manyLines), manyLines) searchString = "φ".encode('utf-8') start = timer() - for i in range(10): + for i in range(1000): self.ed.TargetStart = 0 self.ed.TargetEnd = self.ed.Length-1 self.ed.SearchFlags = self.ed.SCFIND_MATCHCASE @@ -115,7 +115,7 @@ class TestPerformance(unittest.TestCase): self.ed.AddText(len(manyLines), manyLines) searchString = "φ".encode('utf-8') start = timer() - for i in range(10): + for i in range(20): self.ed.TargetStart = 0 self.ed.TargetEnd = self.ed.Length-1 self.ed.SearchFlags = 0 @@ -126,5 +126,24 @@ class TestPerformance(unittest.TestCase): print("%6.3f testUTF8Searches" % duration) self.xite.DoEvents() + def testUTF8AsciiSearches(self): + self.ed.SetCodePage(65001) + oneLine = "Fold Margin=NagasakiOsakaHiroshimaHanedaKyoto(&F)\n".encode('utf-8') + manyLines = oneLine * 100000 + manyLines = manyLines + "φ\n".encode('utf-8') + self.ed.AddText(len(manyLines), manyLines) + searchString = "φ".encode('utf-8') + start = timer() + for i in range(20): + self.ed.TargetStart = 0 + self.ed.TargetEnd = self.ed.Length-1 + self.ed.SearchFlags = 0 + pos = self.ed.SearchInTarget(len(searchString), searchString) + self.assert_(pos > 0) + end = timer() + duration = end - start + print("%6.3f testUTF8AsciiSearches" % duration) + self.xite.DoEvents() + if __name__ == '__main__': Xite.main("performanceTests") |