134 for l1, l2 in missing: |
134 for l1, l2 in missing: |
135 if l1 in branch_lines: |
135 if l1 in branch_lines: |
136 mba[l1].append(l2) |
136 mba[l1].append(l2) |
137 return mba |
137 return mba |
138 |
138 |
|
139 @contract(returns='dict(int: list(int))') |
|
140 def executed_branch_arcs(self): |
|
141 """Return arcs that were executed from branch lines. |
|
142 |
|
143 Returns {l1:[l2a,l2b,...], ...} |
|
144 |
|
145 """ |
|
146 executed = self.arcs_executed() |
|
147 branch_lines = set(self._branch_lines()) |
|
148 eba = collections.defaultdict(list) |
|
149 for l1, l2 in executed: |
|
150 if l1 in branch_lines: |
|
151 eba[l1].append(l2) |
|
152 return eba |
|
153 |
139 @contract(returns='dict(int: tuple(int, int))') |
154 @contract(returns='dict(int: tuple(int, int))') |
140 def branch_stats(self): |
155 def branch_stats(self): |
141 """Get stats about branches. |
156 """Get stats about branches. |
142 |
157 |
143 Returns a dict mapping line numbers to a tuple: |
158 Returns a dict mapping line numbers to a tuple: |