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