17
17
import numpy as np
18
18
19
19
20
+ flags = {
21
+ 1 : False ,
22
+ 2 : False ,
23
+ 3 : False ,
24
+ 4 : False ,
25
+ 5 : False ,
26
+ 6 : False ,
27
+ 7 : False ,
28
+ 8 : False ,
29
+ 9 : False ,
30
+ 10 : False ,
31
+ 11 : False ,
32
+ 12 : False ,
33
+ 13 : False ,
34
+ 14 : False ,
35
+ 15 : False ,
36
+ 16 : False ,
37
+ 17 : False ,
38
+ 18 : False ,
39
+ 19 : False ,
40
+ 20 : False ,
41
+ 21 : False ,
42
+ 22 : False ,
43
+ 23 : False ,
44
+ 24 : False ,
45
+ }
46
+
47
+
20
48
def bidirectional_dij (
21
49
source : str , destination : str , graph_forward : dict , graph_backward : dict
22
50
) -> int :
@@ -48,63 +76,96 @@ def bidirectional_dij(
48
76
queue_forward .put ((0 , source ))
49
77
queue_backward .put ((0 , destination ))
50
78
51
- if source == destination :
79
+ if source == destination : # ID: 1
80
+ flags [1 ] = True
52
81
return 0
53
-
54
- while queue_forward and queue_backward :
55
- while not queue_forward .empty ():
56
- _ , v_fwd = queue_forward .get ()
57
-
58
- if v_fwd not in visited_forward :
82
+
83
+ else : # ID: 2
84
+ flags [2 ] = True
85
+ while queue_forward and queue_backward : # ID: 3
86
+ flags [3 ] = True
87
+ while not queue_forward .empty (): # ID: 4
88
+ flags [4 ] = True
89
+ _ , v_fwd = queue_forward .get ()
90
+
91
+ if v_fwd not in visited_forward : # ID: 5
92
+ flags [5 ] = True
93
+ break
94
+ else : # ID: 6
95
+ flags [6 ] = True
96
+ continue
97
+ else : # ID: 7
98
+ flags [7 ] = True
59
99
break
60
- else :
61
- break
62
- visited_forward .add (v_fwd )
63
-
64
- while not queue_backward .empty ():
65
- _ , v_bwd = queue_backward .get ()
66
-
67
- if v_bwd not in visited_backward :
100
+ visited_forward .add (v_fwd )
101
+
102
+ while not queue_backward .empty (): # ID: 8
103
+ flags [8 ] = True
104
+ _ , v_bwd = queue_backward .get ()
105
+
106
+ if v_bwd not in visited_backward : # ID: 9
107
+ flags [9 ] = True
108
+ break
109
+ else : # ID: 10
110
+ flags [10 ] = True
111
+ continue
112
+ else : # ID: 11
113
+ flags [11 ] = True
68
114
break
69
- else :
70
- break
71
- visited_backward .add (v_bwd )
72
-
73
- # forward pass and relaxation
74
- for nxt_fwd , d_forward in graph_forward [v_fwd ]:
75
- if nxt_fwd in visited_forward :
76
- continue
77
- old_cost_f = cst_fwd .get (nxt_fwd , np .inf )
78
- new_cost_f = cst_fwd [v_fwd ] + d_forward
79
- if new_cost_f < old_cost_f :
80
- queue_forward .put ((new_cost_f , nxt_fwd ))
81
- cst_fwd [nxt_fwd ] = new_cost_f
82
- parent_forward [nxt_fwd ] = v_fwd
83
- if nxt_fwd in visited_backward :
84
- if cst_fwd [v_fwd ] + d_forward + cst_bwd [nxt_fwd ] < shortest_distance :
85
- shortest_distance = cst_fwd [v_fwd ] + d_forward + cst_bwd [nxt_fwd ]
86
-
87
- # backward pass and relaxation
88
- for nxt_bwd , d_backward in graph_backward [v_bwd ]:
89
- if nxt_bwd in visited_backward :
115
+ visited_backward .add (v_bwd )
116
+
117
+ # forward pass and relaxation
118
+ for nxt_fwd , d_forward in graph_forward [v_fwd ]:
119
+ if nxt_fwd in visited_forward : # ID: 12
120
+ flags [12 ] = True
121
+ continue
122
+ else : # ID: 13
123
+ flags [13 ] = True
124
+ old_cost_f = cst_fwd .get (nxt_fwd , np .inf )
125
+ new_cost_f = cst_fwd [v_fwd ] + d_forward
126
+ if new_cost_f < old_cost_f : # ID: 14
127
+ flags [14 ] = True
128
+ queue_forward .put ((new_cost_f , nxt_fwd ))
129
+ cst_fwd [nxt_fwd ] = new_cost_f
130
+ parent_forward [nxt_fwd ] = v_fwd
131
+ if nxt_fwd in visited_backward : # ID: 15
132
+ flags [15 ] = True
133
+ if cst_fwd [v_fwd ] + d_forward + cst_bwd [nxt_fwd ] < shortest_distance : # ID: 16
134
+ flags [16 ] = True
135
+ shortest_distance = cst_fwd [v_fwd ] + d_forward + cst_bwd [nxt_fwd ]
136
+
137
+ # backward pass and relaxation
138
+ for nxt_bwd , d_backward in graph_backward [v_bwd ]:
139
+ if nxt_bwd in visited_backward : # ID: 17
140
+ flags [17 ] = True
141
+ continue
142
+ else : # ID: 18
143
+ flags [18 ] = True
144
+ old_cost_b = cst_bwd .get (nxt_bwd , np .inf )
145
+ new_cost_b = cst_bwd [v_bwd ] + d_backward
146
+ if new_cost_b < old_cost_b : # ID: 19
147
+ flags [19 ] = True
148
+ queue_backward .put ((new_cost_b , nxt_bwd ))
149
+ cst_bwd [nxt_bwd ] = new_cost_b
150
+ parent_backward [nxt_bwd ] = v_bwd
151
+
152
+ if nxt_bwd in visited_forward : # ID: 20
153
+ flags [20 ] = True
154
+ if cst_bwd [v_bwd ] + d_backward + cst_fwd [nxt_bwd ] < shortest_distance : # ID: 21
155
+ flags [21 ] = True
156
+ shortest_distance = cst_bwd [v_bwd ] + d_backward + cst_fwd [nxt_bwd ]
157
+
158
+ if cst_fwd [v_fwd ] + cst_bwd [v_bwd ] >= shortest_distance : # ID: 22
159
+ flags [22 ] = True
160
+ break
161
+ else : # ID: 23
162
+ flags [23 ] = True
90
163
continue
91
- old_cost_b = cst_bwd .get (nxt_bwd , np .inf )
92
- new_cost_b = cst_bwd [v_bwd ] + d_backward
93
- if new_cost_b < old_cost_b :
94
- queue_backward .put ((new_cost_b , nxt_bwd ))
95
- cst_bwd [nxt_bwd ] = new_cost_b
96
- parent_backward [nxt_bwd ] = v_bwd
97
164
98
- if nxt_bwd in visited_forward :
99
- if cst_bwd [v_bwd ] + d_backward + cst_fwd [nxt_bwd ] < shortest_distance :
100
- shortest_distance = cst_bwd [v_bwd ] + d_backward + cst_fwd [nxt_bwd ]
101
-
102
- if cst_fwd [v_fwd ] + cst_bwd [v_bwd ] >= shortest_distance :
103
- break
104
-
105
- if shortest_distance != np .inf :
106
- shortest_path_distance = shortest_distance
107
- return shortest_path_distance
165
+ if shortest_distance != np .inf : # ID: 24
166
+ flags [24 ] = True
167
+ shortest_path_distance = shortest_distance
168
+ return shortest_path_distance
108
169
109
170
110
171
graph_fwd = {
@@ -128,3 +189,9 @@ def bidirectional_dij(
128
189
import doctest
129
190
130
191
doctest .testmod ()
192
+
193
+ print (flags )
194
+ count = 0
195
+ for flag in flags .values ():
196
+ if flag : count += 1
197
+ print (f'Branch coverage: { count / 24 } ' )
0 commit comments