diff options
author | Andrew Jeffery <andrew@aj.id.au> | 2018-05-05 13:58:09 +0930 |
---|---|---|
committer | Andrew Jeffery <andrew@aj.id.au> | 2018-05-14 10:08:18 +0930 |
commit | 3ba497a9d915d48d4dbeca3f51281c5b5bd4bd1d (patch) | |
tree | 53c35c8b3ac0e43640516d0905fd654d7d985ea8 | |
parent | 786e6a6c38de0d0141b30095cbea5566cb8ff719 (diff) | |
download | pyphosphor-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.py | 43 |
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)) |