summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Jeffery <andrew@aj.id.au>2018-05-05 13:58:09 +0930
committerAndrew Jeffery <andrew@aj.id.au>2018-05-14 10:08:18 +0930
commit3ba497a9d915d48d4dbeca3f51281c5b5bd4bd1d (patch)
tree53c35c8b3ac0e43640516d0905fd654d7d985ea8
parent786e6a6c38de0d0141b30095cbea5566cb8ff719 (diff)
downloadpyphosphor-3ba497a9d915d48d4dbeca3f51281c5b5bd4bd1d.tar.gz
pyphosphor-3ba497a9d915d48d4dbeca3f51281c5b5bd4bd1d.zip
testpathtree: Add stress tests
Indicative performance on a lightly loaded 3rd Gen Lenovo X1 Carbon: $ # Timing 1,000,000 executions of the test case, time units are seconds $ python -m obmc.utils.testpathtree Depth tests: 1: 6.01530885696 2: 7.11315083504 3: 8.41325497627 4: 9.51180887222 5: 10.7866010666 6: 12.0375499725 7: 13.4880149364 8: 14.7702541351 9: 16.3227319717 10: 17.6581590176 Width tests: 1: 1.19656515121 2: 1.20851492882 4: 1.2031879425 8: 1.19995284081 16: 1.21298193932 32: 1.20965600014 64: 1.20766687393 128: 1.21984100342 256: 1.21412611008 512: 1.21589684486 1024: 1.2073469162 2048: 1.2244079113 4096: 1.21275901794 8192: 1.22486519814 16384: 1.21715903282 32768: 1.21435189247 65536: 1.2201769352 131072: 1.21944999695 262144: 1.21434497833 524288: 1.20947313309 1048576: 1.21527695656 Change-Id: I05aa3fb59ddc2510e22e22a8802e166e2e801bab Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
-rwxr-xr-x[-rw-r--r--]obmc/utils/testpathtree.py43
1 files changed, 42 insertions, 1 deletions
diff --git a/obmc/utils/testpathtree.py b/obmc/utils/testpathtree.py
index 5fb5fd3..3c68edc 100644..100755
--- a/obmc/utils/testpathtree.py
+++ b/obmc/utils/testpathtree.py
@@ -1,7 +1,6 @@
import unittest
from .pathtree import PathTree
-from pprint import pprint
class PathTreeTest(unittest.TestCase):
def test_set_depth_1(self):
@@ -309,3 +308,45 @@ class PathTreeTest(unittest.TestCase):
pt['/a/c'] = None
pt['/b'] = 4
self.assertEquals(set([('/a/b', 2)]), set(pt.dataitems(subtree='/a', depth=1)))
+
+import timeit
+import sys
+
+def depth_stress(pt, k):
+ pt[k] = 1
+ pt[k] = pt[k] + 1
+ del pt[k]
+
+depth_setup = """\
+from __main__ import depth_stress
+from obmc.utils.pathtree import PathTree
+pt = PathTree()
+key = '/' + '/'.join(['a'] * {})
+"""
+
+def width_stress(pt, k):
+ pt.get_children(k)
+
+width_setup = """\
+from __main__ import width_stress
+from obmc.utils.pathtree import PathTree
+pt = PathTree()
+for i in range(0, {}):
+ pt["/{}/a".format(i)] = i
+key = '/0/a'
+"""
+
+if __name__ == "__main__":
+ print("Depth tests:")
+ for depth in range(1, 11):
+ setup = depth_setup.format(depth)
+ stmt = "depth_stress(pt, key)"
+ time = timeit.timeit(stmt, setup=setup)
+ print("\t{}: {}".format(depth, time))
+ print
+ print("Width tests:")
+ for width in map(lambda x: 2 ** x, range(0, 21)):
+ setup = width_setup.format(width, "{}")
+ stmt = "width_stress(pt, key)"
+ time = timeit.timeit(stmt, setup=setup)
+ print("\t{}: {}".format(width, time))
OpenPOWER on IntegriCloud