aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/performanceTests.py
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2022-12-02 09:48:42 +1100
committerNeil <nyamatongwe@gmail.com>2022-12-02 09:48:42 +1100
commit85dd43cb420a7be3cd5ec2520f55685327978af0 (patch)
tree2c153e9f18f9f46cf9cd46eabd6a4a2ccff1c890 /test/performanceTests.py
parent2a15393d36841175ffc27cac959bbc49af40ff29 (diff)
downloadscintilla-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.py29
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")