Rev 20: Include timing tests for find_unique_ancestors() in http://bzr.arbash-meinel.com/plugins/test_graph
John Arbash Meinel
john at arbash-meinel.com
Thu Apr 24 23:38:42 BST 2008
At http://bzr.arbash-meinel.com/plugins/test_graph
------------------------------------------------------------
revno: 20
revision-id: john at arbash-meinel.com-20080424223243-mu6fvbl4msr8vl58
parent: john at arbash-meinel.com-20080423231554-pty1cpydllewccj6
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: test_graph
timestamp: Thu 2008-04-24 17:32:43 -0500
message:
Include timing tests for find_unique_ancestors()
modified:
graph_testing.py graph_testing.py-20071210194758-1pwa1q7e3wnjf418-2
-------------- next part --------------
=== modified file 'graph_testing.py'
--- a/graph_testing.py 2008-04-23 23:15:54 +0000
+++ b/graph_testing.py 2008-04-24 22:32:43 +0000
@@ -61,9 +61,12 @@
self.trivial_head_times = {}
self.find_difference_times = {}
self.trivial_diff_times = {}
+ self.trivial_find_unique_times = {}
+ self.find_unique_times = {}
self.hold_graph = False
self.invalid_heads = set()
self.invalid_diffs = set()
+ self.invalid_unique = set()
def get_interesting_nodes(self, last_revision):
"""Go through the revision graph, and look for interesting nodes.
@@ -200,47 +203,87 @@
# Skip the find_difference check
# continue
+ # a_branch.lock_read()
+ # try:
+ # if not self.hold_graph:
+ # graph = a_branch.repository.get_graph()
+ # timer.start()
+ # for parent_id in parent_ids:
+ # left, right = graph.find_difference(revision_id, parent_id)
+ # if right != set():
+ # pb.note('found unmerged nodes for:\n %s\nand %s',
+ # revision_id, parent_id)
+ # t_trivial_diff = timer.end()
+ # finally:
+ # a_branch.unlock()
+ # self.trivial_diff_times[revision_id] = t_trivial_diff
+
+ # if len(parent_ids) < 2:
+ # continue
+
+ # a_branch.lock_read()
+ # try:
+ # if not self.hold_graph:
+ # graph = a_branch.repository.get_graph()
+ # timer.start()
+ # left, right = graph.find_difference(parent_ids[0],
+ # parent_ids[1])
+ # t_diff = timer.end()
+ # finally:
+ # a_branch.unlock()
+ # self.find_difference_times[revision_id] = t_diff
+ # left_ancestry = frozenset(self.ancestries[parent_ids[0]])
+ # right_ancestry = frozenset(self.ancestries[parent_ids[1]])
+ # left_correct = left == (left_ancestry - right_ancestry)
+ # right_correct = right == (right_ancestry - left_ancestry)
+ # if not left_correct and not right_correct:
+ # pb.note('left and right incorrect for: %s', revision_id)
+ # elif not left_correct:
+ # pb.note('left incorrect for: %s', revision_id)
+ # elif not right_correct:
+ # pb.note('right incorrect for: %s', revision_id)
+ # if not left_correct or not right_correct:
+ # self.invalid_diffs.add(revision_id)
+
+ if getattr(graph, 'find_unique_ancestors', None) is None:
+ continue
a_branch.lock_read()
try:
if not self.hold_graph:
graph = a_branch.repository.get_graph()
timer.start()
+ unique = graph.find_unique_ancestors(revision_id, parent_ids)
+ if unique != set([revision_id]):
+ pb.note('found extra unique nodes for a revision:\n'
+ ' %s', revision_id)
for parent_id in parent_ids:
- left, right = graph.find_difference(revision_id, parent_id)
- if right != set():
- pb.note('found unmerged nodes for:\n %s\nand %s',
- revision_id, parent_id)
- t_trivial_diff = timer.end()
- finally:
- a_branch.unlock()
- self.trivial_diff_times[revision_id] = t_trivial_diff
-
- if len(parent_ids) < 2:
- continue
-
- a_branch.lock_read()
- try:
- if not self.hold_graph:
- graph = a_branch.repository.get_graph()
- timer.start()
- left, right = graph.find_difference(parent_ids[0],
- parent_ids[1])
- t_diff = timer.end()
- finally:
- a_branch.unlock()
- self.find_difference_times[revision_id] = t_diff
- left_ancestry = frozenset(self.ancestries[parent_ids[0]])
- right_ancestry = frozenset(self.ancestries[parent_ids[1]])
- left_correct = left == (left_ancestry - right_ancestry)
- right_correct = right == (right_ancestry - left_ancestry)
- if not left_correct and not right_correct:
- pb.note('left and right incorrect for: %s', revision_id)
- elif not left_correct:
- pb.note('left incorrect for: %s', revision_id)
- elif not right_correct:
- pb.note('right incorrect for: %s', revision_id)
- if not left_correct or not right_correct:
- self.invalid_diffs.add(revision_id)
+ unique = graph.find_unique_ancestors(parent_id, [revision_id])
+ if unique != set():
+ pb.note('found unique nodes for a parent:\n'
+ ' rev: %s\nparent: ',
+ revision_id, parent_id)
+ t_trivial_unique = timer.end()
+ finally:
+ a_branch.unlock()
+ self.trivial_find_unique_times[revision_id] = t_trivial_unique
+
+ if len(parent_ids) >= 2:
+ a_branch.lock_read()
+ try:
+ if not self.hold_graph:
+ graph = a_branch.repository.get_graph()
+ timer.start()
+ unique = graph.find_unique_ancestors(parent_ids[1],
+ [parent_ids[0]])
+ t_unique = timer.end()
+ finally:
+ a_branch.unlock()
+ left_ancestry = frozenset(self.ancestries[parent_ids[0]])
+ right_ancestry = frozenset(self.ancestries[parent_ids[1]])
+ correct_unique = right_ancestry - left_ancestry
+ if unique != correct_unique:
+ pb.note('parent unique incorrect for: %s', revision_id)
+ self.find_unique_times[revision_id] = t_unique
except KeyboardInterrupt:
pass # Just break out of the loop
pb.finished()
@@ -313,6 +356,7 @@
rev_id_map = the_branch.get_revision_id_to_revno_map()
finally:
the_branch.unlock()
+
tester = GraphTester(rev_graph)
tester.hold_graph = True
tester.get_interesting_nodes(last_revision)
@@ -321,12 +365,20 @@
import pprint
# print 'trivial heads:'
# pprint.pprint(tester.get_statistics(tester.trivial_head_times))
- print 'trivial diff:'
- pprint.pprint(tester.get_statistics(tester.trivial_diff_times))
+ if tester.trivial_diff_times:
+ print 'trivial diff:'
+ pprint.pprint(tester.get_statistics(tester.trivial_diff_times))
# print 'heads:'
# pprint.pprint(tester.get_statistics(tester.head_times))
- print 'diffs:'
- pprint.pprint(tester.get_statistics(tester.find_difference_times))
+ if tester.find_difference_times:
+ print 'diffs:'
+ pprint.pprint(tester.get_statistics(tester.find_difference_times))
+ if tester.trivial_find_unique_times:
+ print 'trivial unique:'
+ pprint.pprint(tester.get_statistics(tester.trivial_find_unique_times))
+ if tester.find_unique_times:
+ print 'find unique:'
+ pprint.pprint(tester.get_statistics(tester.find_unique_times))
if pause:
import pdb; pdb.set_trace()
the_branch.unlock()
More information about the bazaar-commits
mailing list