GCC Code Coverage Report


Directory: src/
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 55.0% 2234 / 13 / 4075
Functions: 24.2% 37 / 0 / 153
Branches: 25.8% 2337 / 2986 / 12028

graph/spqr_tree.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include <algorithm>
4 #include <vector>
5 #include <array>
6 #include <span>
7 #include <utility>
8 #include <cassert>
9 #include <ranges>
10 #include <ostream>
11 #include <expected>
12 #include <type_traits>
13 #include <variant>
14
15 namespace wala {
16
17 122766 struct csr_index {
18 std::vector<int> bounds;
19 10061009 std::ranges::iota_view<int, int> indices(int i) const { return std::views::iota(bounds[i], bounds[i+1]); }
20
1/2
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 11873278 times.
21711184 template <std::ranges::contiguous_range R> auto slice(int i, R&& base) const {
21
1/2
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 6 taken 11873278 times.
21711184 return std::span(base).subspan(bounds[i], bounds[i+1] - bounds[i]);
22 }
23
1/4
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
✓ Branch 8 → 9 taken 40400 times.
✗ Branch 8 → 16 not taken.
40400 int num_rows() const { return bounds.empty() ? 0 : int(bounds.size()) - 1; }
24
1/4
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
✓ Branch 8 → 9 taken 40400 times.
✗ Branch 8 → 16 not taken.
40400 int num_entries() const { return bounds.empty() ? 0 : bounds.back(); }
25 };
26
27 348 template <typename T> struct csr : csr_index {
28 std::vector<T> dat;
29 7560116 std::span<T> operator [](int i) { return slice(i, dat); }
30 76538 std::span<const T> operator [](int i) const { return slice(i, dat); }
31 };
32
33 ✗ struct csr_index_builder {
34 std::vector<int> bounds;
35 ✗ csr_index_builder() = default;
36
1/2
✗ Branch 4 → 5 not taken.
✓ Branch 5 → 6 taken 121200 times.
121722 explicit csr_index_builder(int N) : bounds(N+1) {}
37 72260672 void count(int k) { bounds[k+1]++; }
38 ✗ csr_index finalize() && {
39 ✗ for (int i = 1; i < int(bounds.size()); i++) {
40 ✗ bounds[i] += bounds[i-1];
41 }
42 ✗ return {std::move(bounds)};
43 }
44 };
45
46 261 template <typename T> struct csr_builder {
47 csr_index idx;
48 std::vector<T> dat;
49 ✗ csr_builder() = default;
50 ✗ explicit csr_builder(csr_index idx_, std::vector<T>&& dat_buf = {}) : idx(std::move(idx_)), dat(std::move(dat_buf)) {
51 ✗ dat.resize(idx.num_entries());
52 ✗ if (!idx.bounds.empty()) {
53 ✗ idx.bounds.pop_back();
54 ✗ idx.bounds.insert(idx.bounds.begin(), 0);
55 }
56 }
57 121461 explicit csr_builder(csr_index_builder&& idx_builder, std::vector<T>&& dat_buf = {}) : idx{std::move(idx_builder.bounds)}, dat(std::move(dat_buf)) {
58 121461 int l = 0;
59
10/16
wala::csr_builder<wala::lowval_storted_skeleton_t::outedge_t>::csr_builder(wala::csr_index_builder&&, std::__debug::vector<wala::lowval_storted_skeleton_t::outedge_t, std::allocator<wala::lowval_storted_skeleton_t::outedge_t> >&&):
✓ Branch 31 → 12 taken 1858400 times.
✓ Branch 31 → 32 taken 80800 times.
wala::csr_builder<wala::lowval_storted_skeleton_t::outedge_t>::csr_builder(wala::csr_index_builder&&, std::vector<wala::lowval_storted_skeleton_t::outedge_t, std::allocator<wala::lowval_storted_skeleton_t::outedge_t> >&&):
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 6 taken 57548152 times.
✓ Branch 6 → 3 taken 57547978 times.
✓ Branch 6 → 7 taken 174 times.
✗ Branch 14 → 9 not taken.
✗ Branch 14 → 15 not taken.
wala::csr_builder<wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::edge_t>::csr_builder(wala::csr_index_builder&&, std::__debug::vector<wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::edge_t, std::allocator<wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::edge_t> >&&):
✓ Branch 31 → 12 taken 404000 times.
✓ Branch 31 → 32 taken 40400 times.
wala::csr_builder<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::edge_t>::csr_builder(wala::csr_index_builder&&, std::vector<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::edge_t, std::allocator<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::edge_t> >&&):
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 6 taken 14386951 times.
✓ Branch 6 → 3 taken 14386864 times.
✓ Branch 6 → 7 taken 87 times.
✗ Branch 14 → 9 not taken.
✗ Branch 14 → 15 not taken.
74318703 for (int i = 1; i < int(idx.bounds.size()); i++) {
60 74197242 idx.bounds[i] = std::exchange(l, l + idx.bounds[i]);
61 }
62
4/6
wala::csr_builder<wala::lowval_storted_skeleton_t::outedge_t>::csr_builder(wala::csr_index_builder&&, std::__debug::vector<wala::lowval_storted_skeleton_t::outedge_t, std::allocator<wala::lowval_storted_skeleton_t::outedge_t> >&&):
✓ Branch 35 → 36 taken 80800 times.
wala::csr_builder<wala::lowval_storted_skeleton_t::outedge_t>::csr_builder(wala::csr_index_builder&&, std::vector<wala::lowval_storted_skeleton_t::outedge_t, std::allocator<wala::lowval_storted_skeleton_t::outedge_t> >&&):
✓ Branch 7 → 8 taken 174 times.
✗ Branch 15 → 16 not taken.
wala::csr_builder<wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::edge_t>::csr_builder(wala::csr_index_builder&&, std::__debug::vector<wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::edge_t, std::allocator<wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::edge_t> >&&):
✓ Branch 35 → 36 taken 40400 times.
wala::csr_builder<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::edge_t>::csr_builder(wala::csr_index_builder&&, std::vector<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::edge_t, std::allocator<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::edge_t> >&&):
✓ Branch 7 → 8 taken 87 times.
✗ Branch 15 → 16 not taken.
121461 dat.resize(l);
63 121461 }
64 72260672 [[nodiscard]] T& push(int k) { return dat[idx.bounds[k+1]++]; }
65
0/4
wala::csr_builder<wala::lowval_storted_skeleton_t::outedge_t>::finalize() &&:
✗ Branch 9 → 10 not taken.
✗ Branch 9 → 11 not taken.
wala::csr_builder<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::edge_t>::finalize() &&:
✗ Branch 9 → 10 not taken.
✗ Branch 9 → 11 not taken.
242661 [[nodiscard]] csr<T> finalize() && { return { std::move(idx), std::move(dat) }; }
66 };
67
68 struct planar_spqr_tree;
69
70 struct spqr_tree {
71 // The SPQR tree of a graph is a canonical/"maximal" decomposition of the graph by 2-vertex cuts.
72 // The tree consists of nodes which are graphs of virtual edges (vedges), corresponding to nontrivial 2-vertex cuts.
73 // Virtual edges are paired, and we can reassemble the graph by gluing nodes at their matching vedges (and removing the vedge).
74 // Real edges are represented as special Q nodes which each contain exactly 1 real edge and exactly 1 vedge.
75 //
76 // Traditionally, the SPQR tree is defined for each biconnected component,
77 // but we will embed the SPQR decompositions inside the block-cut tree to get a (rooted) decomposition of the entire graph.
78 //
79 // As such, we will have a tree of "items", which consist of SPQR nodes, real vertices, and a special "forest root" item:
80 // - Each vertex will be a child of the topmost node which contains it (or the forest root).
81 // - Each block will be a subtree of nodes rooted at a Q edge, which is the child of one of its vertices.
82 //
83 // Item types:
84 // F - forest - a root node corresponding to the whole forest.
85 // V - vertex - not really a node, just there because they're mixed into the tree a la block/cut tree
86 // Q - real edge - has exactly 1 vedge and 1 real edge
87 // I - bridge - has exactly 1 vedge connecting to a bridge Q node
88 // O - self-loop - has exactly 1 vedge connecting to a self-loop Q node
89 // S - series - a cycle of >= 3 vedges; note that any 2 vertices of the cycle form a cut
90 // P - parallel - a parallel group of >= 3 vedges with the same endpoints
91 // R - rigid - a 3-vertex-connected component
92 //
93 // Q nodes occur in 2 places: block roots and block leaves.
94 // Block leaf Q's simply have no children.
95 // Block root Q's have 2 children: their vedge, and their deeper vertex (unless it's a self-loop).
96 //
97 // Degenerate blocks:
98 // - a block consisting of a self-loop is a Q node connected to an O node.
99 // - a block consisting of a bridge is a Q node connected to an I node.
100 // - a block consisting of exactly 2 parallel edges is represented by 2 glued Q nodes.
101 //
102 // We have several id spaces:
103 // - items are in preorder
104 // - node_verts (nv's) are each node's vertices, given in node order then s-t order.
105 // - node_edges (ne's) are each node's vedges, given in node order then a s-t order.
106 // - node_adj is each node_vert's incident vedges, given as 2 lists per nv: left/rightwards edges each in reverse s-t order.
107 // - original verts and original edges can be converted to items as vert_item / edge_item
108 //
109 // Children of a node will be sorted in s-t order.
110 // Specifically vertices are sorted, and edges are guaranteed to satisfy the strong "dominance" partial order:
111 // if a.nvs[0] <= b.nvs[0] and a.nvs[1] <= b.nvs[1], then a <= b. (In practice, we'll sort by midpoint.)
112 // Adjacency lists are sorted as "center-is-longest", which helps make laminar/bracket cases clean.
113 // (5->4) (5->3) (5->2) (5->1) *vertex 5* (5->9) (5->8) (5->7) (5->6)
114 // More specifically, node_adj contains two lists per vertex: 2*nv+0 is leftwards and 2*nv+1 is rightwards.
115 //
116 // All id's are item indices unless clearly nv/ne id's.
117 //
118 // In general, there are 2 ways to use the SPQR tree: the rooted view and the unrooted view.
119 // - The rooted view uses par / ch walks, and either treats the tree as 1 top-down big decomposition, or walks in paths up/down the tree with LCA-like queries.
120 // - The unrooted view mostly uses nv/ne/nd lists and works locally within a node/sometimes jumps between them.
121
122 enum class node_type : char {
123 F = 'F', V = 'V', Q = 'Q', I = 'I', O = 'O', S = 'S', P = 'P', R = 'R'
124 };
125 1696252 friend std::ostream& operator<<(std::ostream& o, node_type t) { return o << char(t); }
126
127 std::vector<int> vert_index;
128 std::vector<int> edge_index;
129 std::vector<bool> edge_flipped;
130
131 std::vector<int> par;
132 std::vector<int> subtree_end;
133 std::vector<node_type> types;
134 std::vector<int> orig_id;
135
136 csr<int> ch;
137 struct node_vert_t {
138 int node;
139 int vert;
140 };
141 std::vector<node_vert_t> node_verts;
142 csr_index node_nvs;
143 // The nv index of a vertex within its parent node
144 std::vector<int> vert_par_nv;
145 // TODO: Should we store a vert_nodes CSR?
146
147 struct node_edge_t {
148 int node;
149 int twin_ne;
150 // TODO: Should we store the twin node, the twin node type, and/or twin node type == Q?
151
152 std::array<int, 2> nvs;
153 };
154 std::vector<node_edge_t> node_edges;
155 csr_index node_nes;
156
157 struct node_adj_t {
158 int ne;
159 int dest_nv;
160 };
161 csr<node_adj_t> node_adj;
162
163
14/20
✗ Branch 13 → 14 not taken.
✓ Branch 13 → 15 taken 20 times.
✓ Branch 15 → 16 taken 20 times.
✗ Branch 16 → 17 not taken.
✓ Branch 16 → 18 taken 43 times.
✗ Branch 28 → 29 not taken.
✓ Branch 28 → 30 taken 21249127 times.
✓ Branch 30 → 19 taken 21249103 times.
✓ Branch 30 → 31 taken 24 times.
✗ Branch 38 → 39 not taken.
✓ Branch 38 → 40 taken 18 times.
✓ Branch 40 → 41 taken 18 times.
✗ Branch 59 → 60 not taken.
✓ Branch 59 → 61 taken 17314990 times.
✓ Branch 61 → 46 taken 17314972 times.
✓ Branch 61 → 66 taken 18 times.
✗ Branch 66 → 67 not taken.
✓ Branch 66 → 68 taken 17314972 times.
✓ Branch 68 → 62 taken 17314954 times.
✓ Branch 68 → 69 taken 18 times.
55884068 int size() const { return int(par.size()); }
164
165 // vert_order and edge_order are (prefixes of) permutations of vertex / edge ids;
166 // listed ids are visited first in the given order, then the rest in id order.
167 // Roots are the first unvisited vertices, and DFS children are explored in edge order.
168 // Use planar_spqr_tree::build to also compute the planar embeddings.
169 10187 static spqr_tree build(
170 int NV,
171 const std::vector<std::array<int, 2>>& edges,
172 bool ternarize = false,
173 std::span<const int> vert_order = {},
174 std::span<const int> edge_order = {}
175 ) {
176
2/2
✓ Branch 11 → 12 taken 63 times.
✓ Branch 17 → 18 taken 24 times.
10187 return build_impl<false>(NV, edges, ternarize, vert_order, edge_order);
177 }
178
179 protected:
180 template <bool with_planarity>
181 static std::conditional_t<with_planarity, planar_spqr_tree, spqr_tree> build_impl(
182 int NV,
183 const std::vector<std::array<int, 2>>& edges,
184 bool ternarize,
185 std::span<const int> vert_order,
186 std::span<const int> edge_order
187 );
188 };
189
190 12240 struct planar_embedding {
191 // We'll split our edges up into "quarter-edges", indexed according to
192 // 4 * edge + 2 * side + dir, where side is v0 vs v1, and dir is cw vs ccw
193 //
194 // 1 2
195 // v0 ---e--- v1
196 // 0 3
197 //
198 // We can think of a planar embedding as a collection of 3 involutions on quarter-edges:
199 // * qe <-> qe ^ 1 maps quarter edges to their opposite side around the endpoint vertex.
200 // * qe <-> qe ^ 3 maps quarter edges to their opposite side along the edge (around the face).
201 // * qe <-> rot_adj[qe] maps quarter edges to their facing pair.
202 // Walking around a vertex is alternating qe ^ 1 and rot_adj[qe], and walking around a face is qe ^ 3 and rot_adj[qe].
203 //
204 // Partial embeddings are represented with -1's in the rot_adj array.
205 // NB: Helpers do not support -1's. It is up to the user to not access these entries!
206 std::vector<int> rot_adj;
207 };
208
209 struct planar_spqr_tree : spqr_tree {
210 std::vector<bool> node_planar;
211 // Planarity adjacencies: ne_rot_adj is an involution of facing quarter-edges, indexed according to:
212 // ne_rot_adj[4 * node_edge + 2 * side + dir]
213 // Nonplanar nodes have all entries -1.
214 planar_embedding ne_embedding;
215
216 10100 static planar_spqr_tree build(
217 int NV,
218 const std::vector<std::array<int, 2>>& edges,
219 bool ternarize = false,
220 std::span<const int> vert_order = {},
221 std::span<const int> edge_order = {}
222 ) {
223 10100 return build_impl<true>(NV, edges, ternarize, vert_order, edge_order);
224 }
225 };
226
227 // Phase 1: build a DFS skeleton with outedges sorted by lowval
228 struct lowval_storted_skeleton_t {
229 std::vector<int> roots;
230 struct key_t { int lowval; bool is_tree; bool is_type_1; };
231 struct packed_key_t {
232 int v;
233 friend auto operator <=> (packed_key_t a, packed_key_t b) = default;
234
3/4
✓ Branch 29 → 30 taken 396887 times.
✗ Branch 29 → 31 not taken.
✓ Branch 363 → 364 taken 4823716 times.
✓ Branch 363 → 365 taken 7460490 times.
13258381 [[nodiscard]] bool is_new_block() const { return v < 6; }
235
2/4
✗ Branch 32 → 33 not taken.
✗ Branch 32 → 34 not taken.
✓ Branch 366 → 367 taken 4552608 times.
✓ Branch 366 → 368 taken 2907882 times.
7771754 [[nodiscard]] bool is_type_2() const { return v % 3 == 2; }
236 35484688 [[nodiscard]] key_t unpack(int cur_depth) const {
237
4/4
✓ Branch 2 → 3 taken 10441206 times.
✓ Branch 2 → 4 taken 21750122 times.
✓ Branch 4 → 5 taken 472536 times.
✓ Branch 4 → 6 taken 2820824 times.
35484688 int lowval = v / 3 - 2; if (lowval < 0) lowval = cur_depth + ~lowval;
238 35484688 int kind = v % 3;
239 35484688 bool is_tree = kind != 1;
240 35484688 bool is_type_1 = kind <= 1;
241 35484688 return {lowval, is_tree, is_type_1 };
242 }
243 };
244 struct outedge_t { int src, dest; int e_side; packed_key_t key; };
245 csr<outedge_t> outedges;
246
247 40487 static lowval_storted_skeleton_t build(
248 int NV,
249 const std::vector<std::array<int, 2>>& edges,
250 std::span<const int> vert_order,
251 std::span<const int> edge_order
252 ) {
253 // std::min is by reference, which breaks some optimizations
254
0/2
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
16136151 auto min = [](auto a, auto b) { return a < b ? a : b; };
255
256
1/2
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 87 times.
40487 int NE = int(edges.size());
257 40487 assert(int(vert_order.size()) <= NV);
258 40487 assert(int(edge_order.size()) <= NE);
259
260 // Calls f(i) for i in order, then for the remaining i in [0, n) in increasing order.
261 40661 auto for_each_in_order = [] [[gnu::always_inline]] (int n, std::span<const int> order, auto f) -> void {
262
6/16
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 137 → 72 taken 1010584 times.
✓ Branch 137 → 138 taken 40400 times.
✓ Branch 894 → 395 taken 201176 times.
✓ Branch 894 → 895 taken 40400 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22 → 19 not taken.
✓ Branch 22 → 23 taken 87 times.
✗ Branch 60 → 41 not taken.
✗ Branch 60 → 61 not taken.
✗ Branch 91 → 49 not taken.
✓ Branch 91 → 92 taken 87 times.
✗ Branch 274 → 141 not taken.
✗ Branch 274 → 275 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}) const:
✗ Branch 137 → 4 not taken.
✗ Branch 137 → 138 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}) const:
✗ Branch 23 → 4 not taken.
✗ Branch 23 → 24 not taken.
5008814 for (int i : order) f(i);
263
7/16
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 146 → 147 taken 25776 times.
✓ Branch 146 → 375 taken 14624 times.
✓ Branch 903 → 904 taken 25464 times.
✓ Branch 903 → 2497 taken 14936 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 23 → 24 taken 84 times.
✓ Branch 23 → 46 taken 3 times.
✗ Branch 62 → 63 not taken.
✗ Branch 62 → 64 not taken.
✓ Branch 92 → 93 taken 87 times.
✗ Branch 92 → 234 not taken.
✗ Branch 276 → 277 not taken.
✗ Branch 276 → 278 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}) const:
✗ Branch 139 → 140 not taken.
✗ Branch 139 → 141 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}) const:
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
80974 if (int(order.size()) == n) return;
264
6/16
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 154 → 202 taken 14072 times.
✓ Branch 154 → 203 taken 11704 times.
✓ Branch 911 → 1414 taken 15016 times.
✓ Branch 911 → 1415 taken 10448 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 24 → 28 taken 84 times.
✗ Branch 24 → 29 not taken.
✗ Branch 65 → 66 not taken.
✗ Branch 65 → 77 not taken.
✓ Branch 93 → 136 taken 87 times.
✗ Branch 93 → 137 not taken.
✗ Branch 279 → 280 not taken.
✗ Branch 279 → 405 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}) const:
✗ Branch 142 → 143 not taken.
✗ Branch 142 → 268 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}) const:
✗ Branch 28 → 29 not taken.
✗ Branch 28 → 40 not taken.
51411 if (order.empty()) {
265
8/16
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 202 → 155 taken 699136 times.
✓ Branch 202 → 375 taken 14072 times.
✓ Branch 1414 → 912 taken 150160 times.
✓ Branch 1414 → 2497 taken 15016 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 28 → 25 taken 16095664 times.
✓ Branch 28 → 46 taken 84 times.
✗ Branch 76 → 67 not taken.
✗ Branch 76 → 130 not taken.
✓ Branch 136 → 94 taken 14386864 times.
✓ Branch 136 → 234 taken 87 times.
✗ Branch 404 → 281 not taken.
✗ Branch 404 → 686 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}) const:
✗ Branch 267 → 144 not taken.
✗ Branch 267 → 549 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}) const:
✗ Branch 39 → 30 not taken.
✗ Branch 39 → 93 not taken.
31361083 for (int i = 0; i < n; i++) f(i);
266
4/16
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 209 → 261 taken 456 times.
✓ Branch 209 → 262 taken 11248 times.
✓ Branch 1421 → 1928 taken 1232 times.
✓ Branch 1421 → 1929 taken 9216 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 29 → 34 not taken.
✗ Branch 29 → 35 not taken.
✗ Branch 78 → 79 not taken.
✗ Branch 78 → 93 not taken.
✗ Branch 137 → 182 not taken.
✗ Branch 137 → 183 not taken.
✗ Branch 406 → 407 not taken.
✗ Branch 406 → 535 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}) const:
✗ Branch 269 → 270 not taken.
✗ Branch 269 → 398 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}) const:
✗ Branch 41 → 42 not taken.
✗ Branch 41 → 56 not taken.
22152 } else if (order.size() == 1) {
267
4/16
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 261 → 210 taken 13936 times.
✓ Branch 261 → 375 taken 456 times.
✓ Branch 1928 → 1422 taken 12320 times.
✓ Branch 1928 → 2497 taken 1232 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 34 → 30 not taken.
✗ Branch 34 → 46 not taken.
✗ Branch 92 → 80 not taken.
✗ Branch 92 → 130 not taken.
✗ Branch 182 → 138 not taken.
✗ Branch 182 → 234 not taken.
✗ Branch 534 → 408 not taken.
✗ Branch 534 → 686 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}) const:
✗ Branch 397 → 271 not taken.
✗ Branch 397 → 549 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}) const:
✗ Branch 55 → 43 not taken.
✗ Branch 55 → 93 not taken.
27944 for (int i = 0; i < n; i++) {
268
4/16
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 213 → 214 taken 13480 times.
✓ Branch 213 → 260 taken 456 times.
✓ Branch 1425 → 1426 taken 11088 times.
✓ Branch 1425 → 1927 taken 1232 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 30 → 31 not taken.
✗ Branch 30 → 33 not taken.
✗ Branch 81 → 82 not taken.
✗ Branch 81 → 91 not taken.
✗ Branch 138 → 139 not taken.
✗ Branch 138 → 181 not taken.
✗ Branch 409 → 410 not taken.
✗ Branch 409 → 533 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}) const:
✗ Branch 272 → 273 not taken.
✗ Branch 272 → 396 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}) const:
✗ Branch 44 → 45 not taken.
✗ Branch 44 → 54 not taken.
50824 if (i != order[0]) f(i);
269 }
270 } else {
271
2/8
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 264 → 265 taken 11248 times.
✓ Branch 1931 → 1932 taken 9216 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 35 → 36 not taken.
✗ Branch 95 → 96 not taken.
✗ Branch 183 → 184 not taken.
✗ Branch 537 → 538 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}) const:
✗ Branch 400 → 401 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}) const:
✗ Branch 58 → 59 not taken.
20464 std::vector<bool> listed(n);
272
4/16
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 296 → 272 taken 310744 times.
✓ Branch 296 → 297 taken 11248 times.
✓ Branch 1963 → 1939 taken 50584 times.
✓ Branch 1963 → 1964 taken 9216 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 38 → 37 not taken.
✗ Branch 38 → 43 not taken.
✗ Branch 112 → 99 not taken.
✗ Branch 112 → 113 not taken.
✗ Branch 186 → 185 not taken.
✗ Branch 186 → 231 not taken.
✗ Branch 554 → 541 not taken.
✗ Branch 554 → 555 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}) const:
✗ Branch 417 → 404 not taken.
✗ Branch 417 → 418 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}) const:
✗ Branch 75 → 62 not taken.
✗ Branch 75 → 76 not taken.
1124912 for (int i : order) listed[i] = true;
273
4/16
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 352 → 299 taken 607544 times.
✓ Branch 352 → 353 taken 11248 times.
✓ Branch 2474 → 1966 taken 92160 times.
✓ Branch 2474 → 2475 taken 9216 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 43 → 39 not taken.
✗ Branch 43 → 44 not taken.
✗ Branch 127 → 114 not taken.
✗ Branch 127 → 128 not taken.
✗ Branch 231 → 187 not taken.
✗ Branch 231 → 232 not taken.
✗ Branch 683 → 556 not taken.
✗ Branch 683 → 684 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}) const:
✗ Branch 546 → 419 not taken.
✗ Branch 546 → 547 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}) const:
✗ Branch 90 → 77 not taken.
✗ Branch 90 → 91 not taken.
720168 for (int i = 0; i < n; i++) {
274
4/16
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 304 → 305 taken 296800 times.
✓ Branch 304 → 351 taken 310744 times.
✓ Branch 1971 → 1972 taken 41576 times.
✓ Branch 1971 → 2473 taken 50584 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 39 → 40 not taken.
✗ Branch 39 → 42 not taken.
✗ Branch 116 → 117 not taken.
✗ Branch 116 → 126 not taken.
✗ Branch 187 → 188 not taken.
✗ Branch 187 → 230 not taken.
✗ Branch 558 → 559 not taken.
✗ Branch 558 → 682 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}) const:
✗ Branch 421 → 422 not taken.
✗ Branch 421 → 545 not taken.
void wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, std::span<int const, 18446744073709551615ul>, auto:1)#1}::operator()<wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}>(int, std::span<int const, 18446744073709551615ul>, wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}) const:
✗ Branch 79 → 80 not taken.
✗ Branch 79 → 89 not taken.
1038080 if (!listed[i]) f(i);
275 }
276 20464 }
277 };
278
279
2/3
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 17 → 18 taken 40400 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 8 → 9 taken 87 times.
✗ Branch 9 → 10 not taken.
40487 std::vector<int> roots; roots.reserve(NV);
280 40487 csr<outedge_t> outedges;
281 40487 {
282
3/4
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 23 → 24 taken 40400 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9 → 10 taken 87 times.
✓ Branch 10 → 11 taken 87 times.
✗ Branch 12 → 13 not taken.
40487 std::vector<int> depth(NV, -1);
283 // 1a: build a normal adjacency list for the initial lowval dfs
284 40487 struct edge_t { int dest; int e; };
285
2/3
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 27 → 28 taken 40400 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 10 → 11 taken 87 times.
✗ Branch 14 → 15 not taken.
40487 csr_index_builder adj_idx_builder(NV);
286
6/8
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 54 → 32 taken 2020000 times.
✓ Branch 54 → 55 taken 40400 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 12 → 13 taken 16095640 times.
✓ Branch 12 → 14 taken 24 times.
✓ Branch 15 → 12 taken 16095664 times.
✓ Branch 15 → 16 taken 87 times.
✗ Branch 33 → 17 not taken.
✗ Branch 33 → 34 not taken.
18156151 for (auto [u, v] : edges) {
287
2/2
✓ Branch 12 → 13 taken 16095640 times.
✓ Branch 12 → 14 taken 24 times.
18115664 adj_idx_builder.count(u);
288
4/6
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 48 → 49 taken 1818040 times.
✓ Branch 48 → 52 taken 201960 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 12 → 13 taken 16095640 times.
✓ Branch 12 → 14 taken 24 times.
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
18115664 if (u != v) adj_idx_builder.count(v);
289 40400 }
290
2/3
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 63 → 64 taken 40400 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 16 → 17 taken 87 times.
✗ Branch 37 → 38 not taken.
40487 csr_builder<edge_t> adj_builder(std::move(adj_idx_builder));
291 40487 for_each_in_order(NE, edge_order, [&] [[gnu::always_inline]] (int e) -> void {
292
2/8
✗ Branch 19 → 20 not taken.
✗ Branch 19 → 21 not taken.
✓ Branch 25 → 26 taken 16095640 times.
✓ Branch 25 → 27 taken 24 times.
✗ Branch 31 → 32 not taken.
✗ Branch 31 → 33 not taken.
✗ Branch 40 → 41 not taken.
✗ Branch 40 → 42 not taken.
22155664 auto [u, v] = edges[e];
293
2/8
✗ Branch 19 → 20 not taken.
✗ Branch 19 → 21 not taken.
✓ Branch 25 → 26 taken 16095640 times.
✓ Branch 25 → 27 taken 24 times.
✗ Branch 31 → 32 not taken.
✗ Branch 31 → 33 not taken.
✗ Branch 40 → 41 not taken.
✗ Branch 40 → 42 not taken.
18115664 adj_builder.push(u) = {v, 2 * e + 0};
294
10/34
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 109 → 110 taken 908608 times.
✓ Branch 109 → 122 taken 101976 times.
✓ Branch 187 → 188 taken 629184 times.
✓ Branch 187 → 200 taken 69952 times.
✓ Branch 246 → 247 taken 12248 times.
✓ Branch 246 → 259 taken 1232 times.
✓ Branch 337 → 338 taken 268000 times.
✓ Branch 337 → 350 taken 28800 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 19 → 20 not taken.
✗ Branch 19 → 21 not taken.
✓ Branch 25 → 26 taken 16095640 times.
✓ Branch 25 → 27 taken 24 times.
✗ Branch 31 → 32 not taken.
✗ Branch 31 → 33 not taken.
✗ Branch 40 → 41 not taken.
✗ Branch 40 → 42 not taken.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}::operator()(int) const:
✗ Branch 6 → 7 not taken.
✗ Branch 6 → 9 not taken.
✗ Branch 10 → 11 not taken.
✗ Branch 10 → 13 not taken.
✗ Branch 34 → 35 not taken.
✗ Branch 34 → 37 not taken.
✗ Branch 47 → 48 not taken.
✗ Branch 47 → 50 not taken.
✗ Branch 49 → 50 not taken.
✗ Branch 49 → 52 not taken.
✗ Branch 71 → 72 not taken.
✗ Branch 71 → 74 not taken.
✗ Branch 84 → 85 not taken.
✗ Branch 84 → 87 not taken.
✗ Branch 86 → 87 not taken.
✗ Branch 86 → 89 not taken.
✗ Branch 121 → 122 not taken.
✗ Branch 121 → 124 not taken.
18115664 if (u != v) adj_builder.push(v) = {u, 2 * e + 1};
295 ✗ });
296
1/1
✓ Branch 46 → 47 taken 87 times.
40487 auto adj = std::move(adj_builder).finalize();
297
298
2/3
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 378 → 383 taken 40400 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 46 → 47 taken 87 times.
✗ Branch 137 → 138 not taken.
40487 std::vector<outedge_t> all_outedges; all_outedges.reserve(NE);
299 // Return the 2 lowvals from this subtree
300 40487 struct dfs_stack_t {
301 int cur;
302 int prv_e;
303 std::array<int, 2> lowvals;
304 int ch_idx;
305 int ch_end;
306 };
307
2/3
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 384 → 385 taken 40400 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 47 → 48 taken 87 times.
✗ Branch 138 → 139 not taken.
40487 std::vector<dfs_stack_t> stk; stk.reserve(NV);
308 14427351 auto push_vert = [&] [[gnu::always_inline]] (int cur, int prv_e) -> void {
309 16577401 int d = int(stk.size());
310
1/4
✗ Branch 53 → 54 not taken.
✓ Branch 98 → 99 taken 1786537 times.
✗ Branch 143 → 144 not taken.
✗ Branch 192 → 193 not taken.
2190537 depth[cur] = d;
311
1/24
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 53 → 54 not taken.
✓ Branch 98 → 99 taken 1786537 times.
✗ Branch 143 → 144 not taken.
✗ Branch 192 → 193 not taken.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, int)#1}::operator()(int, int) const:
✗ Branch 6 → 7 not taken.
✗ Branch 9 → 10 not taken.
✗ Branch 13 → 14 not taken.
✗ Branch 20 → 21 not taken.
✗ Branch 77 → 78 not taken.
✗ Branch 81 → 82 not taken.
✗ Branch 150 → 151 not taken.
✗ Branch 151 → 152 not taken.
✗ Branch 218 → 219 not taken.
✗ Branch 219 → 220 not taken.
✗ Branch 280 → 281 not taken.
✗ Branch 288 → 289 not taken.
✗ Branch 348 → 349 not taken.
✗ Branch 356 → 357 not taken.
✗ Branch 417 → 418 not taken.
✗ Branch 429 → 430 not taken.
✗ Branch 485 → 486 not taken.
✗ Branch 497 → 498 not taken.
✗ Branch 566 → 567 not taken.
✗ Branch 634 → 635 not taken.
2190537 stk.push_back({cur, prv_e, {d, d}, adj.bounds[cur], adj.bounds[cur+1]});
312 14790951 };
313 16136151 auto finish_edge = [&] [[gnu::always_inline]] (bool is_tree, std::array<int, 2> n_lowvals) -> void {
314 30715991 int d = int(stk.size()) - 1;
315
1/8
✗ Branch 60 → 61 not taken.
✗ Branch 60 → 62 not taken.
✗ Branch 105 → 106 not taken.
✓ Branch 105 → 107 taken 12600327 times.
✗ Branch 150 → 151 not taken.
✗ Branch 150 → 152 not taken.
✗ Branch 199 → 200 not taken.
✗ Branch 199 → 201 not taken.
14620327 auto& s = stk.back();
316 18115664 int cur = s.cur;
317 14620327 assert(s.ch_idx < s.ch_end);
318
2/8
✗ Branch 62 → 63 not taken.
✗ Branch 62 → 64 not taken.
✓ Branch 107 → 108 taken 5220579 times.
✓ Branch 107 → 109 taken 7379748 times.
✗ Branch 152 → 153 not taken.
✗ Branch 152 → 154 not taken.
✗ Branch 201 → 202 not taken.
✗ Branch 201 → 203 not taken.
14620327 auto [nxt, e] = adj.dat[s.ch_idx];
319 18115664 auto& lowvals = s.lowvals;
320 18115664 s.ch_idx++;
321
322 18115664 {
323 // Extra bit is 0 for type-1 children, 1 for backedges, 2 for children with lowval2
324 // Bridges have lowval -2 (kind 0), and components loops have lowval -1 (components are kind 0, loops are kind 1)
325 // We group all backedges together/last to avoid breaking a straight-line graph embedding
326 20135664 int lowval = n_lowvals[0];
327
19/72
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 534 → 535 taken 40280 times.
✓ Branch 534 → 536 taken 172104 times.
✓ Branch 783 → 784 taken 127456 times.
✓ Branch 783 → 785 taken 933624 times.
✓ Branch 1056 → 1057 taken 24352 times.
✓ Branch 1056 → 1058 taken 101216 times.
✓ Branch 1316 → 1317 taken 74296 times.
✓ Branch 1316 → 1318 taken 545776 times.
✓ Branch 1570 → 1571 taken 200 times.
✗ Branch 1570 → 1572 not taken.
✓ Branch 1830 → 1831 taken 24 times.
✓ Branch 1830 → 1832 taken 32 times.
✓ Branch 2116 → 2117 taken 328 times.
✓ Branch 2116 → 2118 taken 48 times.
✓ Branch 2376 → 2377 taken 184 times.
✓ Branch 2376 → 2378 taken 80 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 62 → 63 not taken.
✗ Branch 62 → 64 not taken.
✗ Branch 82 → 83 not taken.
✗ Branch 82 → 84 not taken.
✓ Branch 107 → 108 taken 5220579 times.
✓ Branch 107 → 109 taken 7379748 times.
✓ Branch 127 → 128 taken 24 times.
✓ Branch 127 → 129 taken 3495313 times.
✗ Branch 152 → 153 not taken.
✗ Branch 152 → 154 not taken.
✗ Branch 172 → 173 not taken.
✗ Branch 172 → 174 not taken.
✗ Branch 201 → 202 not taken.
✗ Branch 201 → 203 not taken.
✗ Branch 221 → 222 not taken.
✗ Branch 221 → 223 not taken.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(bool, std::array<int, 2ul>)#1}::operator()(bool, std::array<int, 2ul>) const:
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
✗ Branch 29 → 30 not taken.
✗ Branch 29 → 31 not taken.
✗ Branch 31 → 32 not taken.
✗ Branch 31 → 33 not taken.
✗ Branch 33 → 34 not taken.
✗ Branch 33 → 35 not taken.
✗ Branch 88 → 89 not taken.
✗ Branch 88 → 90 not taken.
✗ Branch 92 → 93 not taken.
✗ Branch 92 → 94 not taken.
✗ Branch 170 → 171 not taken.
✗ Branch 170 → 172 not taken.
✗ Branch 171 → 172 not taken.
✗ Branch 171 → 173 not taken.
✗ Branch 229 → 230 not taken.
✗ Branch 229 → 231 not taken.
✗ Branch 230 → 231 not taken.
✗ Branch 230 → 232 not taken.
✗ Branch 300 → 301 not taken.
✗ Branch 300 → 302 not taken.
✗ Branch 308 → 309 not taken.
✗ Branch 308 → 310 not taken.
✗ Branch 359 → 360 not taken.
✗ Branch 359 → 361 not taken.
✗ Branch 367 → 368 not taken.
✗ Branch 367 → 369 not taken.
✗ Branch 437 → 438 not taken.
✗ Branch 437 → 439 not taken.
✗ Branch 449 → 450 not taken.
✗ Branch 449 → 451 not taken.
✗ Branch 496 → 497 not taken.
✗ Branch 496 → 498 not taken.
✗ Branch 508 → 509 not taken.
✗ Branch 508 → 510 not taken.
✗ Branch 586 → 587 not taken.
✗ Branch 586 → 588 not taken.
✗ Branch 645 → 646 not taken.
✗ Branch 645 → 647 not taken.
18115664 if (lowval >= d) lowval = ~(lowval - d);
328
13/64
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 541 → 542 taken 72616 times.
✓ Branch 541 → 543 taken 139768 times.
✓ Branch 790 → 791 taken 1061080 times.
✗ Branch 790 → 792 not taken.
✓ Branch 1063 → 1064 taken 43848 times.
✓ Branch 1063 → 1065 taken 81720 times.
✓ Branch 1323 → 1324 taken 620072 times.
✗ Branch 1323 → 1325 not taken.
✓ Branch 1577 → 1578 taken 200 times.
✗ Branch 1577 → 1579 not taken.
✓ Branch 1837 → 1838 taken 56 times.
✗ Branch 1837 → 1839 not taken.
✓ Branch 2123 → 2124 taken 352 times.
✓ Branch 2123 → 2125 taken 24 times.
✓ Branch 2383 → 2384 taken 264 times.
✗ Branch 2383 → 2385 not taken.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 64 → 65 not taken.
✗ Branch 64 → 66 not taken.
✓ Branch 109 → 110 taken 9407463 times.
✓ Branch 109 → 111 taken 3192864 times.
✗ Branch 154 → 155 not taken.
✗ Branch 154 → 156 not taken.
✗ Branch 203 → 204 not taken.
✗ Branch 203 → 205 not taken.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(bool, std::array<int, 2ul>)#1}::operator()(bool, std::array<int, 2ul>) const:
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
✗ Branch 32 → 33 not taken.
✗ Branch 32 → 34 not taken.
✗ Branch 34 → 35 not taken.
✗ Branch 34 → 36 not taken.
✗ Branch 36 → 37 not taken.
✗ Branch 36 → 38 not taken.
✗ Branch 91 → 92 not taken.
✗ Branch 91 → 93 not taken.
✗ Branch 95 → 96 not taken.
✗ Branch 95 → 97 not taken.
✗ Branch 173 → 174 not taken.
✗ Branch 173 → 175 not taken.
✗ Branch 174 → 175 not taken.
✗ Branch 174 → 176 not taken.
✗ Branch 232 → 233 not taken.
✗ Branch 232 → 234 not taken.
✗ Branch 233 → 234 not taken.
✗ Branch 233 → 235 not taken.
✗ Branch 303 → 304 not taken.
✗ Branch 303 → 305 not taken.
✗ Branch 311 → 312 not taken.
✗ Branch 311 → 313 not taken.
✗ Branch 362 → 363 not taken.
✗ Branch 362 → 364 not taken.
✗ Branch 370 → 371 not taken.
✗ Branch 370 → 372 not taken.
✗ Branch 440 → 441 not taken.
✗ Branch 440 → 442 not taken.
✗ Branch 452 → 453 not taken.
✗ Branch 452 → 454 not taken.
✗ Branch 499 → 500 not taken.
✗ Branch 499 → 501 not taken.
✗ Branch 511 → 512 not taken.
✗ Branch 511 → 513 not taken.
✗ Branch 589 → 590 not taken.
✗ Branch 589 → 591 not taken.
✗ Branch 648 → 649 not taken.
✗ Branch 648 → 650 not taken.
16640327 int kind = 2 * (n_lowvals[1] < d) + !is_tree;
329
2/28
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 66 → 67 not taken.
✗ Branch 84 → 85 not taken.
✓ Branch 111 → 112 taken 12600327 times.
✓ Branch 129 → 130 taken 3495337 times.
✗ Branch 156 → 157 not taken.
✗ Branch 174 → 175 not taken.
✗ Branch 205 → 206 not taken.
✗ Branch 223 → 224 not taken.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(bool, std::array<int, 2ul>)#1}::operator()(bool, std::array<int, 2ul>) const:
✗ Branch 14 → 15 not taken.
✗ Branch 35 → 36 not taken.
✗ Branch 37 → 38 not taken.
✗ Branch 39 → 40 not taken.
✗ Branch 94 → 95 not taken.
✗ Branch 98 → 99 not taken.
✗ Branch 176 → 177 not taken.
✗ Branch 177 → 178 not taken.
✗ Branch 235 → 236 not taken.
✗ Branch 236 → 237 not taken.
✗ Branch 306 → 307 not taken.
✗ Branch 314 → 315 not taken.
✗ Branch 365 → 366 not taken.
✗ Branch 373 → 374 not taken.
✗ Branch 443 → 444 not taken.
✗ Branch 455 → 456 not taken.
✗ Branch 502 → 503 not taken.
✗ Branch 514 → 515 not taken.
✗ Branch 592 → 593 not taken.
✗ Branch 651 → 652 not taken.
20135664 all_outedges.push_back({cur, nxt, e, packed_key_t{3 * (lowval + 2) + kind}});
330 }
331
332 // Keep the 2 distinct mins
333
19/72
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 561 → 562 taken 140120 times.
✓ Branch 561 → 586 taken 72264 times.
✓ Branch 811 → 812 taken 138520 times.
✓ Branch 811 → 837 taken 922560 times.
✓ Branch 1084 → 1085 taken 81968 times.
✓ Branch 1084 → 1110 taken 43600 times.
✓ Branch 1344 → 1345 taken 81400 times.
✓ Branch 1344 → 1370 taken 538672 times.
✗ Branch 1598 → 1599 not taken.
✓ Branch 1598 → 1624 taken 200 times.
✓ Branch 1858 → 1859 taken 32 times.
✓ Branch 1858 → 1884 taken 24 times.
✓ Branch 2144 → 2145 taken 24 times.
✓ Branch 2144 → 2170 taken 352 times.
✓ Branch 2404 → 2405 taken 48 times.
✓ Branch 2404 → 2430 taken 216 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 67 → 68 not taken.
✗ Branch 67 → 69 not taken.
✗ Branch 85 → 86 not taken.
✗ Branch 85 → 87 not taken.
✓ Branch 112 → 113 taken 6372510 times.
✓ Branch 112 → 114 taken 6227817 times.
✓ Branch 130 → 131 taken 1913398 times.
✓ Branch 130 → 132 taken 1581939 times.
✗ Branch 157 → 158 not taken.
✗ Branch 157 → 159 not taken.
✗ Branch 175 → 176 not taken.
✗ Branch 175 → 177 not taken.
✗ Branch 206 → 207 not taken.
✗ Branch 206 → 208 not taken.
✗ Branch 224 → 225 not taken.
✗ Branch 224 → 226 not taken.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(bool, std::array<int, 2ul>)#1}::operator()(bool, std::array<int, 2ul>) const:
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 23 not taken.
✗ Branch 38 → 39 not taken.
✗ Branch 38 → 44 not taken.
✗ Branch 40 → 41 not taken.
✗ Branch 40 → 46 not taken.
✗ Branch 42 → 43 not taken.
✗ Branch 42 → 48 not taken.
✗ Branch 97 → 98 not taken.
✗ Branch 97 → 103 not taken.
✗ Branch 101 → 102 not taken.
✗ Branch 101 → 107 not taken.
✗ Branch 179 → 180 not taken.
✗ Branch 179 → 185 not taken.
✗ Branch 180 → 181 not taken.
✗ Branch 180 → 186 not taken.
✗ Branch 238 → 239 not taken.
✗ Branch 238 → 244 not taken.
✗ Branch 239 → 240 not taken.
✗ Branch 239 → 245 not taken.
✗ Branch 309 → 310 not taken.
✗ Branch 309 → 315 not taken.
✗ Branch 317 → 318 not taken.
✗ Branch 317 → 323 not taken.
✗ Branch 368 → 369 not taken.
✗ Branch 368 → 374 not taken.
✗ Branch 376 → 377 not taken.
✗ Branch 376 → 382 not taken.
✗ Branch 446 → 447 not taken.
✗ Branch 446 → 452 not taken.
✗ Branch 458 → 459 not taken.
✗ Branch 458 → 464 not taken.
✗ Branch 505 → 506 not taken.
✗ Branch 505 → 511 not taken.
✗ Branch 517 → 518 not taken.
✗ Branch 517 → 523 not taken.
✗ Branch 595 → 596 not taken.
✗ Branch 595 → 601 not taken.
✗ Branch 654 → 655 not taken.
✗ Branch 654 → 660 not taken.
23482000 if (n_lowvals[0] < lowvals[0]) lowvals = {n_lowvals[0], min(n_lowvals[1], lowvals[0])};
334
19/72
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 599 → 600 taken 50312 times.
✓ Branch 599 → 605 taken 21952 times.
✓ Branch 851 → 852 taken 218560 times.
✓ Branch 851 → 857 taken 704000 times.
✓ Branch 1124 → 1125 taken 29968 times.
✓ Branch 1124 → 1130 taken 13632 times.
✓ Branch 1384 → 1385 taken 127072 times.
✓ Branch 1384 → 1390 taken 411600 times.
✓ Branch 1638 → 1639 taken 32 times.
✓ Branch 1638 → 1644 taken 168 times.
✓ Branch 1898 → 1899 taken 24 times.
✗ Branch 1898 → 1904 not taken.
✓ Branch 2184 → 2185 taken 32 times.
✓ Branch 2184 → 2190 taken 320 times.
✓ Branch 2444 → 2445 taken 184 times.
✓ Branch 2444 → 2450 taken 32 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 69 → 70 not taken.
✗ Branch 69 → 71 not taken.
✗ Branch 87 → 88 not taken.
✗ Branch 87 → 89 not taken.
✓ Branch 114 → 115 taken 5797609 times.
✓ Branch 114 → 116 taken 430208 times.
✓ Branch 132 → 133 taken 1527061 times.
✓ Branch 132 → 134 taken 54878 times.
✗ Branch 159 → 160 not taken.
✗ Branch 159 → 161 not taken.
✗ Branch 177 → 178 not taken.
✗ Branch 177 → 179 not taken.
✗ Branch 208 → 209 not taken.
✗ Branch 208 → 210 not taken.
✗ Branch 226 → 227 not taken.
✗ Branch 226 → 228 not taken.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(bool, std::array<int, 2ul>)#1}::operator()(bool, std::array<int, 2ul>) const:
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 28 not taken.
✗ Branch 46 → 47 not taken.
✗ Branch 46 → 49 not taken.
✗ Branch 48 → 49 not taken.
✗ Branch 48 → 51 not taken.
✗ Branch 50 → 51 not taken.
✗ Branch 50 → 53 not taken.
✗ Branch 105 → 106 not taken.
✗ Branch 105 → 108 not taken.
✗ Branch 109 → 110 not taken.
✗ Branch 109 → 112 not taken.
✗ Branch 187 → 188 not taken.
✗ Branch 187 → 190 not taken.
✗ Branch 188 → 189 not taken.
✗ Branch 188 → 191 not taken.
✗ Branch 246 → 247 not taken.
✗ Branch 246 → 249 not taken.
✗ Branch 247 → 248 not taken.
✗ Branch 247 → 250 not taken.
✗ Branch 317 → 318 not taken.
✗ Branch 317 → 320 not taken.
✗ Branch 325 → 326 not taken.
✗ Branch 325 → 328 not taken.
✗ Branch 376 → 377 not taken.
✗ Branch 376 → 379 not taken.
✗ Branch 384 → 385 not taken.
✗ Branch 384 → 387 not taken.
✗ Branch 454 → 455 not taken.
✗ Branch 454 → 457 not taken.
✗ Branch 466 → 467 not taken.
✗ Branch 466 → 469 not taken.
✗ Branch 513 → 514 not taken.
✗ Branch 513 → 516 not taken.
✗ Branch 525 → 526 not taken.
✗ Branch 525 → 528 not taken.
✗ Branch 603 → 604 not taken.
✗ Branch 603 → 606 not taken.
✗ Branch 662 → 663 not taken.
✗ Branch 662 → 665 not taken.
24601754 else lowvals[1] = min(lowvals[1], n_lowvals[0] == lowvals[0] ? n_lowvals[1] : n_lowvals[0]);
335 40487 };
336 32231791 auto start_edge = [&] [[gnu::always_inline]] () -> void {
337 68220648 int d = int(stk.size()) - 1;
338
1/8
✗ Branch 74 → 75 not taken.
✗ Branch 74 → 76 not taken.
✗ Branch 119 → 120 not taken.
✓ Branch 119 → 121 taken 32191304 times.
✗ Branch 164 → 165 not taken.
✗ Branch 164 → 166 not taken.
✗ Branch 213 → 214 not taken.
✗ Branch 213 → 215 not taken.
36029344 auto& s = stk.back();
339 36029344 assert(s.ch_idx < s.ch_end);
340
2/8
✗ Branch 76 → 77 not taken.
✗ Branch 76 → 78 not taken.
✓ Branch 121 → 122 taken 19590977 times.
✓ Branch 121 → 123 taken 12600327 times.
✗ Branch 166 → 167 not taken.
✗ Branch 166 → 168 not taken.
✗ Branch 215 → 216 not taken.
✗ Branch 215 → 217 not taken.
36029344 auto [nxt, e] = adj.dat[s.ch_idx];
341
342
20/92
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 663 → 664 taken 2207088 times.
✓ Branch 663 → 671 taken 212384 times.
✓ Branch 670 → 671 taken 933624 times.
✓ Branch 670 → 678 taken 1273464 times.
✓ Branch 1191 → 1192 taken 1291416 times.
✓ Branch 1191 → 1200 taken 125568 times.
✓ Branch 1199 → 1200 taken 545776 times.
✓ Branch 1199 → 1207 taken 745640 times.
✓ Branch 1705 → 1706 taken 288 times.
✓ Branch 1705 → 1714 taken 200 times.
✓ Branch 1713 → 1714 taken 32 times.
✓ Branch 1713 → 1721 taken 256 times.
✓ Branch 2251 → 2252 taken 720 times.
✓ Branch 2251 → 2260 taken 376 times.
✓ Branch 2259 → 2260 taken 80 times.
✓ Branch 2259 → 2267 taken 640 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 76 → 77 not taken.
✗ Branch 76 → 78 not taken.
✗ Branch 77 → 78 not taken.
✗ Branch 77 → 79 not taken.
✓ Branch 121 → 122 taken 19590977 times.
✓ Branch 121 → 123 taken 12600327 times.
✓ Branch 122 → 123 taken 3495313 times.
✓ Branch 122 → 124 taken 16095664 times.
✗ Branch 166 → 167 not taken.
✗ Branch 166 → 168 not taken.
✗ Branch 167 → 168 not taken.
✗ Branch 167 → 169 not taken.
✗ Branch 215 → 216 not taken.
✗ Branch 215 → 217 not taken.
✗ Branch 216 → 217 not taken.
✗ Branch 216 → 218 not taken.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#1}::operator()() const:
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 10 not taken.
✗ Branch 9 → 10 not taken.
✗ Branch 9 → 11 not taken.
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
✗ Branch 64 → 65 not taken.
✗ Branch 64 → 67 not taken.
✗ Branch 66 → 67 not taken.
✗ Branch 66 → 68 not taken.
✗ Branch 68 → 69 not taken.
✗ Branch 68 → 71 not taken.
✗ Branch 69 → 70 not taken.
✗ Branch 69 → 71 not taken.
✗ Branch 70 → 71 not taken.
✗ Branch 70 → 72 not taken.
✗ Branch 73 → 74 not taken.
✗ Branch 73 → 75 not taken.
✗ Branch 205 → 206 not taken.
✗ Branch 205 → 208 not taken.
✗ Branch 206 → 207 not taken.
✗ Branch 206 → 209 not taken.
✗ Branch 207 → 208 not taken.
✗ Branch 207 → 209 not taken.
✗ Branch 208 → 209 not taken.
✗ Branch 208 → 210 not taken.
✗ Branch 210 → 211 not taken.
✗ Branch 210 → 212 not taken.
✗ Branch 211 → 212 not taken.
✗ Branch 211 → 213 not taken.
✗ Branch 335 → 336 not taken.
✗ Branch 335 → 338 not taken.
✗ Branch 337 → 338 not taken.
✗ Branch 337 → 339 not taken.
✗ Branch 340 → 341 not taken.
✗ Branch 340 → 342 not taken.
✗ Branch 343 → 344 not taken.
✗ Branch 343 → 346 not taken.
✗ Branch 345 → 346 not taken.
✗ Branch 345 → 347 not taken.
✗ Branch 348 → 349 not taken.
✗ Branch 348 → 350 not taken.
✗ Branch 472 → 473 not taken.
✗ Branch 472 → 475 not taken.
✗ Branch 474 → 475 not taken.
✗ Branch 474 → 476 not taken.
✗ Branch 477 → 478 not taken.
✗ Branch 477 → 479 not taken.
✗ Branch 484 → 485 not taken.
✗ Branch 484 → 487 not taken.
✗ Branch 486 → 487 not taken.
✗ Branch 486 → 488 not taken.
✗ Branch 489 → 490 not taken.
✗ Branch 489 → 491 not taken.
✗ Branch 621 → 622 not taken.
✗ Branch 621 → 624 not taken.
✗ Branch 623 → 624 not taken.
✗ Branch 623 → 625 not taken.
✗ Branch 626 → 627 not taken.
✗ Branch 626 → 628 not taken.
36029344 if ((e ^ 1) == s.prv_e || depth[nxt] > d) {
343 // skip the edge
344 17913680 s.ch_idx++; return;
345 }
346
347 18115664 bool is_tree = depth[nxt] == -1;
348
10/36
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 684 → 685 taken 212384 times.
✓ Branch 684 → 727 taken 1061080 times.
✓ Branch 1214 → 1215 taken 125568 times.
✓ Branch 1214 → 1258 taken 620072 times.
✓ Branch 1728 → 1729 taken 200 times.
✓ Branch 1728 → 1772 taken 56 times.
✓ Branch 2274 → 2275 taken 376 times.
✓ Branch 2274 → 2318 taken 264 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 79 → 80 not taken.
✗ Branch 79 → 82 not taken.
✓ Branch 124 → 125 taken 12600327 times.
✓ Branch 124 → 127 taken 3495337 times.
✗ Branch 169 → 170 not taken.
✗ Branch 169 → 172 not taken.
✗ Branch 218 → 219 not taken.
✗ Branch 218 → 221 not taken.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#1}::operator()() const:
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 24 not taken.
✗ Branch 72 → 73 not taken.
✗ Branch 72 → 81 not taken.
✗ Branch 76 → 77 not taken.
✗ Branch 76 → 85 not taken.
✗ Branch 213 → 214 not taken.
✗ Branch 213 → 222 not taken.
✗ Branch 214 → 215 not taken.
✗ Branch 214 → 223 not taken.
✗ Branch 343 → 344 not taken.
✗ Branch 343 → 352 not taken.
✗ Branch 351 → 352 not taken.
✗ Branch 351 → 360 not taken.
✗ Branch 480 → 481 not taken.
✗ Branch 480 → 489 not taken.
✗ Branch 492 → 493 not taken.
✗ Branch 492 → 501 not taken.
✗ Branch 629 → 630 not taken.
✗ Branch 629 → 638 not taken.
18115664 if (is_tree) {
349
1/4
✗ Branch 80 → 81 not taken.
✓ Branch 125 → 126 taken 12600327 times.
✗ Branch 170 → 171 not taken.
✗ Branch 219 → 220 not taken.
13277383 push_vert(nxt, e);
350 } else {
351
2/8
✗ Branch 82 → 83 not taken.
✗ Branch 82 → 84 not taken.
✓ Branch 127 → 128 taken 24 times.
✓ Branch 127 → 129 taken 3495313 times.
✗ Branch 172 → 173 not taken.
✗ Branch 172 → 174 not taken.
✗ Branch 221 → 222 not taken.
✗ Branch 221 → 223 not taken.
5176809 finish_edge(false, {depth[nxt], d});
352 }
353 40487 };
354 14427351 auto pop_vert = [&] [[gnu::always_inline]] () -> std::array<int, 2> {
355 14790864 auto lowvals = stk.back().lowvals;
356
2/8
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 90 not taken.
✓ Branch 102 → 103 taken 12600327 times.
✓ Branch 102 → 135 taken 1786537 times.
✗ Branch 147 → 148 not taken.
✗ Branch 147 → 180 not taken.
✗ Branch 196 → 197 not taken.
✗ Branch 196 → 229 not taken.
14790864 stk.pop_back();
357 14790864 return lowvals;
358 40487 };
359 40487 for_each_in_order(NV, vert_order, [&] [[gnu::always_inline]] (int rt) -> void {
360
10/34
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 405 → 406 taken 37664 times.
✓ Branch 405 → 878 taken 163512 times.
✓ Branch 917 → 918 taken 24592 times.
✓ Branch 917 → 1411 taken 125568 times.
✓ Branch 1431 → 1432 taken 656 times.
✓ Branch 1431 → 1927 taken 10432 times.
✓ Branch 1977 → 1978 taken 2560 times.
✓ Branch 1977 → 2473 taken 39016 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 49 → 50 not taken.
✗ Branch 49 → 90 not taken.
✓ Branch 94 → 95 taken 1786537 times.
✓ Branch 94 → 135 taken 12600327 times.
✗ Branch 139 → 140 not taken.
✗ Branch 139 → 180 not taken.
✗ Branch 188 → 189 not taken.
✗ Branch 188 → 229 not taken.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}::operator()(int) const:
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 122 not taken.
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 126 not taken.
✗ Branch 144 → 145 not taken.
✗ Branch 144 → 263 not taken.
✗ Branch 145 → 146 not taken.
✗ Branch 145 → 264 not taken.
✗ Branch 274 → 275 not taken.
✗ Branch 274 → 393 not taken.
✗ Branch 282 → 283 not taken.
✗ Branch 282 → 401 not taken.
✗ Branch 411 → 412 not taken.
✗ Branch 411 → 530 not taken.
✗ Branch 423 → 424 not taken.
✗ Branch 423 → 542 not taken.
✗ Branch 560 → 561 not taken.
✗ Branch 560 → 679 not taken.
14790864 if (depth[rt] == -1) {
361
5/14
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 409 → 410 taken 37664 times.
✓ Branch 921 → 922 taken 24592 times.
✓ Branch 1435 → 1436 taken 656 times.
✓ Branch 1981 → 1982 taken 2560 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 50 → 51 not taken.
✓ Branch 95 → 96 taken 1786537 times.
✗ Branch 140 → 141 not taken.
✗ Branch 189 → 190 not taken.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}::operator()(int) const:
✗ Branch 8 → 9 not taken.
✗ Branch 145 → 146 not taken.
✗ Branch 283 → 284 not taken.
✗ Branch 412 → 413 not taken.
✗ Branch 424 → 425 not taken.
✗ Branch 561 → 562 not taken.
1852009 roots.push_back(rt);
362
1/8
✗ Branch 51 → 52 not taken.
✗ Branch 51 → 53 not taken.
✗ Branch 96 → 97 not taken.
✓ Branch 96 → 98 taken 1786537 times.
✗ Branch 141 → 142 not taken.
✗ Branch 141 → 143 not taken.
✗ Branch 190 → 191 not taken.
✗ Branch 190 → 192 not taken.
3704018 push_vert(rt, -1);
363 50820208 while (true) {
364
8/26
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 464 → 465 taken 250048 times.
✓ Branch 464 → 628 taken 2419472 times.
✓ Branch 981 → 982 taken 150160 times.
✓ Branch 981 → 1153 taken 1416984 times.
✓ Branch 1495 → 1496 taken 856 times.
✓ Branch 1495 → 1667 taken 488 times.
✓ Branch 2041 → 2042 taken 2936 times.
✓ Branch 2041 → 2213 taken 1096 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}::operator()(int) const:
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 59 not taken.
✗ Branch 19 → 20 not taken.
✗ Branch 19 → 63 not taken.
✗ Branch 156 → 157 not taken.
✗ Branch 156 → 200 not taken.
✗ Branch 157 → 158 not taken.
✗ Branch 157 → 201 not taken.
✗ Branch 286 → 287 not taken.
✗ Branch 286 → 330 not taken.
✗ Branch 294 → 295 not taken.
✗ Branch 294 → 338 not taken.
✗ Branch 423 → 424 not taken.
✗ Branch 423 → 467 not taken.
✗ Branch 435 → 436 not taken.
✗ Branch 435 → 479 not taken.
✗ Branch 572 → 573 not taken.
✗ Branch 572 → 616 not taken.
50820208 if (stk.back().ch_idx == stk.back().ch_end) {
365
2/8
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 90 not taken.
✓ Branch 102 → 103 taken 12600327 times.
✓ Branch 102 → 135 taken 1786537 times.
✗ Branch 147 → 148 not taken.
✗ Branch 147 → 180 not taken.
✗ Branch 196 → 197 not taken.
✗ Branch 196 → 229 not taken.
14790864 auto lowvals = pop_vert();
366
10/34
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 486 → 487 taken 212384 times.
✓ Branch 486 → 627 taken 37664 times.
✓ Branch 1005 → 1006 taken 125568 times.
✓ Branch 1005 → 1152 taken 24592 times.
✓ Branch 1519 → 1520 taken 200 times.
✓ Branch 1519 → 1666 taken 656 times.
✓ Branch 2065 → 2066 taken 376 times.
✓ Branch 2065 → 2212 taken 2560 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 90 not taken.
✓ Branch 102 → 103 taken 12600327 times.
✓ Branch 102 → 135 taken 1786537 times.
✗ Branch 147 → 148 not taken.
✗ Branch 147 → 180 not taken.
✗ Branch 196 → 197 not taken.
✗ Branch 196 → 229 not taken.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}::operator()(int) const:
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 27 not taken.
✗ Branch 162 → 163 not taken.
✗ Branch 162 → 164 not taken.
✗ Branch 163 → 164 not taken.
✗ Branch 163 → 165 not taken.
✗ Branch 292 → 293 not taken.
✗ Branch 292 → 294 not taken.
✗ Branch 300 → 301 not taken.
✗ Branch 300 → 302 not taken.
✗ Branch 429 → 430 not taken.
✗ Branch 429 → 431 not taken.
✗ Branch 441 → 442 not taken.
✗ Branch 441 → 443 not taken.
✗ Branch 578 → 579 not taken.
✗ Branch 578 → 580 not taken.
14790864 if (stk.empty()) break;
367
1/8
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 60 not taken.
✗ Branch 103 → 104 not taken.
✓ Branch 103 → 105 taken 12600327 times.
✗ Branch 148 → 149 not taken.
✗ Branch 148 → 150 not taken.
✗ Branch 197 → 198 not taken.
✗ Branch 197 → 199 not taken.
13277383 finish_edge(true, lowvals);
368 } else {
369
3/16
✗ Branch 56 → 57 not taken.
✗ Branch 56 → 72 not taken.
✗ Branch 72 → 73 not taken.
✗ Branch 72 → 74 not taken.
✓ Branch 101 → 102 taken 14386864 times.
✓ Branch 101 → 117 taken 32191304 times.
✗ Branch 117 → 118 not taken.
✓ Branch 117 → 119 taken 32191304 times.
✗ Branch 146 → 147 not taken.
✗ Branch 146 → 162 not taken.
✗ Branch 162 → 163 not taken.
✗ Branch 162 → 164 not taken.
✗ Branch 195 → 196 not taken.
✗ Branch 195 → 211 not taken.
✗ Branch 211 → 212 not taken.
✗ Branch 211 → 213 not taken.
54658248 start_edge();
370 }
371 }
372 }
373 ✗ });
374
375
2/3
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2498 → 2528 taken 40400 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 234 → 237 taken 87 times.
✗ Branch 686 → 694 not taken.
40487 csr_index_builder by_key_idx_builder(3*NV+6);
376
4/6
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2539 → 2532 taken 2020000 times.
✓ Branch 2539 → 2540 taken 40400 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 239 → 238 taken 16095664 times.
✓ Branch 239 → 240 taken 87 times.
✗ Branch 708 → 696 not taken.
✗ Branch 708 → 709 not taken.
18156151 for (auto edge : all_outedges) by_key_idx_builder.count(edge.key.v);
377
2/3
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2547 → 2548 taken 40400 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 240 → 241 taken 87 times.
✗ Branch 712 → 713 not taken.
40487 csr_builder<outedge_t> by_key_builder(std::move(by_key_idx_builder));
378
4/6
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2564 → 2554 taken 2020000 times.
✓ Branch 2564 → 2565 taken 40400 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 244 → 243 taken 16095664 times.
✓ Branch 244 → 245 taken 87 times.
✗ Branch 728 → 716 not taken.
✗ Branch 728 → 729 not taken.
18156151 for (auto edge : all_outedges) by_key_builder.push(edge.key.v) = edge;
379
1/1
✓ Branch 245 → 246 taken 87 times.
40487 csr<outedge_t> by_key = std::move(by_key_builder).finalize();
380
381
2/3
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2573 → 2574 taken 40400 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 245 → 246 taken 87 times.
✗ Branch 732 → 733 not taken.
40487 csr_index_builder by_src_idx_builder(NV);
382
4/6
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2585 → 2578 taken 2020000 times.
✓ Branch 2585 → 2586 taken 40400 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 248 → 247 taken 16095664 times.
✓ Branch 248 → 249 taken 87 times.
✗ Branch 747 → 735 not taken.
✗ Branch 747 → 748 not taken.
18156151 for (auto edge : by_key.dat) by_src_idx_builder.count(edge.src);
383
2/3
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2591 → 2592 taken 40400 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 249 → 251 taken 87 times.
✗ Branch 752 → 753 not taken.
40487 csr_builder<outedge_t> by_src_builder(std::move(by_src_idx_builder), std::move(all_outedges));
384
4/6
wala::lowval_storted_skeleton_t::build(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2606 → 2596 taken 2020000 times.
✓ Branch 2606 → 2607 taken 40400 times.
wala::lowval_storted_skeleton_t::build(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 251 → 250 taken 16095664 times.
✓ Branch 251 → 252 taken 87 times.
✗ Branch 767 → 755 not taken.
✗ Branch 767 → 768 not taken.
18156151 for (auto edge : by_key.dat) by_src_builder.push(edge.src) = edge;
385 40574 outedges = std::move(by_src_builder).finalize();
386 40835 }
387
388 40574 return {std::move(roots), std::move(outedges)};
389 40574 }
390 };
391
392 template <bool with_planarity>
393 20287 std::conditional_t<with_planarity, planar_spqr_tree, spqr_tree> spqr_tree::build_impl(
394 int NV,
395 const std::vector<std::array<int, 2>>& edges,
396 bool ternarize,
397 std::span<const int> vert_order,
398 std::span<const int> edge_order
399 ) {
400 // std::min is by reference, which breaks some optimizations
401
6/12
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 282 → 283 not taken.
✗ Branch 282 → 284 not taken.
✓ Branch 609 → 610 taken 1419004 times.
✓ Branch 609 → 611 taken 2076309 times.
auto wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(auto:1&, auto:2)#1}::operator()<int, int>(int&, int) const:
✓ Branch 4 → 5 taken 149090 times.
✓ Branch 4 → 8 taken 717298 times.
auto wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(auto:1&, auto:2)#1}::operator()<int, int>(int&, int) const:
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
auto wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(auto:1&, auto:2)#1}::operator()<int, int>(int&, int) const:
✓ Branch 4 → 5 taken 149090 times.
✓ Branch 4 → 8 taken 717298 times.
auto wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(auto:1&, auto:2)#1}::operator()<int, int>(int&, int) const:
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
15098797 auto setmin = [](auto& a, auto b) { if (b < a) a = b; };
402
403 20287 int NE = int(edges.size());
404 20287 assert(int(vert_order.size()) <= NV);
405 20287 assert(int(edge_order.size()) <= NE);
406
407
2/4
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 17 → 18 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 9 → 10 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 17 → 18 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 9 → 10 not taken.
20287 auto [roots, outedges] = lowval_storted_skeleton_t::build(NV, edges, vert_order, edge_order);
408
409 // Phase 2: do the big ear-decomposition-like walk
410
411 // We're going to build a tree of all SPQR *nodes* + all original *vertices* (collectively *items*).
412 // Vertices will hang off the first SPQR node containing them, and blocks will be rooted at a topmost Q node for the top edge.
413
414 // As we build, we will represent the children of our nodes/vertices as linked lists.
415 20287 constexpr int ROOT_ITEM = 0;
416 8148685 auto vert_item = [&] [[gnu::always_inline]] (int v) -> int { return 1 + v; };
417 39585778 auto edge_item = [&] [[gnu::always_inline]] (int e) -> int { return 1 + NV + e; };
418
419 // Helpers for working with std::array<T, 2> - these compile to cmov's better than direct index access.
420
421 // return arr[dir] == a, arr[!dir] == b
422 60096923 auto set_sides = []<typename T>(bool dir, T a, T b) -> std::array<T, 2> {
423
26/46
None:
✓ Branch 2 → 3 taken 12740 times.
✓ Branch 2 → 4 taken 87956 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 33 → 36 not taken.
✓ Branch 33 → 37 taken 1786537 times.
✓ Branch 61 → 62 taken 5139837 times.
✗ Branch 61 → 63 not taken.
✓ Branch 87 → 88 taken 2712740 times.
✓ Branch 87 → 89 taken 4667008 times.
✓ Branch 134 → 135 taken 119069 times.
✓ Branch 134 → 136 taken 147659 times.
✓ Branch 156 → 157 taken 731862 times.
✓ Branch 156 → 158 taken 1033999 times.
✓ Branch 231 → 232 taken 741242 times.
✓ Branch 231 → 233 taken 167077 times.
✓ Branch 269 → 270 taken 2813093 times.
✓ Branch 269 → 271 taken 1373791 times.
✗ Branch 279 → 280 not taken.
✗ Branch 279 → 281 not taken.
✗ Branch 309 → 310 not taken.
✗ Branch 309 → 311 not taken.
✓ Branch 331 → 332 taken 91768 times.
✓ Branch 331 → 333 taken 346679 times.
✓ Branch 340 → 341 taken 1092267 times.
✓ Branch 340 → 342 taken 1815615 times.
✓ Branch 367 → 370 taken 1620473 times.
✓ Branch 367 → 371 taken 8071972 times.
✗ Branch 388 → 389 not taken.
✗ Branch 388 → 390 not taken.
✗ Branch 414 → 415 not taken.
✗ Branch 414 → 416 not taken.
✗ Branch 461 → 462 not taken.
✗ Branch 461 → 463 not taken.
✗ Branch 483 → 484 not taken.
✗ Branch 483 → 485 not taken.
✗ Branch 558 → 559 not taken.
✗ Branch 558 → 560 not taken.
✗ Branch 596 → 597 not taken.
✗ Branch 596 → 598 not taken.
✓ Branch 606 → 607 taken 863344 times.
✓ Branch 606 → 608 taken 2631969 times.
✓ Branch 636 → 637 taken 69 times.
✓ Branch 636 → 638 taken 104 times.
✓ Branch 658 → 659 taken 61136 times.
✓ Branch 658 → 660 taken 73731 times.
✗ Branch 667 → 668 not taken.
✗ Branch 667 → 669 not taken.
41093313 return dir ? std::array<T, 2>{b, a} : std::array<T, 2>{a, b};
424 };
425 18902746 auto get_side = []<typename T>(std::array<T, 2> a, bool dir) -> T {
426
0/2
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
9095842 return dir ? a[1] : a[0];
427 };
428
429 struct item_list {
430 // Items are actually 2 * item + planarity_flip (always 0 without planarity)
431 std::array<int, 2> v{-1, -1};
432
433
3/4
✓ Branch 724 → 725 taken 87 times.
✗ Branch 724 → 737 not taken.
✓ Branch 852 → 853 taken 13999303 times.
✓ Branch 852 → 865 taken 26973925 times.
53128015 [[nodiscard]] bool empty() const { return v[0] < 0; }
434 };
435
6/10
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 23 → 24 taken 10100 times.
✓ Branch 26 → 27 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 7 → 8 taken 87 times.
✓ Branch 8 → 9 taken 87 times.
✗ Branch 10 → 11 not taken.
✗ Branch 11 → 12 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 23 → 24 taken 10100 times.
✓ Branch 26 → 27 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10 → 11 not taken.
✗ Branch 11 → 12 not taken.
20287 std::vector<int> ch_nxt; ch_nxt.reserve(1 + NV + NE + NE); ch_nxt.assign(1 + NV + NE, -1);
436 53068006 auto concat = [&] [[gnu::always_inline]] (item_list a, item_list b) -> item_list {
437
85/430
None:
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
✗ Branch 18 → 19 not taken.
✗ Branch 18 → 20 not taken.
✗ Branch 34 → 35 not taken.
✗ Branch 34 → 36 not taken.
✗ Branch 36 → 37 not taken.
✗ Branch 36 → 38 not taken.
✗ Branch 37 → 38 not taken.
✗ Branch 37 → 39 not taken.
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 60 not taken.
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 61 not taken.
✗ Branch 102 → 103 not taken.
✗ Branch 102 → 104 not taken.
✗ Branch 104 → 105 not taken.
✗ Branch 104 → 106 not taken.
✗ Branch 176 → 177 not taken.
✗ Branch 176 → 178 not taken.
✗ Branch 180 → 181 not taken.
✗ Branch 180 → 182 not taken.
✗ Branch 190 → 191 not taken.
✗ Branch 190 → 192 not taken.
✗ Branch 192 → 193 not taken.
✗ Branch 192 → 194 not taken.
✗ Branch 196 → 197 not taken.
✗ Branch 196 → 198 not taken.
✗ Branch 206 → 207 not taken.
✗ Branch 206 → 208 not taken.
✗ Branch 307 → 308 not taken.
✗ Branch 307 → 309 not taken.
✗ Branch 323 → 324 not taken.
✗ Branch 323 → 325 not taken.
✗ Branch 354 → 355 not taken.
✗ Branch 354 → 356 not taken.
✗ Branch 370 → 371 not taken.
✗ Branch 370 → 372 not taken.
✗ Branch 395 → 396 not taken.
✗ Branch 395 → 397 not taken.
✗ Branch 406 → 407 not taken.
✗ Branch 406 → 408 not taken.
✗ Branch 411 → 412 not taken.
✗ Branch 411 → 413 not taken.
✗ Branch 422 → 423 not taken.
✗ Branch 422 → 424 not taken.
✗ Branch 460 → 461 not taken.
✗ Branch 460 → 462 not taken.
✗ Branch 476 → 477 not taken.
✗ Branch 476 → 478 not taken.
✗ Branch 585 → 586 not taken.
✗ Branch 585 → 587 not taken.
✗ Branch 601 → 602 not taken.
✗ Branch 601 → 603 not taken.
✗ Branch 632 → 633 not taken.
✗ Branch 632 → 634 not taken.
✗ Branch 648 → 649 not taken.
✗ Branch 648 → 650 not taken.
✗ Branch 692 → 693 not taken.
✗ Branch 692 → 694 not taken.
✗ Branch 797 → 798 not taken.
✗ Branch 797 → 799 not taken.
✗ Branch 813 → 814 not taken.
✗ Branch 813 → 815 not taken.
✗ Branch 843 → 844 not taken.
✗ Branch 843 → 845 not taken.
✗ Branch 859 → 860 not taken.
✗ Branch 859 → 861 not taken.
✗ Branch 971 → 972 not taken.
✗ Branch 971 → 973 not taken.
✗ Branch 987 → 988 not taken.
✗ Branch 987 → 989 not taken.
✗ Branch 1117 → 1118 not taken.
✗ Branch 1117 → 1119 not taken.
✗ Branch 1133 → 1134 not taken.
✗ Branch 1133 → 1135 not taken.
✗ Branch 1381 → 1382 not taken.
✗ Branch 1381 → 1383 not taken.
✗ Branch 1397 → 1398 not taken.
✗ Branch 1397 → 1399 not taken.
✗ Branch 1591 → 1592 not taken.
✗ Branch 1591 → 1593 not taken.
✗ Branch 1607 → 1608 not taken.
✗ Branch 1607 → 1609 not taken.
✗ Branch 1683 → 1684 not taken.
✗ Branch 1683 → 1685 not taken.
✗ Branch 1699 → 1700 not taken.
✗ Branch 1699 → 1701 not taken.
✗ Branch 1788 → 1789 not taken.
✗ Branch 1788 → 1790 not taken.
✗ Branch 2092 → 2093 not taken.
✗ Branch 2092 → 2094 not taken.
✗ Branch 2108 → 2109 not taken.
✗ Branch 2108 → 2110 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 816 → 817 taken 6238 times.
✗ Branch 816 → 857 not taken.
✗ Branch 916 → 917 not taken.
✓ Branch 916 → 918 taken 10052 times.
✗ Branch 1095 → 1096 not taken.
✓ Branch 1095 → 1097 taken 16290 times.
✓ Branch 1392 → 1393 taken 1598 times.
✓ Branch 1392 → 1394 taken 212 times.
✓ Branch 1482 → 1483 taken 212 times.
✓ Branch 1482 → 1484 taken 1598 times.
✓ Branch 2003 → 2004 taken 37016 times.
✓ Branch 2003 → 2005 taken 2870 times.
✓ Branch 2093 → 2094 taken 2870 times.
✓ Branch 2093 → 2095 taken 37016 times.
✓ Branch 2455 → 2456 taken 99712 times.
✓ Branch 2455 → 2457 taken 41144 times.
✓ Branch 2545 → 2546 taken 1244 times.
✓ Branch 2545 → 2547 taken 139612 times.
✓ Branch 2746 → 2747 taken 50394 times.
✓ Branch 2746 → 2748 taken 3582 times.
✓ Branch 2836 → 2837 taken 4506 times.
✓ Branch 2836 → 2838 taken 49470 times.
✓ Branch 3326 → 3327 taken 6370 times.
✓ Branch 3326 → 3328 taken 43978 times.
✓ Branch 3416 → 3417 taken 1818 times.
✓ Branch 3416 → 3418 taken 48530 times.
✓ Branch 3565 → 3566 taken 43978 times.
✓ Branch 3565 → 3567 taken 6370 times.
✗ Branch 3655 → 3656 not taken.
✓ Branch 3655 → 3657 taken 50348 times.
✗ Branch 3830 → 3831 not taken.
✓ Branch 3830 → 3832 taken 50348 times.
✓ Branch 4499 → 4500 taken 46 times.
✓ Branch 4499 → 4501 taken 232 times.
✓ Branch 4589 → 4590 taken 232 times.
✓ Branch 4589 → 4591 taken 46 times.
✗ Branch 5624 → 5625 not taken.
✗ Branch 5624 → 5665 not taken.
✗ Branch 5724 → 5725 not taken.
✗ Branch 5724 → 5726 not taken.
✗ Branch 5903 → 5904 not taken.
✓ Branch 5903 → 5905 taken 50490 times.
✗ Branch 6201 → 6202 not taken.
✗ Branch 6201 → 6203 not taken.
✗ Branch 6291 → 6292 not taken.
✗ Branch 6291 → 6293 not taken.
✗ Branch 6812 → 6813 not taken.
✗ Branch 6812 → 6814 not taken.
✗ Branch 6902 → 6903 not taken.
✗ Branch 6902 → 6904 not taken.
✗ Branch 7264 → 7265 not taken.
✗ Branch 7264 → 7266 not taken.
✗ Branch 7354 → 7355 not taken.
✗ Branch 7354 → 7356 not taken.
✗ Branch 7555 → 7556 not taken.
✗ Branch 7555 → 7557 not taken.
✗ Branch 7645 → 7646 not taken.
✗ Branch 7645 → 7647 not taken.
✗ Branch 8135 → 8136 not taken.
✗ Branch 8135 → 8137 not taken.
✗ Branch 8225 → 8226 not taken.
✗ Branch 8225 → 8227 not taken.
✗ Branch 8374 → 8375 not taken.
✗ Branch 8374 → 8376 not taken.
✗ Branch 8464 → 8465 not taken.
✗ Branch 8464 → 8466 not taken.
✗ Branch 8639 → 8640 not taken.
✗ Branch 8639 → 8641 not taken.
✓ Branch 9308 → 9309 taken 117422 times.
✓ Branch 9308 → 9310 taken 41586 times.
✓ Branch 9398 → 9399 taken 41586 times.
✓ Branch 9398 → 9400 taken 117422 times.
✗ Branch 9686 → 9687 not taken.
✓ Branch 9686 → 9688 taken 16368 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 80 → 81 taken 5220579 times.
✗ Branch 80 → 83 not taken.
✗ Branch 178 → 179 not taken.
✗ Branch 178 → 180 not taken.
✗ Branch 200 → 201 not taken.
✗ Branch 200 → 202 not taken.
✗ Branch 244 → 245 not taken.
✗ Branch 244 → 246 not taken.
✓ Branch 259 → 260 taken 4471866 times.
✗ Branch 259 → 262 not taken.
✗ Branch 318 → 319 not taken.
✗ Branch 318 → 320 not taken.
✗ Branch 334 → 335 not taken.
✗ Branch 334 → 336 not taken.
✓ Branch 407 → 408 taken 24 times.
✗ Branch 407 → 410 not taken.
✗ Branch 449 → 450 not taken.
✗ Branch 449 → 451 not taken.
✗ Branch 465 → 466 not taken.
✗ Branch 465 → 467 not taken.
✗ Branch 537 → 538 not taken.
✗ Branch 537 → 539 not taken.
✗ Branch 553 → 554 not taken.
✗ Branch 553 → 555 not taken.
✗ Branch 586 → 587 not taken.
✗ Branch 586 → 589 not taken.
✗ Branch 602 → 603 not taken.
✗ Branch 602 → 604 not taken.
✗ Branch 618 → 619 not taken.
✗ Branch 618 → 620 not taken.
✗ Branch 727 → 728 not taken.
✗ Branch 727 → 729 not taken.
✗ Branch 743 → 744 not taken.
✗ Branch 743 → 745 not taken.
✗ Branch 774 → 775 not taken.
✗ Branch 774 → 776 not taken.
✗ Branch 790 → 791 not taken.
✗ Branch 790 → 792 not taken.
✗ Branch 834 → 835 not taken.
✗ Branch 834 → 836 not taken.
✗ Branch 985 → 986 not taken.
✗ Branch 985 → 987 not taken.
✗ Branch 1001 → 1002 not taken.
✗ Branch 1001 → 1003 not taken.
✗ Branch 1203 → 1204 not taken.
✗ Branch 1203 → 1205 not taken.
✗ Branch 1225 → 1226 not taken.
✗ Branch 1225 → 1227 not taken.
✗ Branch 1269 → 1270 not taken.
✗ Branch 1269 → 1271 not taken.
✗ Branch 1343 → 1344 not taken.
✗ Branch 1343 → 1345 not taken.
✗ Branch 1359 → 1360 not taken.
✗ Branch 1359 → 1361 not taken.
✗ Branch 1474 → 1475 not taken.
✗ Branch 1474 → 1476 not taken.
✗ Branch 1490 → 1491 not taken.
✗ Branch 1490 → 1492 not taken.
✗ Branch 1562 → 1563 not taken.
✗ Branch 1562 → 1564 not taken.
✗ Branch 1578 → 1579 not taken.
✗ Branch 1578 → 1580 not taken.
✗ Branch 1627 → 1628 not taken.
✗ Branch 1627 → 1629 not taken.
✗ Branch 1643 → 1644 not taken.
✗ Branch 1643 → 1645 not taken.
✗ Branch 1752 → 1753 not taken.
✗ Branch 1752 → 1754 not taken.
✗ Branch 1768 → 1769 not taken.
✗ Branch 1768 → 1770 not taken.
✗ Branch 1799 → 1800 not taken.
✗ Branch 1799 → 1801 not taken.
✗ Branch 1815 → 1816 not taken.
✗ Branch 1815 → 1817 not taken.
✗ Branch 1859 → 1860 not taken.
✗ Branch 1859 → 1861 not taken.
✗ Branch 2010 → 2011 not taken.
✗ Branch 2010 → 2012 not taken.
✗ Branch 2026 → 2027 not taken.
✗ Branch 2026 → 2028 not taken.
✗ Branch 2088 → 2089 not taken.
✗ Branch 2088 → 2090 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 827 → 828 taken 6238 times.
✗ Branch 827 → 868 not taken.
✗ Branch 927 → 928 not taken.
✓ Branch 927 → 929 taken 10052 times.
✗ Branch 1111 → 1112 not taken.
✓ Branch 1111 → 1113 taken 16290 times.
✓ Branch 1454 → 1455 taken 1598 times.
✓ Branch 1454 → 1456 taken 212 times.
✓ Branch 1544 → 1545 taken 212 times.
✓ Branch 1544 → 1546 taken 1598 times.
✓ Branch 2528 → 2529 taken 37016 times.
✓ Branch 2528 → 2530 taken 2870 times.
✓ Branch 2618 → 2619 taken 2870 times.
✓ Branch 2618 → 2620 taken 37016 times.
✓ Branch 4230 → 4231 taken 27472 times.
✓ Branch 4230 → 4232 taken 854 times.
✓ Branch 4320 → 4321 taken 732 times.
✓ Branch 4320 → 4322 taken 27594 times.
✓ Branch 5057 → 5058 taken 3284 times.
✓ Branch 5057 → 5059 taken 3242 times.
✓ Branch 5147 → 5148 taken 198 times.
✓ Branch 5147 → 5149 taken 6328 times.
✓ Branch 5779 → 5780 taken 68956 times.
✓ Branch 5779 → 5781 taken 37048 times.
✓ Branch 5869 → 5870 taken 314 times.
✓ Branch 5869 → 5871 taken 105690 times.
✓ Branch 6995 → 6996 taken 50394 times.
✓ Branch 6995 → 6997 taken 3582 times.
✓ Branch 7085 → 7086 taken 4506 times.
✓ Branch 7085 → 7087 taken 49470 times.
✓ Branch 7970 → 7971 taken 6370 times.
✓ Branch 7970 → 7972 taken 43978 times.
✓ Branch 8060 → 8061 taken 1818 times.
✓ Branch 8060 → 8062 taken 48530 times.
✓ Branch 8468 → 8469 taken 43978 times.
✓ Branch 8468 → 8470 taken 6370 times.
✗ Branch 8558 → 8559 not taken.
✓ Branch 8558 → 8560 taken 50348 times.
✗ Branch 8992 → 8993 not taken.
✓ Branch 8992 → 8994 taken 50348 times.
✓ Branch 10216 → 10217 taken 46 times.
✓ Branch 10216 → 10218 taken 232 times.
✓ Branch 10306 → 10307 taken 232 times.
✓ Branch 10306 → 10308 taken 46 times.
✗ Branch 11815 → 11816 not taken.
✗ Branch 11815 → 11856 not taken.
✗ Branch 11915 → 11916 not taken.
✗ Branch 11915 → 11917 not taken.
✗ Branch 12099 → 12100 not taken.
✓ Branch 12099 → 12101 taken 50490 times.
✗ Branch 12442 → 12443 not taken.
✗ Branch 12442 → 12444 not taken.
✗ Branch 12532 → 12533 not taken.
✗ Branch 12532 → 12534 not taken.
✗ Branch 13516 → 13517 not taken.
✗ Branch 13516 → 13518 not taken.
✗ Branch 13606 → 13607 not taken.
✗ Branch 13606 → 13608 not taken.
✗ Branch 15218 → 15219 not taken.
✗ Branch 15218 → 15220 not taken.
✗ Branch 15308 → 15309 not taken.
✗ Branch 15308 → 15310 not taken.
✗ Branch 16045 → 16046 not taken.
✗ Branch 16045 → 16047 not taken.
✗ Branch 16135 → 16136 not taken.
✗ Branch 16135 → 16137 not taken.
✗ Branch 16767 → 16768 not taken.
✗ Branch 16767 → 16769 not taken.
✗ Branch 16857 → 16858 not taken.
✗ Branch 16857 → 16859 not taken.
✗ Branch 17983 → 17984 not taken.
✗ Branch 17983 → 17985 not taken.
✗ Branch 18073 → 18074 not taken.
✗ Branch 18073 → 18075 not taken.
✗ Branch 18958 → 18959 not taken.
✗ Branch 18958 → 18960 not taken.
✗ Branch 19048 → 19049 not taken.
✗ Branch 19048 → 19050 not taken.
✗ Branch 19456 → 19457 not taken.
✗ Branch 19456 → 19458 not taken.
✗ Branch 19546 → 19547 not taken.
✗ Branch 19546 → 19548 not taken.
✗ Branch 19980 → 19981 not taken.
✗ Branch 19980 → 19982 not taken.
✓ Branch 21204 → 21205 taken 117422 times.
✓ Branch 21204 → 21206 taken 41586 times.
✓ Branch 21294 → 21295 taken 41586 times.
✓ Branch 21294 → 21296 taken 117422 times.
✗ Branch 22045 → 22046 not taken.
✓ Branch 22045 → 22047 taken 16368 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 182 → 183 not taken.
✗ Branch 182 → 184 not taken.
✗ Branch 204 → 205 not taken.
✗ Branch 204 → 206 not taken.
✗ Branch 249 → 250 not taken.
✗ Branch 249 → 251 not taken.
✗ Branch 335 → 336 not taken.
✗ Branch 335 → 337 not taken.
✗ Branch 351 → 352 not taken.
✗ Branch 351 → 353 not taken.
✗ Branch 551 → 552 not taken.
✗ Branch 551 → 553 not taken.
✗ Branch 567 → 568 not taken.
✗ Branch 567 → 569 not taken.
✗ Branch 942 → 943 not taken.
✗ Branch 942 → 944 not taken.
✗ Branch 958 → 959 not taken.
✗ Branch 958 → 960 not taken.
✗ Branch 1116 → 1117 not taken.
✗ Branch 1116 → 1118 not taken.
✗ Branch 1132 → 1133 not taken.
✗ Branch 1132 → 1134 not taken.
✗ Branch 1262 → 1263 not taken.
✗ Branch 1262 → 1264 not taken.
✗ Branch 1278 → 1279 not taken.
✗ Branch 1278 → 1280 not taken.
✗ Branch 1526 → 1527 not taken.
✗ Branch 1526 → 1528 not taken.
✗ Branch 1542 → 1543 not taken.
✗ Branch 1542 → 1544 not taken.
✗ Branch 1736 → 1737 not taken.
✗ Branch 1736 → 1738 not taken.
✗ Branch 1752 → 1753 not taken.
✗ Branch 1752 → 1754 not taken.
✗ Branch 1828 → 1829 not taken.
✗ Branch 1828 → 1830 not taken.
✗ Branch 1844 → 1845 not taken.
✗ Branch 1844 → 1846 not taken.
✗ Branch 1933 → 1934 not taken.
✗ Branch 1933 → 1935 not taken.
✗ Branch 2237 → 2238 not taken.
✗ Branch 2237 → 2239 not taken.
✗ Branch 2253 → 2254 not taken.
✗ Branch 2253 → 2255 not taken.
✗ Branch 2563 → 2564 not taken.
✗ Branch 2563 → 2565 not taken.
✗ Branch 2585 → 2586 not taken.
✗ Branch 2585 → 2587 not taken.
✗ Branch 2630 → 2631 not taken.
✗ Branch 2630 → 2632 not taken.
✗ Branch 2716 → 2717 not taken.
✗ Branch 2716 → 2718 not taken.
✗ Branch 2732 → 2733 not taken.
✗ Branch 2732 → 2734 not taken.
✗ Branch 2932 → 2933 not taken.
✗ Branch 2932 → 2934 not taken.
✗ Branch 2948 → 2949 not taken.
✗ Branch 2948 → 2950 not taken.
✗ Branch 3323 → 3324 not taken.
✗ Branch 3323 → 3325 not taken.
✗ Branch 3339 → 3340 not taken.
✗ Branch 3339 → 3341 not taken.
✗ Branch 3497 → 3498 not taken.
✗ Branch 3497 → 3499 not taken.
✗ Branch 3513 → 3514 not taken.
✗ Branch 3513 → 3515 not taken.
✗ Branch 3643 → 3644 not taken.
✗ Branch 3643 → 3645 not taken.
✗ Branch 3659 → 3660 not taken.
✗ Branch 3659 → 3661 not taken.
✗ Branch 3907 → 3908 not taken.
✗ Branch 3907 → 3909 not taken.
✗ Branch 3923 → 3924 not taken.
✗ Branch 3923 → 3925 not taken.
✗ Branch 4117 → 4118 not taken.
✗ Branch 4117 → 4119 not taken.
✗ Branch 4133 → 4134 not taken.
✗ Branch 4133 → 4135 not taken.
✗ Branch 4209 → 4210 not taken.
✗ Branch 4209 → 4211 not taken.
✗ Branch 4225 → 4226 not taken.
✗ Branch 4225 → 4227 not taken.
✗ Branch 4314 → 4315 not taken.
✗ Branch 4314 → 4316 not taken.
✗ Branch 4618 → 4619 not taken.
✗ Branch 4618 → 4620 not taken.
✗ Branch 4634 → 4635 not taken.
✗ Branch 4634 → 4636 not taken.
✗ Branch 4801 → 4802 not taken.
✗ Branch 4801 → 4803 not taken.
11978081 if (b.empty()) return a;
438
104/494
None:
✗ Branch 6 → 7 not taken.
✗ Branch 6 → 8 not taken.
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
✗ Branch 37 → 38 not taken.
✗ Branch 37 → 39 not taken.
✗ Branch 39 → 40 not taken.
✗ Branch 39 → 41 not taken.
✗ Branch 40 → 41 not taken.
✗ Branch 40 → 42 not taken.
✗ Branch 61 → 62 not taken.
✗ Branch 61 → 63 not taken.
✗ Branch 62 → 63 not taken.
✗ Branch 62 → 64 not taken.
✗ Branch 105 → 106 not taken.
✗ Branch 105 → 107 not taken.
✗ Branch 107 → 108 not taken.
✗ Branch 107 → 109 not taken.
✗ Branch 179 → 180 not taken.
✗ Branch 179 → 181 not taken.
✗ Branch 183 → 184 not taken.
✗ Branch 183 → 185 not taken.
✗ Branch 193 → 194 not taken.
✗ Branch 193 → 195 not taken.
✗ Branch 195 → 196 not taken.
✗ Branch 195 → 197 not taken.
✗ Branch 199 → 200 not taken.
✗ Branch 199 → 201 not taken.
✗ Branch 209 → 210 not taken.
✗ Branch 209 → 211 not taken.
✗ Branch 310 → 311 not taken.
✗ Branch 310 → 312 not taken.
✗ Branch 326 → 327 not taken.
✗ Branch 326 → 328 not taken.
✗ Branch 357 → 358 not taken.
✗ Branch 357 → 359 not taken.
✗ Branch 373 → 374 not taken.
✗ Branch 373 → 375 not taken.
✗ Branch 398 → 399 not taken.
✗ Branch 398 → 400 not taken.
✗ Branch 409 → 410 not taken.
✗ Branch 409 → 411 not taken.
✗ Branch 414 → 415 not taken.
✗ Branch 414 → 416 not taken.
✗ Branch 425 → 426 not taken.
✗ Branch 425 → 427 not taken.
✗ Branch 463 → 464 not taken.
✗ Branch 463 → 465 not taken.
✗ Branch 479 → 480 not taken.
✗ Branch 479 → 481 not taken.
✗ Branch 588 → 589 not taken.
✗ Branch 588 → 590 not taken.
✗ Branch 604 → 605 not taken.
✗ Branch 604 → 606 not taken.
✗ Branch 635 → 636 not taken.
✗ Branch 635 → 637 not taken.
✗ Branch 651 → 652 not taken.
✗ Branch 651 → 653 not taken.
✗ Branch 695 → 696 not taken.
✗ Branch 695 → 697 not taken.
✗ Branch 800 → 801 not taken.
✗ Branch 800 → 802 not taken.
✗ Branch 816 → 817 not taken.
✗ Branch 816 → 818 not taken.
✗ Branch 846 → 847 not taken.
✗ Branch 846 → 848 not taken.
✗ Branch 862 → 863 not taken.
✗ Branch 862 → 864 not taken.
✗ Branch 974 → 975 not taken.
✗ Branch 974 → 976 not taken.
✗ Branch 990 → 991 not taken.
✗ Branch 990 → 992 not taken.
✗ Branch 1120 → 1121 not taken.
✗ Branch 1120 → 1122 not taken.
✗ Branch 1136 → 1137 not taken.
✗ Branch 1136 → 1138 not taken.
✗ Branch 1384 → 1385 not taken.
✗ Branch 1384 → 1386 not taken.
✗ Branch 1400 → 1401 not taken.
✗ Branch 1400 → 1402 not taken.
✗ Branch 1594 → 1595 not taken.
✗ Branch 1594 → 1596 not taken.
✗ Branch 1610 → 1611 not taken.
✗ Branch 1610 → 1612 not taken.
✗ Branch 1686 → 1687 not taken.
✗ Branch 1686 → 1688 not taken.
✗ Branch 1702 → 1703 not taken.
✗ Branch 1702 → 1704 not taken.
✗ Branch 1791 → 1792 not taken.
✗ Branch 1791 → 1793 not taken.
✗ Branch 2095 → 2096 not taken.
✗ Branch 2095 → 2097 not taken.
✗ Branch 2111 → 2112 not taken.
✗ Branch 2111 → 2113 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 825 → 826 not taken.
✓ Branch 825 → 827 taken 6238 times.
✗ Branch 926 → 927 not taken.
✓ Branch 926 → 928 taken 10052 times.
✓ Branch 1105 → 1106 taken 1398 times.
✓ Branch 1105 → 1135 taken 14892 times.
✗ Branch 1402 → 1403 not taken.
✓ Branch 1402 → 1404 taken 212 times.
✗ Branch 1492 → 1493 not taken.
✓ Branch 1492 → 1494 taken 1598 times.
✗ Branch 2013 → 2014 not taken.
✓ Branch 2013 → 2015 taken 2870 times.
✗ Branch 2103 → 2104 not taken.
✓ Branch 2103 → 2105 taken 37016 times.
✓ Branch 2465 → 2466 taken 38968 times.
✓ Branch 2465 → 2467 taken 2176 times.
✓ Branch 2555 → 2556 taken 31238 times.
✓ Branch 2555 → 2557 taken 108374 times.
✓ Branch 2756 → 2757 taken 2210 times.
✓ Branch 2756 → 2758 taken 1372 times.
✓ Branch 2846 → 2847 taken 2620 times.
✓ Branch 2846 → 2848 taken 46850 times.
✓ Branch 3336 → 3337 taken 12470 times.
✓ Branch 3336 → 3338 taken 31508 times.
✓ Branch 3426 → 3427 taken 43978 times.
✓ Branch 3426 → 3428 taken 4552 times.
✗ Branch 3575 → 3576 not taken.
✓ Branch 3575 → 3577 taken 6370 times.
✓ Branch 3665 → 3666 taken 6370 times.
✓ Branch 3665 → 3667 taken 43978 times.
✗ Branch 3840 → 3841 not taken.
✓ Branch 3840 → 3842 taken 50348 times.
✗ Branch 4509 → 4510 not taken.
✓ Branch 4509 → 4511 taken 232 times.
✗ Branch 4599 → 4600 not taken.
✓ Branch 4599 → 4601 taken 46 times.
✗ Branch 5633 → 5634 not taken.
✗ Branch 5633 → 5635 not taken.
✗ Branch 5734 → 5735 not taken.
✗ Branch 5734 → 5736 not taken.
✓ Branch 5913 → 5914 taken 17522 times.
✓ Branch 5913 → 5943 taken 32968 times.
✗ Branch 6211 → 6212 not taken.
✗ Branch 6211 → 6213 not taken.
✗ Branch 6301 → 6302 not taken.
✗ Branch 6301 → 6303 not taken.
✗ Branch 6822 → 6823 not taken.
✗ Branch 6822 → 6824 not taken.
✗ Branch 6912 → 6913 not taken.
✗ Branch 6912 → 6914 not taken.
✗ Branch 7274 → 7275 not taken.
✗ Branch 7274 → 7276 not taken.
✗ Branch 7364 → 7365 not taken.
✗ Branch 7364 → 7366 not taken.
✗ Branch 7565 → 7566 not taken.
✗ Branch 7565 → 7567 not taken.
✗ Branch 7655 → 7656 not taken.
✗ Branch 7655 → 7657 not taken.
✗ Branch 8145 → 8146 not taken.
✗ Branch 8145 → 8147 not taken.
✗ Branch 8235 → 8236 not taken.
✗ Branch 8235 → 8237 not taken.
✗ Branch 8384 → 8385 not taken.
✗ Branch 8384 → 8386 not taken.
✗ Branch 8474 → 8475 not taken.
✗ Branch 8474 → 8476 not taken.
✗ Branch 8649 → 8650 not taken.
✗ Branch 8649 → 8651 not taken.
✗ Branch 9318 → 9319 not taken.
✓ Branch 9318 → 9320 taken 41586 times.
✗ Branch 9408 → 9409 not taken.
✓ Branch 9408 → 9410 taken 117422 times.
✓ Branch 9696 → 9697 taken 10100 times.
✓ Branch 9696 → 9698 taken 6268 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 64 → 65 taken 5139837 times.
✗ Branch 64 → 66 not taken.
✓ Branch 68 → 69 taken 80742 times.
✗ Branch 68 → 70 not taken.
✓ Branch 81 → 82 taken 1792732 times.
✓ Branch 81 → 83 taken 3427847 times.
✓ Branch 96 → 97 taken 566621 times.
✗ Branch 96 → 98 not taken.
✓ Branch 99 → 100 taken 806806 times.
✗ Branch 99 → 101 not taken.
✓ Branch 147 → 148 taken 731862 times.
✗ Branch 147 → 149 not taken.
✓ Branch 150 → 151 taken 1033999 times.
✗ Branch 150 → 152 not taken.
✓ Branch 169 → 170 taken 947048 times.
✓ Branch 169 → 171 taken 469059 times.
✓ Branch 172 → 173 taken 3349768 times.
✓ Branch 172 → 174 taken 404609 times.
✗ Branch 181 → 182 not taken.
✗ Branch 181 → 183 not taken.
✓ Branch 188 → 189 taken 532223 times.
✓ Branch 188 → 190 taken 34061 times.
✓ Branch 191 → 192 taken 432124 times.
✓ Branch 191 → 193 taken 453329 times.
✗ Branch 203 → 204 not taken.
✗ Branch 203 → 205 not taken.
✓ Branch 244 → 245 taken 36478 times.
✓ Branch 244 → 246 taken 2814915 times.
✓ Branch 247 → 248 taken 220092 times.
✓ Branch 247 → 249 taken 2851393 times.
✓ Branch 252 → 253 taken 1620473 times.
✗ Branch 252 → 254 not taken.
✓ Branch 255 → 256 taken 2851393 times.
✓ Branch 255 → 257 taken 1620473 times.
✓ Branch 260 → 261 taken 4471866 times.
✗ Branch 260 → 262 not taken.
✗ Branch 321 → 322 not taken.
✗ Branch 321 → 323 not taken.
✓ Branch 322 → 323 taken 91768 times.
✗ Branch 322 → 324 not taken.
✓ Branch 325 → 326 taken 346679 times.
✗ Branch 325 → 327 not taken.
✗ Branch 337 → 338 not taken.
✗ Branch 337 → 339 not taken.
✗ Branch 391 → 392 not taken.
✗ Branch 391 → 393 not taken.
✗ Branch 395 → 396 not taken.
✗ Branch 395 → 397 not taken.
✓ Branch 408 → 409 taken 10 times.
✓ Branch 408 → 410 taken 14 times.
✗ Branch 423 → 424 not taken.
✗ Branch 423 → 425 not taken.
✗ Branch 426 → 427 not taken.
✗ Branch 426 → 428 not taken.
✗ Branch 452 → 453 not taken.
✗ Branch 452 → 454 not taken.
✗ Branch 468 → 469 not taken.
✗ Branch 468 → 470 not taken.
✗ Branch 474 → 475 not taken.
✗ Branch 474 → 476 not taken.
✗ Branch 477 → 478 not taken.
✗ Branch 477 → 479 not taken.
✗ Branch 496 → 497 not taken.
✗ Branch 496 → 498 not taken.
✗ Branch 499 → 500 not taken.
✗ Branch 499 → 501 not taken.
✗ Branch 515 → 516 not taken.
✗ Branch 515 → 517 not taken.
✗ Branch 518 → 519 not taken.
✗ Branch 518 → 520 not taken.
✗ Branch 540 → 541 not taken.
✗ Branch 540 → 542 not taken.
✗ Branch 556 → 557 not taken.
✗ Branch 556 → 558 not taken.
✗ Branch 571 → 572 not taken.
✗ Branch 571 → 573 not taken.
✗ Branch 574 → 575 not taken.
✗ Branch 574 → 576 not taken.
✗ Branch 579 → 580 not taken.
✗ Branch 579 → 581 not taken.
✗ Branch 582 → 583 not taken.
✗ Branch 582 → 584 not taken.
✗ Branch 587 → 588 not taken.
✗ Branch 587 → 589 not taken.
✗ Branch 605 → 606 not taken.
✗ Branch 605 → 607 not taken.
✗ Branch 621 → 622 not taken.
✗ Branch 621 → 623 not taken.
✓ Branch 649 → 650 taken 61136 times.
✗ Branch 649 → 651 not taken.
✓ Branch 652 → 653 taken 73731 times.
✗ Branch 652 → 654 not taken.
✓ Branch 675 → 676 taken 1786450 times.
✓ Branch 675 → 677 taken 87 times.
✗ Branch 730 → 731 not taken.
✗ Branch 730 → 732 not taken.
✗ Branch 746 → 747 not taken.
✗ Branch 746 → 748 not taken.
✗ Branch 777 → 778 not taken.
✗ Branch 777 → 779 not taken.
✗ Branch 793 → 794 not taken.
✗ Branch 793 → 795 not taken.
✗ Branch 837 → 838 not taken.
✗ Branch 837 → 839 not taken.
✗ Branch 988 → 989 not taken.
✗ Branch 988 → 990 not taken.
✗ Branch 1004 → 1005 not taken.
✗ Branch 1004 → 1006 not taken.
✗ Branch 1206 → 1207 not taken.
✗ Branch 1206 → 1208 not taken.
✗ Branch 1228 → 1229 not taken.
✗ Branch 1228 → 1230 not taken.
✗ Branch 1272 → 1273 not taken.
✗ Branch 1272 → 1274 not taken.
✗ Branch 1346 → 1347 not taken.
✗ Branch 1346 → 1348 not taken.
✗ Branch 1362 → 1363 not taken.
✗ Branch 1362 → 1364 not taken.
✗ Branch 1477 → 1478 not taken.
✗ Branch 1477 → 1479 not taken.
✗ Branch 1493 → 1494 not taken.
✗ Branch 1493 → 1495 not taken.
✗ Branch 1565 → 1566 not taken.
✗ Branch 1565 → 1567 not taken.
✗ Branch 1581 → 1582 not taken.
✗ Branch 1581 → 1583 not taken.
✗ Branch 1630 → 1631 not taken.
✗ Branch 1630 → 1632 not taken.
✗ Branch 1646 → 1647 not taken.
✗ Branch 1646 → 1648 not taken.
✗ Branch 1755 → 1756 not taken.
✗ Branch 1755 → 1757 not taken.
✗ Branch 1771 → 1772 not taken.
✗ Branch 1771 → 1773 not taken.
✗ Branch 1802 → 1803 not taken.
✗ Branch 1802 → 1804 not taken.
✗ Branch 1818 → 1819 not taken.
✗ Branch 1818 → 1820 not taken.
✗ Branch 1862 → 1863 not taken.
✗ Branch 1862 → 1864 not taken.
✗ Branch 2013 → 2014 not taken.
✗ Branch 2013 → 2015 not taken.
✗ Branch 2029 → 2030 not taken.
✗ Branch 2029 → 2031 not taken.
✗ Branch 2091 → 2092 not taken.
✗ Branch 2091 → 2093 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 836 → 837 not taken.
✓ Branch 836 → 838 taken 6238 times.
✗ Branch 937 → 938 not taken.
✓ Branch 937 → 939 taken 10052 times.
✓ Branch 1121 → 1122 taken 1398 times.
✓ Branch 1121 → 1151 taken 14892 times.
✗ Branch 1464 → 1465 not taken.
✓ Branch 1464 → 1466 taken 212 times.
✗ Branch 1554 → 1555 not taken.
✓ Branch 1554 → 1556 taken 1598 times.
✗ Branch 2538 → 2539 not taken.
✓ Branch 2538 → 2540 taken 2870 times.
✗ Branch 2628 → 2629 not taken.
✓ Branch 2628 → 2630 taken 37016 times.
✓ Branch 4240 → 4241 taken 176 times.
✓ Branch 4240 → 4242 taken 678 times.
✓ Branch 4330 → 4331 taken 566 times.
✓ Branch 4330 → 4332 taken 27028 times.
✓ Branch 5067 → 5068 taken 2962 times.
✓ Branch 5067 → 5069 taken 280 times.
✓ Branch 5157 → 5158 taken 2904 times.
✓ Branch 5157 → 5159 taken 3424 times.
✓ Branch 5789 → 5790 taken 35830 times.
✓ Branch 5789 → 5791 taken 1218 times.
✓ Branch 5879 → 5880 taken 27768 times.
✓ Branch 5879 → 5881 taken 77922 times.
✓ Branch 7005 → 7006 taken 2210 times.
✓ Branch 7005 → 7007 taken 1372 times.
✓ Branch 7095 → 7096 taken 2620 times.
✓ Branch 7095 → 7097 taken 46850 times.
✓ Branch 7980 → 7981 taken 12470 times.
✓ Branch 7980 → 7982 taken 31508 times.
✓ Branch 8070 → 8071 taken 43978 times.
✓ Branch 8070 → 8072 taken 4552 times.
✗ Branch 8478 → 8479 not taken.
✓ Branch 8478 → 8480 taken 6370 times.
✓ Branch 8568 → 8569 taken 6370 times.
✓ Branch 8568 → 8570 taken 43978 times.
✗ Branch 9002 → 9003 not taken.
✓ Branch 9002 → 9004 taken 50348 times.
✗ Branch 10226 → 10227 not taken.
✓ Branch 10226 → 10228 taken 232 times.
✗ Branch 10316 → 10317 not taken.
✓ Branch 10316 → 10318 taken 46 times.
✗ Branch 11824 → 11825 not taken.
✗ Branch 11824 → 11826 not taken.
✗ Branch 11925 → 11926 not taken.
✗ Branch 11925 → 11927 not taken.
✓ Branch 12109 → 12110 taken 17522 times.
✓ Branch 12109 → 12139 taken 32968 times.
✗ Branch 12452 → 12453 not taken.
✗ Branch 12452 → 12454 not taken.
✗ Branch 12542 → 12543 not taken.
✗ Branch 12542 → 12544 not taken.
✗ Branch 13526 → 13527 not taken.
✗ Branch 13526 → 13528 not taken.
✗ Branch 13616 → 13617 not taken.
✗ Branch 13616 → 13618 not taken.
✗ Branch 15228 → 15229 not taken.
✗ Branch 15228 → 15230 not taken.
✗ Branch 15318 → 15319 not taken.
✗ Branch 15318 → 15320 not taken.
✗ Branch 16055 → 16056 not taken.
✗ Branch 16055 → 16057 not taken.
✗ Branch 16145 → 16146 not taken.
✗ Branch 16145 → 16147 not taken.
✗ Branch 16777 → 16778 not taken.
✗ Branch 16777 → 16779 not taken.
✗ Branch 16867 → 16868 not taken.
✗ Branch 16867 → 16869 not taken.
✗ Branch 17993 → 17994 not taken.
✗ Branch 17993 → 17995 not taken.
✗ Branch 18083 → 18084 not taken.
✗ Branch 18083 → 18085 not taken.
✗ Branch 18968 → 18969 not taken.
✗ Branch 18968 → 18970 not taken.
✗ Branch 19058 → 19059 not taken.
✗ Branch 19058 → 19060 not taken.
✗ Branch 19466 → 19467 not taken.
✗ Branch 19466 → 19468 not taken.
✗ Branch 19556 → 19557 not taken.
✗ Branch 19556 → 19558 not taken.
✗ Branch 19990 → 19991 not taken.
✗ Branch 19990 → 19992 not taken.
✗ Branch 21214 → 21215 not taken.
✓ Branch 21214 → 21216 taken 41586 times.
✗ Branch 21304 → 21305 not taken.
✓ Branch 21304 → 21306 taken 117422 times.
✓ Branch 22055 → 22056 taken 10100 times.
✓ Branch 22055 → 22057 taken 6268 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 185 → 186 not taken.
✗ Branch 185 → 187 not taken.
✗ Branch 207 → 208 not taken.
✗ Branch 207 → 209 not taken.
✗ Branch 252 → 253 not taken.
✗ Branch 252 → 254 not taken.
✗ Branch 338 → 339 not taken.
✗ Branch 338 → 340 not taken.
✗ Branch 354 → 355 not taken.
✗ Branch 354 → 356 not taken.
✗ Branch 554 → 555 not taken.
✗ Branch 554 → 556 not taken.
✗ Branch 570 → 571 not taken.
✗ Branch 570 → 572 not taken.
✗ Branch 945 → 946 not taken.
✗ Branch 945 → 947 not taken.
✗ Branch 961 → 962 not taken.
✗ Branch 961 → 963 not taken.
✗ Branch 1119 → 1120 not taken.
✗ Branch 1119 → 1121 not taken.
✗ Branch 1135 → 1136 not taken.
✗ Branch 1135 → 1137 not taken.
✗ Branch 1265 → 1266 not taken.
✗ Branch 1265 → 1267 not taken.
✗ Branch 1281 → 1282 not taken.
✗ Branch 1281 → 1283 not taken.
✗ Branch 1529 → 1530 not taken.
✗ Branch 1529 → 1531 not taken.
✗ Branch 1545 → 1546 not taken.
✗ Branch 1545 → 1547 not taken.
✗ Branch 1739 → 1740 not taken.
✗ Branch 1739 → 1741 not taken.
✗ Branch 1755 → 1756 not taken.
✗ Branch 1755 → 1757 not taken.
✗ Branch 1831 → 1832 not taken.
✗ Branch 1831 → 1833 not taken.
✗ Branch 1847 → 1848 not taken.
✗ Branch 1847 → 1849 not taken.
✗ Branch 1936 → 1937 not taken.
✗ Branch 1936 → 1938 not taken.
✗ Branch 2240 → 2241 not taken.
✗ Branch 2240 → 2242 not taken.
✗ Branch 2256 → 2257 not taken.
✗ Branch 2256 → 2258 not taken.
✗ Branch 2566 → 2567 not taken.
✗ Branch 2566 → 2568 not taken.
✗ Branch 2588 → 2589 not taken.
✗ Branch 2588 → 2590 not taken.
✗ Branch 2633 → 2634 not taken.
✗ Branch 2633 → 2635 not taken.
✗ Branch 2719 → 2720 not taken.
✗ Branch 2719 → 2721 not taken.
✗ Branch 2735 → 2736 not taken.
✗ Branch 2735 → 2737 not taken.
✗ Branch 2935 → 2936 not taken.
✗ Branch 2935 → 2937 not taken.
✗ Branch 2951 → 2952 not taken.
✗ Branch 2951 → 2953 not taken.
✗ Branch 3326 → 3327 not taken.
✗ Branch 3326 → 3328 not taken.
✗ Branch 3342 → 3343 not taken.
✗ Branch 3342 → 3344 not taken.
✗ Branch 3500 → 3501 not taken.
✗ Branch 3500 → 3502 not taken.
✗ Branch 3516 → 3517 not taken.
✗ Branch 3516 → 3518 not taken.
✗ Branch 3646 → 3647 not taken.
✗ Branch 3646 → 3648 not taken.
✗ Branch 3662 → 3663 not taken.
✗ Branch 3662 → 3664 not taken.
✗ Branch 3910 → 3911 not taken.
✗ Branch 3910 → 3912 not taken.
✗ Branch 3926 → 3927 not taken.
✗ Branch 3926 → 3928 not taken.
✗ Branch 4120 → 4121 not taken.
✗ Branch 4120 → 4122 not taken.
✗ Branch 4136 → 4137 not taken.
✗ Branch 4136 → 4138 not taken.
✗ Branch 4212 → 4213 not taken.
✗ Branch 4212 → 4214 not taken.
✗ Branch 4228 → 4229 not taken.
✗ Branch 4228 → 4230 not taken.
✗ Branch 4317 → 4318 not taken.
✗ Branch 4317 → 4319 not taken.
✗ Branch 4621 → 4622 not taken.
✗ Branch 4621 → 4623 not taken.
✗ Branch 4637 → 4638 not taken.
✗ Branch 4637 → 4639 not taken.
✗ Branch 4804 → 4805 not taken.
✗ Branch 4804 → 4806 not taken.
40517229 if (a.empty()) return b;
439 30201766 ch_nxt[a.v[1] >> 1] = b.v[0] ^ (a.v[1] & 1);
440 29125790 return {{a.v[0], b.v[1]}};
441 };
442 42168648 auto unit_list = [&] [[gnu::always_inline]] (int item) -> item_list {
443
1/4
✓ Branch 63 → 64 taken 5139837 times.
✗ Branch 63 → 66 not taken.
✗ Branch 390 → 391 not taken.
✗ Branch 390 → 393 not taken.
6889565 return {{item << 1, item << 1}};
444 };
445
446
6/10
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 31 → 32 taken 10100 times.
✓ Branch 34 → 35 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9 → 10 taken 87 times.
✓ Branch 10 → 11 taken 87 times.
✗ Branch 12 → 13 not taken.
✗ Branch 13 → 14 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 31 → 32 taken 10100 times.
✓ Branch 34 → 35 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 12 → 13 not taken.
✗ Branch 13 → 14 not taken.
20287 std::vector<std::array<int, 2>> item_vs; item_vs.reserve(1 + NV + 2 * NE); item_vs.resize(1 + NV + NE, {-1, -1});
447
6/10
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 37 → 38 taken 10100 times.
✓ Branch 40 → 41 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 11 → 12 taken 87 times.
✓ Branch 12 → 13 taken 87 times.
✗ Branch 14 → 15 not taken.
✗ Branch 15 → 16 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 37 → 38 taken 10100 times.
✓ Branch 40 → 41 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 14 → 15 not taken.
✗ Branch 15 → 16 not taken.
20287 std::vector<item_list> item_ch; item_ch.reserve(1 + NV + 2 * NE); item_ch.resize(1 + NV + NE, item_list{});
448
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 43 → 44 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 13 → 14 taken 87 times.
✗ Branch 16 → 17 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 43 → 44 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 16 → 17 not taken.
20287 std::vector<node_type> item_types; item_types.reserve(1 + NV + 2 * NE);
449
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 45 → 46 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 14 → 15 taken 87 times.
✗ Branch 17 → 18 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 45 → 46 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 17 → 18 not taken.
20287 item_types.resize(1, node_type::F);
450
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 48 → 49 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 15 → 16 taken 87 times.
✗ Branch 18 → 19 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 48 → 49 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 18 → 19 not taken.
20287 item_types.resize(1 + NV, node_type::V);
451
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 51 → 52 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 16 → 17 taken 87 times.
✗ Branch 19 → 20 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 51 → 52 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 19 → 20 not taken.
20287 item_types.resize(1 + NV + NE, node_type::Q);
452
453 // Quarter edges for planar embedding building.
454 // Each vedge has 4 entries by 4 * vedge_id + 2 * source_vert + is_cw (is_cw is arbitrary)
455 // vedges are identified with what item they cap, numbered by (item - 1 - NV)
456
4/6
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 57 → 58 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 17 → 18 taken 87 times.
✓ Branch 18 → 19 taken 87 times.
✗ Branch 22 → 23 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 57 → 58 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22 → 23 not taken.
20287 std::vector<int> quarter_edge_matches(with_planarity ? 8 * NE + 4 : 0, -1);
457 struct nonplanarity_certficate_t {};
458 20287 std::vector<std::expected<std::array<int, 4>, nonplanarity_certficate_t>> node_planarity;
459
1/2
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 61 → 62 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 24 → 25 not taken.
10100 if constexpr (with_planarity) node_planarity.reserve(NE);
460
461 20287 int tot_blocks = 0;
462 20287 int tot_self_loops = 0;
463
464 {
465 10510987 auto alloc_item = [&] [[gnu::always_inline]] (node_type type) -> int {
466 21445452 int item = int(item_vs.size());
467
12/91
None:
✗ Branch 3 → 4 not taken.
✗ Branch 10 → 11 not taken.
✗ Branch 17 → 18 not taken.
✗ Branch 25 → 26 not taken.
✗ Branch 26 → 27 not taken.
✗ Branch 52 → 53 not taken.
✗ Branch 78 → 79 not taken.
✗ Branch 79 → 80 not taken.
✗ Branch 91 → 92 not taken.
✗ Branch 239 → 240 not taken.
✗ Branch 254 → 255 not taken.
✗ Branch 281 → 282 not taken.
✗ Branch 298 → 299 not taken.
✗ Branch 314 → 315 not taken.
✗ Branch 379 → 380 not taken.
✗ Branch 515 → 516 not taken.
✗ Branch 530 → 531 not taken.
✗ Branch 557 → 558 not taken.
✗ Branch 775 → 776 not taken.
✗ Branch 790 → 791 not taken.
✗ Branch 817 → 818 not taken.
✗ Branch 1481 → 1482 not taken.
✗ Branch 1497 → 1498 not taken.
✗ Branch 1562 → 1563 not taken.
✗ Branch 1984 → 1985 not taken.
✗ Branch 2000 → 2001 not taken.
✗ Branch 2065 → 2066 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 57 → 58 taken 5139837 times.
✗ Branch 75 → 76 not taken.
✓ Branch 108 → 109 taken 608 times.
✓ Branch 118 → 119 taken 1071046 times.
✓ Branch 139 → 140 taken 427479 times.
✗ Branch 159 → 160 not taken.
✓ Branch 207 → 208 taken 332 times.
✓ Branch 215 → 216 taken 2943421 times.
✗ Branch 220 → 221 not taken.
✓ Branch 236 → 237 taken 334812 times.
✓ Branch 293 → 294 taken 438431 times.
✓ Branch 314 → 315 taken 16 times.
✗ Branch 381 → 382 not taken.
✗ Branch 384 → 385 not taken.
✗ Branch 396 → 397 not taken.
✓ Branch 402 → 403 taken 24 times.
✗ Branch 423 → 424 not taken.
✗ Branch 435 → 436 not taken.
✗ Branch 445 → 446 not taken.
✗ Branch 466 → 467 not taken.
✗ Branch 534 → 535 not taken.
✗ Branch 542 → 543 not taken.
✗ Branch 563 → 564 not taken.
✓ Branch 620 → 621 taken 128745 times.
✓ Branch 641 → 642 taken 5949 times.
✗ Branch 657 → 658 not taken.
✗ Branch 672 → 673 not taken.
✗ Branch 699 → 700 not taken.
✗ Branch 917 → 918 not taken.
✗ Branch 932 → 933 not taken.
✗ Branch 959 → 960 not taken.
✗ Branch 1184 → 1185 not taken.
✗ Branch 1245 → 1246 not taken.
✗ Branch 1406 → 1407 not taken.
✗ Branch 1421 → 1422 not taken.
✗ Branch 1448 → 1449 not taken.
✗ Branch 1682 → 1683 not taken.
✗ Branch 1697 → 1698 not taken.
✗ Branch 1724 → 1725 not taken.
✗ Branch 1942 → 1943 not taken.
✗ Branch 1957 → 1958 not taken.
✗ Branch 1984 → 1985 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 162 → 163 not taken.
✗ Branch 224 → 225 not taken.
✗ Branch 443 → 444 not taken.
✗ Branch 459 → 460 not taken.
✗ Branch 524 → 525 not taken.
✗ Branch 1626 → 1627 not taken.
✗ Branch 1642 → 1643 not taken.
✗ Branch 1707 → 1708 not taken.
✗ Branch 2129 → 2130 not taken.
✗ Branch 2145 → 2146 not taken.
✗ Branch 2210 → 2211 not taken.
✗ Branch 2543 → 2544 not taken.
✗ Branch 2605 → 2606 not taken.
✗ Branch 2824 → 2825 not taken.
✗ Branch 2840 → 2841 not taken.
✗ Branch 2905 → 2906 not taken.
✗ Branch 4007 → 4008 not taken.
✗ Branch 4023 → 4024 not taken.
✗ Branch 4088 → 4089 not taken.
✗ Branch 4510 → 4511 not taken.
✗ Branch 4526 → 4527 not taken.
✗ Branch 4591 → 4592 not taken.
11418804 item_vs.push_back({});
468
12/91
None:
✗ Branch 4 → 5 not taken.
✗ Branch 11 → 12 not taken.
✗ Branch 18 → 19 not taken.
✗ Branch 26 → 27 not taken.
✗ Branch 27 → 28 not taken.
✗ Branch 53 → 54 not taken.
✗ Branch 79 → 80 not taken.
✗ Branch 80 → 81 not taken.
✗ Branch 92 → 93 not taken.
✗ Branch 240 → 241 not taken.
✗ Branch 255 → 256 not taken.
✗ Branch 282 → 283 not taken.
✗ Branch 299 → 300 not taken.
✗ Branch 315 → 316 not taken.
✗ Branch 380 → 381 not taken.
✗ Branch 516 → 517 not taken.
✗ Branch 531 → 532 not taken.
✗ Branch 558 → 559 not taken.
✗ Branch 776 → 777 not taken.
✗ Branch 791 → 792 not taken.
✗ Branch 818 → 819 not taken.
✗ Branch 1482 → 1483 not taken.
✗ Branch 1498 → 1499 not taken.
✗ Branch 1563 → 1564 not taken.
✗ Branch 1985 → 1986 not taken.
✗ Branch 2001 → 2002 not taken.
✗ Branch 2066 → 2067 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 58 → 59 taken 5139837 times.
✗ Branch 76 → 77 not taken.
✓ Branch 109 → 110 taken 608 times.
✓ Branch 119 → 120 taken 1071046 times.
✓ Branch 140 → 141 taken 427479 times.
✗ Branch 160 → 161 not taken.
✓ Branch 208 → 209 taken 332 times.
✓ Branch 216 → 217 taken 2943421 times.
✗ Branch 221 → 222 not taken.
✓ Branch 237 → 238 taken 334812 times.
✓ Branch 294 → 295 taken 438431 times.
✓ Branch 315 → 316 taken 16 times.
✗ Branch 382 → 383 not taken.
✗ Branch 385 → 386 not taken.
✗ Branch 397 → 398 not taken.
✓ Branch 403 → 404 taken 24 times.
✗ Branch 424 → 425 not taken.
✗ Branch 436 → 437 not taken.
✗ Branch 446 → 447 not taken.
✗ Branch 467 → 468 not taken.
✗ Branch 535 → 536 not taken.
✗ Branch 543 → 544 not taken.
✗ Branch 564 → 565 not taken.
✓ Branch 621 → 622 taken 128745 times.
✓ Branch 642 → 643 taken 5949 times.
✗ Branch 658 → 659 not taken.
✗ Branch 673 → 674 not taken.
✗ Branch 700 → 701 not taken.
✗ Branch 918 → 919 not taken.
✗ Branch 933 → 934 not taken.
✗ Branch 960 → 961 not taken.
✗ Branch 1185 → 1186 not taken.
✗ Branch 1246 → 1247 not taken.
✗ Branch 1407 → 1408 not taken.
✗ Branch 1422 → 1423 not taken.
✗ Branch 1449 → 1450 not taken.
✗ Branch 1683 → 1684 not taken.
✗ Branch 1698 → 1699 not taken.
✗ Branch 1725 → 1726 not taken.
✗ Branch 1943 → 1944 not taken.
✗ Branch 1958 → 1959 not taken.
✗ Branch 1985 → 1986 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 163 → 164 not taken.
✗ Branch 225 → 226 not taken.
✗ Branch 444 → 445 not taken.
✗ Branch 460 → 461 not taken.
✗ Branch 525 → 526 not taken.
✗ Branch 1627 → 1628 not taken.
✗ Branch 1643 → 1644 not taken.
✗ Branch 1708 → 1709 not taken.
✗ Branch 2130 → 2131 not taken.
✗ Branch 2146 → 2147 not taken.
✗ Branch 2211 → 2212 not taken.
✗ Branch 2544 → 2545 not taken.
✗ Branch 2606 → 2607 not taken.
✗ Branch 2825 → 2826 not taken.
✗ Branch 2841 → 2842 not taken.
✗ Branch 2906 → 2907 not taken.
✗ Branch 4008 → 4009 not taken.
✗ Branch 4024 → 4025 not taken.
✗ Branch 4089 → 4090 not taken.
✗ Branch 4511 → 4512 not taken.
✗ Branch 4527 → 4528 not taken.
✗ Branch 4592 → 4593 not taken.
11418804 item_ch.push_back({});
469
36/125
None:
✗ Branch 19 → 20 not taken.
✗ Branch 80 → 81 not taken.
✗ Branch 81 → 82 not taken.
✗ Branch 241 → 242 not taken.
✗ Branch 256 → 257 not taken.
✗ Branch 283 → 284 not taken.
✗ Branch 300 → 301 not taken.
✗ Branch 316 → 317 not taken.
✗ Branch 381 → 382 not taken.
✗ Branch 517 → 518 not taken.
✗ Branch 532 → 533 not taken.
✗ Branch 559 → 560 not taken.
✗ Branch 777 → 778 not taken.
✗ Branch 792 → 793 not taken.
✗ Branch 819 → 820 not taken.
✗ Branch 1483 → 1484 not taken.
✗ Branch 1499 → 1500 not taken.
✗ Branch 1564 → 1565 not taken.
✗ Branch 1986 → 1987 not taken.
✗ Branch 2002 → 2003 not taken.
✗ Branch 2067 → 2068 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 742 → 743 taken 6238 times.
✗ Branch 1017 → 1018 not taken.
✓ Branch 1667 → 1668 taken 396 times.
✓ Branch 1723 → 1724 taken 19745 times.
✓ Branch 1895 → 1896 taken 11433 times.
✓ Branch 2992 → 2993 taken 8130 times.
✓ Branch 3046 → 3047 taken 2417 times.
✓ Branch 3218 → 3219 taken 1998 times.
✓ Branch 4220 → 4221 taken 139 times.
✓ Branch 4391 → 4392 taken 136 times.
✗ Branch 5550 → 5551 not taken.
✓ Branch 5825 → 5826 taken 50490 times.
✗ Branch 6476 → 6477 not taken.
✗ Branch 6532 → 6533 not taken.
✗ Branch 6704 → 6705 not taken.
✗ Branch 7801 → 7802 not taken.
✗ Branch 7855 → 7856 not taken.
✗ Branch 8027 → 8028 not taken.
✓ Branch 9029 → 9030 taken 79504 times.
✓ Branch 9200 → 9201 taken 51400 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 59 → 60 taken 5139837 times.
✗ Branch 77 → 78 not taken.
✓ Branch 110 → 111 taken 608 times.
✓ Branch 120 → 121 taken 1071046 times.
✓ Branch 141 → 142 taken 427479 times.
✗ Branch 161 → 162 not taken.
✓ Branch 209 → 210 taken 332 times.
✓ Branch 217 → 218 taken 2943421 times.
✗ Branch 222 → 223 not taken.
✓ Branch 238 → 239 taken 334812 times.
✓ Branch 295 → 296 taken 438431 times.
✓ Branch 316 → 317 taken 16 times.
✗ Branch 383 → 384 not taken.
✗ Branch 386 → 387 not taken.
✗ Branch 398 → 399 not taken.
✓ Branch 404 → 405 taken 24 times.
✗ Branch 425 → 426 not taken.
✗ Branch 437 → 438 not taken.
✗ Branch 447 → 448 not taken.
✗ Branch 468 → 469 not taken.
✗ Branch 536 → 537 not taken.
✗ Branch 544 → 545 not taken.
✗ Branch 565 → 566 not taken.
✓ Branch 622 → 623 taken 128745 times.
✓ Branch 643 → 644 taken 5949 times.
✗ Branch 659 → 660 not taken.
✗ Branch 674 → 675 not taken.
✗ Branch 701 → 702 not taken.
✗ Branch 919 → 920 not taken.
✗ Branch 934 → 935 not taken.
✗ Branch 961 → 962 not taken.
✗ Branch 1186 → 1187 not taken.
✗ Branch 1247 → 1248 not taken.
✗ Branch 1408 → 1409 not taken.
✗ Branch 1423 → 1424 not taken.
✗ Branch 1450 → 1451 not taken.
✗ Branch 1684 → 1685 not taken.
✗ Branch 1699 → 1700 not taken.
✗ Branch 1726 → 1727 not taken.
✗ Branch 1944 → 1945 not taken.
✗ Branch 1959 → 1960 not taken.
✗ Branch 1986 → 1987 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 748 → 749 taken 6238 times.
✗ Branch 1028 → 1029 not taken.
✓ Branch 1988 → 1989 taken 396 times.
✓ Branch 2049 → 2050 taken 19745 times.
✓ Branch 2415 → 2416 taken 11433 times.
✓ Branch 7502 → 7503 taken 8130 times.
✓ Branch 7561 → 7562 taken 2417 times.
✓ Branch 7857 → 7858 taken 1998 times.
✓ Branch 9808 → 9809 taken 139 times.
✓ Branch 10103 → 10104 taken 136 times.
✗ Branch 11736 → 11737 not taken.
✓ Branch 12016 → 12017 taken 50490 times.
✗ Branch 12976 → 12977 not taken.
✗ Branch 13037 → 13038 not taken.
✗ Branch 13403 → 13404 not taken.
✗ Branch 18490 → 18491 not taken.
✗ Branch 18549 → 18550 not taken.
✗ Branch 18845 → 18846 not taken.
✓ Branch 20796 → 20797 taken 79504 times.
✓ Branch 21091 → 21092 taken 51400 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 164 → 165 not taken.
✗ Branch 226 → 227 not taken.
✗ Branch 445 → 446 not taken.
✗ Branch 461 → 462 not taken.
✗ Branch 526 → 527 not taken.
✗ Branch 1628 → 1629 not taken.
✗ Branch 1644 → 1645 not taken.
✗ Branch 1709 → 1710 not taken.
✗ Branch 2131 → 2132 not taken.
✗ Branch 2147 → 2148 not taken.
✗ Branch 2212 → 2213 not taken.
✗ Branch 2545 → 2546 not taken.
✗ Branch 2607 → 2608 not taken.
✗ Branch 2826 → 2827 not taken.
✗ Branch 2842 → 2843 not taken.
✗ Branch 2907 → 2908 not taken.
✗ Branch 4009 → 4010 not taken.
✗ Branch 4025 → 4026 not taken.
✗ Branch 4090 → 4091 not taken.
✗ Branch 4512 → 4513 not taken.
✗ Branch 4528 → 4529 not taken.
✗ Branch 4593 → 4594 not taken.
10954752 item_types.push_back(type);
470
12/91
None:
✗ Branch 6 → 7 not taken.
✗ Branch 13 → 14 not taken.
✗ Branch 20 → 21 not taken.
✗ Branch 28 → 29 not taken.
✗ Branch 29 → 30 not taken.
✗ Branch 55 → 56 not taken.
✗ Branch 81 → 82 not taken.
✗ Branch 82 → 83 not taken.
✗ Branch 94 → 95 not taken.
✗ Branch 242 → 243 not taken.
✗ Branch 257 → 258 not taken.
✗ Branch 284 → 285 not taken.
✗ Branch 301 → 302 not taken.
✗ Branch 317 → 318 not taken.
✗ Branch 382 → 383 not taken.
✗ Branch 518 → 519 not taken.
✗ Branch 533 → 534 not taken.
✗ Branch 560 → 561 not taken.
✗ Branch 778 → 779 not taken.
✗ Branch 793 → 794 not taken.
✗ Branch 820 → 821 not taken.
✗ Branch 1484 → 1485 not taken.
✗ Branch 1500 → 1501 not taken.
✗ Branch 1565 → 1566 not taken.
✗ Branch 1987 → 1988 not taken.
✗ Branch 2003 → 2004 not taken.
✗ Branch 2068 → 2069 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 60 → 61 taken 5139837 times.
✗ Branch 78 → 79 not taken.
✓ Branch 111 → 112 taken 608 times.
✓ Branch 121 → 122 taken 1071046 times.
✓ Branch 142 → 143 taken 427479 times.
✗ Branch 162 → 163 not taken.
✓ Branch 210 → 211 taken 332 times.
✓ Branch 218 → 219 taken 2943421 times.
✗ Branch 223 → 224 not taken.
✓ Branch 239 → 240 taken 334812 times.
✓ Branch 296 → 297 taken 438431 times.
✓ Branch 317 → 318 taken 16 times.
✗ Branch 384 → 385 not taken.
✗ Branch 387 → 388 not taken.
✗ Branch 399 → 400 not taken.
✓ Branch 405 → 406 taken 24 times.
✗ Branch 426 → 427 not taken.
✗ Branch 438 → 439 not taken.
✗ Branch 448 → 449 not taken.
✗ Branch 469 → 470 not taken.
✗ Branch 537 → 538 not taken.
✗ Branch 545 → 546 not taken.
✗ Branch 566 → 567 not taken.
✓ Branch 623 → 624 taken 128745 times.
✓ Branch 644 → 645 taken 5949 times.
✗ Branch 660 → 661 not taken.
✗ Branch 675 → 676 not taken.
✗ Branch 702 → 703 not taken.
✗ Branch 920 → 921 not taken.
✗ Branch 935 → 936 not taken.
✗ Branch 962 → 963 not taken.
✗ Branch 1187 → 1188 not taken.
✗ Branch 1248 → 1249 not taken.
✗ Branch 1409 → 1410 not taken.
✗ Branch 1424 → 1425 not taken.
✗ Branch 1451 → 1452 not taken.
✗ Branch 1685 → 1686 not taken.
✗ Branch 1700 → 1701 not taken.
✗ Branch 1727 → 1728 not taken.
✗ Branch 1945 → 1946 not taken.
✗ Branch 1960 → 1961 not taken.
✗ Branch 1987 → 1988 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 165 → 166 not taken.
✗ Branch 227 → 228 not taken.
✗ Branch 446 → 447 not taken.
✗ Branch 462 → 463 not taken.
✗ Branch 527 → 528 not taken.
✗ Branch 1629 → 1630 not taken.
✗ Branch 1645 → 1646 not taken.
✗ Branch 1710 → 1711 not taken.
✗ Branch 2132 → 2133 not taken.
✗ Branch 2148 → 2149 not taken.
✗ Branch 2213 → 2214 not taken.
✗ Branch 2546 → 2547 not taken.
✗ Branch 2608 → 2609 not taken.
✗ Branch 2827 → 2828 not taken.
✗ Branch 2843 → 2844 not taken.
✗ Branch 2908 → 2909 not taken.
✗ Branch 4010 → 4011 not taken.
✗ Branch 4026 → 4027 not taken.
✗ Branch 4091 → 4092 not taken.
✗ Branch 4513 → 4514 not taken.
✗ Branch 4529 → 4530 not taken.
✗ Branch 4594 → 4595 not taken.
11243506 ch_nxt.push_back(-1);
471
12/53
None:
✗ Branch 21 → 22 not taken.
✗ Branch 83 → 84 not taken.
✗ Branch 302 → 303 not taken.
✗ Branch 318 → 319 not taken.
✗ Branch 383 → 384 not taken.
✗ Branch 1485 → 1486 not taken.
✗ Branch 1501 → 1502 not taken.
✗ Branch 1566 → 1567 not taken.
✗ Branch 1988 → 1989 not taken.
✗ Branch 2004 → 2005 not taken.
✗ Branch 2069 → 2070 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 762 → 763 taken 6238 times.
✗ Branch 1042 → 1043 not taken.
✓ Branch 2002 → 2437 taken 396 times.
✓ Branch 2063 → 2064 taken 19745 times.
✓ Branch 2429 → 2430 taken 11433 times.
✓ Branch 7516 → 7879 taken 8130 times.
✓ Branch 7575 → 7576 taken 2417 times.
✓ Branch 7871 → 7872 taken 1998 times.
✓ Branch 9822 → 10125 taken 139 times.
✓ Branch 10117 → 10118 taken 136 times.
✗ Branch 11750 → 11751 not taken.
✓ Branch 12030 → 12031 taken 50490 times.
✗ Branch 12990 → 13425 not taken.
✗ Branch 13051 → 13052 not taken.
✗ Branch 13417 → 13418 not taken.
✗ Branch 18504 → 18867 not taken.
✗ Branch 18563 → 18564 not taken.
✗ Branch 18859 → 18860 not taken.
✓ Branch 20810 → 21113 taken 79504 times.
✓ Branch 21105 → 21106 taken 51400 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 166 → 167 not taken.
✗ Branch 228 → 229 not taken.
✗ Branch 447 → 448 not taken.
✗ Branch 463 → 464 not taken.
✗ Branch 528 → 529 not taken.
✗ Branch 1630 → 1631 not taken.
✗ Branch 1646 → 1647 not taken.
✗ Branch 1711 → 1712 not taken.
✗ Branch 2133 → 2134 not taken.
✗ Branch 2149 → 2150 not taken.
✗ Branch 2214 → 2215 not taken.
✗ Branch 2547 → 2548 not taken.
✗ Branch 2609 → 2610 not taken.
✗ Branch 2828 → 2829 not taken.
✗ Branch 2844 → 2845 not taken.
✗ Branch 2909 → 2910 not taken.
✗ Branch 4011 → 4012 not taken.
✗ Branch 4027 → 4028 not taken.
✗ Branch 4092 → 4093 not taken.
✗ Branch 4514 → 4515 not taken.
✗ Branch 4530 → 4531 not taken.
✗ Branch 4595 → 4596 not taken.
232026 if constexpr (with_planarity) node_planarity.emplace_back();
472 ✗ return item;
473 };
474
475 // Declare these here: most of our code will be in terms of v_start / top_depth, so we'll want to read these out
476
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 66 → 67 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 18 → 19 taken 87 times.
✗ Branch 26 → 27 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 67 → 68 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 27 → 28 not taken.
20287 std::vector<int> stack_verts(NV);
477
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 70 → 71 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 19 → 20 taken 87 times.
✗ Branch 30 → 31 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 71 → 72 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 31 → 32 not taken.
20287 std::vector<int8_t> stack_dir(NV); // really bool, but I don't want vector<bool>
478
479 22561244 auto make_vs = [&] [[gnu::always_inline]] (int v_start, int top_depth) -> std::array<int, 2> {
480
26/40
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 773 → 780 taken 6238 times.
✗ Branch 773 → 781 not taken.
✓ Branch 1168 → 1169 taken 7144 times.
✓ Branch 1168 → 1170 taken 61198 times.
✓ Branch 2243 → 2244 taken 2870 times.
✓ Branch 2243 → 2245 taken 37016 times.
✓ Branch 3990 → 3991 taken 11250 times.
✓ Branch 3990 → 3992 taken 1714 times.
✓ Branch 4739 → 4740 taken 232 times.
✓ Branch 4739 → 4741 taken 46 times.
✗ Branch 5581 → 5588 not taken.
✗ Branch 5581 → 5589 not taken.
✓ Branch 5977 → 5978 taken 281418 times.
✓ Branch 5977 → 5979 taken 88460 times.
✗ Branch 7052 → 7053 not taken.
✗ Branch 7052 → 7054 not taken.
✗ Branch 8799 → 8800 not taken.
✗ Branch 8799 → 8801 not taken.
✓ Branch 9548 → 9549 taken 41586 times.
✓ Branch 9548 → 9550 taken 117422 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 784 → 791 taken 6238 times.
✗ Branch 784 → 792 not taken.
✓ Branch 1186 → 1187 taken 7144 times.
✓ Branch 1186 → 1188 taken 61198 times.
✓ Branch 3322 → 3323 taken 2870 times.
✓ Branch 3322 → 3324 taken 37016 times.
✓ Branch 9485 → 9486 taken 11250 times.
✓ Branch 9485 → 9487 taken 1714 times.
✓ Branch 10859 → 10860 taken 232 times.
✓ Branch 10859 → 10861 taken 46 times.
✗ Branch 11772 → 11779 not taken.
✗ Branch 11772 → 11780 not taken.
✓ Branch 12174 → 12175 taken 281418 times.
✓ Branch 12174 → 12176 taken 88460 times.
✗ Branch 14310 → 14311 not taken.
✗ Branch 14310 → 14312 not taken.
✗ Branch 20473 → 20474 not taken.
✗ Branch 20473 → 20475 not taken.
✓ Branch 21847 → 21848 taken 41586 times.
✓ Branch 21847 → 21849 taken 117422 times.
46395102 return set_sides(stack_dir[top_depth], stack_verts[top_depth], v_start);
481 };
482
483 20287 int nxt_edge_idx = 0; // Counts backedges only
484
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 76 → 77 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 20 → 21 taken 87 times.
✗ Branch 34 → 35 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 77 → 78 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 35 → 36 not taken.
20287 std::vector<int> first_occurrence(NV); // First backedge to this depth
485
486
4/6
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 82 → 83 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 21 → 22 taken 87 times.
✓ Branch 22 → 23 taken 87 times.
✗ Branch 38 → 39 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 83 → 84 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 39 → 40 not taken.
20287 std::vector<int> edge_top_depths(with_planarity ? 2 * NE : 0, -1);
487
488 struct tstack_planarity_side_t {
489 // For each side, store pointers to the "linked lists" of the edges inside.
490 // v[0] is the outer / longer edges and v[1] is the inner / shorter edges, matching the outside-in sort order.
491
492 // bot_ends are the outer/innermost exposed pieces of the walk down the ear in the tree (they're connected to the bottommost/topmost vertices of the tree path)
493 std::array<int, 2> bot_ends{-1, -1};
494 struct top_t {
495 int end = -1;
496 int depth = -1;
497 };
498 // top_ends are the outer/innermost exposed backedges
499 // depths should be increasing going inwards
500 std::array<top_t, 2> tops{top_t{-1, -1}, top_t{-1, -1}};
501 };
502 struct tstack_planarity_t {
503 // The convention is that sides[0].tops[0].depth == top_depth, i.e. at least one minimal return lives on side 0
504 std::array<tstack_planarity_side_t, 2> sides;
505 };
506 struct tstack_nonplanarity_t {
507 // TODO: What's the nonplanarity certificate look like?
508 };
509 using tstack_maybe_planarity_t = std::conditional_t<with_planarity, std::expected<tstack_planarity_t, tstack_nonplanarity_t>, std::monostate>;
510 20287 auto merge_planarity = [&] [[gnu::always_inline]] (tstack_maybe_planarity_t& a, const tstack_maybe_planarity_t& b) -> void {
511 if constexpr (with_planarity) {
512
13/98
None:
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
✗ Branch 48 → 49 not taken.
✗ Branch 48 → 50 not taken.
✗ Branch 210 → 211 not taken.
✗ Branch 210 → 212 not taken.
✗ Branch 220 → 221 not taken.
✗ Branch 220 → 222 not taken.
✗ Branch 384 → 385 not taken.
✗ Branch 384 → 386 not taken.
✗ Branch 436 → 437 not taken.
✗ Branch 436 → 438 not taken.
✗ Branch 827 → 828 not taken.
✗ Branch 827 → 829 not taken.
✗ Branch 1001 → 1002 not taken.
✗ Branch 1001 → 1003 not taken.
✗ Branch 1147 → 1148 not taken.
✗ Branch 1147 → 1149 not taken.
✗ Branch 1411 → 1412 not taken.
✗ Branch 1411 → 1413 not taken.
✗ Branch 1621 → 1622 not taken.
✗ Branch 1621 → 1623 not taken.
✗ Branch 1713 → 1714 not taken.
✗ Branch 1713 → 1715 not taken.
✗ Branch 2122 → 2123 not taken.
✗ Branch 2122 → 2124 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1614 → 1615 taken 1810 times.
✗ Branch 1614 → 1857 not taken.
✓ Branch 2688 → 2689 taken 39740 times.
✓ Branch 2688 → 2931 taken 146 times.
✓ Branch 4390 → 4391 taken 28326 times.
✗ Branch 4390 → 4633 not taken.
✓ Branch 5217 → 5218 taken 6526 times.
✗ Branch 5217 → 5460 not taken.
✓ Branch 5939 → 5940 taken 69792 times.
✓ Branch 5939 → 6182 taken 36212 times.
✓ Branch 7155 → 7156 taken 53118 times.
✓ Branch 7155 → 7398 taken 858 times.
✓ Branch 8130 → 8131 taken 50348 times.
✗ Branch 8130 → 8373 not taken.
✓ Branch 8628 → 8629 taken 50348 times.
✗ Branch 8628 → 8871 not taken.
✓ Branch 10376 → 10377 taken 278 times.
✗ Branch 10376 → 10619 not taken.
✗ Branch 12602 → 12603 not taken.
✗ Branch 12602 → 12845 not taken.
✗ Branch 13676 → 13677 not taken.
✗ Branch 13676 → 13919 not taken.
✗ Branch 15378 → 15379 not taken.
✗ Branch 15378 → 15621 not taken.
✗ Branch 16205 → 16206 not taken.
✗ Branch 16205 → 16448 not taken.
✗ Branch 16927 → 16928 not taken.
✗ Branch 16927 → 17170 not taken.
✗ Branch 18143 → 18144 not taken.
✗ Branch 18143 → 18386 not taken.
✗ Branch 19118 → 19119 not taken.
✗ Branch 19118 → 19361 not taken.
✗ Branch 19616 → 19617 not taken.
✗ Branch 19616 → 19859 not taken.
✓ Branch 21364 → 21365 taken 159008 times.
✗ Branch 21364 → 21607 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 365 → 366 not taken.
✗ Branch 365 → 367 not taken.
✗ Branch 581 → 582 not taken.
✗ Branch 581 → 583 not taken.
✗ Branch 972 → 973 not taken.
✗ Branch 972 → 974 not taken.
✗ Branch 1146 → 1147 not taken.
✗ Branch 1146 → 1148 not taken.
✗ Branch 1292 → 1293 not taken.
✗ Branch 1292 → 1294 not taken.
✗ Branch 1556 → 1557 not taken.
✗ Branch 1556 → 1558 not taken.
✗ Branch 1766 → 1767 not taken.
✗ Branch 1766 → 1768 not taken.
✗ Branch 1858 → 1859 not taken.
✗ Branch 1858 → 1860 not taken.
✗ Branch 2267 → 2268 not taken.
✗ Branch 2267 → 2269 not taken.
✗ Branch 2746 → 2747 not taken.
✗ Branch 2746 → 2748 not taken.
✗ Branch 2962 → 2963 not taken.
✗ Branch 2962 → 2964 not taken.
✗ Branch 3353 → 3354 not taken.
✗ Branch 3353 → 3355 not taken.
✗ Branch 3527 → 3528 not taken.
✗ Branch 3527 → 3529 not taken.
✗ Branch 3673 → 3674 not taken.
✗ Branch 3673 → 3675 not taken.
✗ Branch 3937 → 3938 not taken.
✗ Branch 3937 → 3939 not taken.
✗ Branch 4147 → 4148 not taken.
✗ Branch 4147 → 4149 not taken.
✗ Branch 4239 → 4240 not taken.
✗ Branch 4239 → 4241 not taken.
✗ Branch 4648 → 4649 not taken.
✗ Branch 4648 → 4650 not taken.
993020 if (!a) return;
513
13/98
None:
✗ Branch 6 → 7 not taken.
✗ Branch 6 → 9 not taken.
✗ Branch 51 → 52 not taken.
✗ Branch 51 → 54 not taken.
✗ Branch 213 → 214 not taken.
✗ Branch 213 → 216 not taken.
✗ Branch 223 → 224 not taken.
✗ Branch 223 → 226 not taken.
✗ Branch 387 → 388 not taken.
✗ Branch 387 → 390 not taken.
✗ Branch 439 → 440 not taken.
✗ Branch 439 → 442 not taken.
✗ Branch 830 → 831 not taken.
✗ Branch 830 → 833 not taken.
✗ Branch 1004 → 1005 not taken.
✗ Branch 1004 → 1007 not taken.
✗ Branch 1150 → 1151 not taken.
✗ Branch 1150 → 1153 not taken.
✗ Branch 1414 → 1415 not taken.
✗ Branch 1414 → 1417 not taken.
✗ Branch 1624 → 1625 not taken.
✗ Branch 1624 → 1627 not taken.
✗ Branch 1716 → 1717 not taken.
✗ Branch 1716 → 1719 not taken.
✗ Branch 2125 → 2126 not taken.
✗ Branch 2125 → 2128 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1619 → 1620 not taken.
✓ Branch 1619 → 1856 taken 1810 times.
✗ Branch 2693 → 2694 not taken.
✓ Branch 2693 → 2930 taken 39740 times.
✗ Branch 4395 → 4396 not taken.
✓ Branch 4395 → 4632 taken 28326 times.
✗ Branch 5222 → 5223 not taken.
✓ Branch 5222 → 5459 taken 6526 times.
✓ Branch 5944 → 5945 taken 69792 times.
✗ Branch 5944 → 6181 not taken.
✓ Branch 7160 → 7161 taken 22142 times.
✓ Branch 7160 → 7397 taken 30976 times.
✓ Branch 8135 → 8136 taken 34864 times.
✓ Branch 8135 → 8372 taken 15484 times.
✓ Branch 8633 → 8634 taken 34864 times.
✓ Branch 8633 → 8870 taken 15484 times.
✗ Branch 10381 → 10382 not taken.
✓ Branch 10381 → 10618 taken 278 times.
✗ Branch 12607 → 12608 not taken.
✗ Branch 12607 → 12844 not taken.
✗ Branch 13681 → 13682 not taken.
✗ Branch 13681 → 13918 not taken.
✗ Branch 15383 → 15384 not taken.
✗ Branch 15383 → 15620 not taken.
✗ Branch 16210 → 16211 not taken.
✗ Branch 16210 → 16447 not taken.
✗ Branch 16932 → 16933 not taken.
✗ Branch 16932 → 17169 not taken.
✗ Branch 18148 → 18149 not taken.
✗ Branch 18148 → 18385 not taken.
✗ Branch 19123 → 19124 not taken.
✗ Branch 19123 → 19360 not taken.
✗ Branch 19621 → 19622 not taken.
✗ Branch 19621 → 19858 not taken.
✗ Branch 21369 → 21370 not taken.
✓ Branch 21369 → 21606 taken 159008 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 368 → 369 not taken.
✗ Branch 368 → 371 not taken.
✗ Branch 584 → 585 not taken.
✗ Branch 584 → 587 not taken.
✗ Branch 975 → 976 not taken.
✗ Branch 975 → 978 not taken.
✗ Branch 1149 → 1150 not taken.
✗ Branch 1149 → 1152 not taken.
✗ Branch 1295 → 1296 not taken.
✗ Branch 1295 → 1298 not taken.
✗ Branch 1559 → 1560 not taken.
✗ Branch 1559 → 1562 not taken.
✗ Branch 1769 → 1770 not taken.
✗ Branch 1769 → 1772 not taken.
✗ Branch 1861 → 1862 not taken.
✗ Branch 1861 → 1864 not taken.
✗ Branch 2270 → 2271 not taken.
✗ Branch 2270 → 2273 not taken.
✗ Branch 2749 → 2750 not taken.
✗ Branch 2749 → 2752 not taken.
✗ Branch 2965 → 2966 not taken.
✗ Branch 2965 → 2968 not taken.
✗ Branch 3356 → 3357 not taken.
✗ Branch 3356 → 3359 not taken.
✗ Branch 3530 → 3531 not taken.
✗ Branch 3530 → 3533 not taken.
✗ Branch 3676 → 3677 not taken.
✗ Branch 3676 → 3679 not taken.
✗ Branch 3940 → 3941 not taken.
✗ Branch 3940 → 3943 not taken.
✗ Branch 4150 → 4151 not taken.
✗ Branch 4150 → 4153 not taken.
✗ Branch 4242 → 4243 not taken.
✗ Branch 4242 → 4245 not taken.
✗ Branch 4651 → 4652 not taken.
✗ Branch 4651 → 4654 not taken.
918588 if (!b) { a = b; return; }
514
18/98
None:
✗ Branch 46 → 10 not taken.
✗ Branch 46 → 47 not taken.
✗ Branch 91 → 55 not taken.
✗ Branch 91 → 92 not taken.
✗ Branch 253 → 217 not taken.
✗ Branch 253 → 254 not taken.
✗ Branch 263 → 227 not taken.
✗ Branch 263 → 264 not taken.
✗ Branch 427 → 391 not taken.
✗ Branch 427 → 428 not taken.
✗ Branch 479 → 443 not taken.
✗ Branch 479 → 480 not taken.
✗ Branch 870 → 834 not taken.
✗ Branch 870 → 871 not taken.
✗ Branch 1044 → 1008 not taken.
✗ Branch 1044 → 1045 not taken.
✗ Branch 1190 → 1154 not taken.
✗ Branch 1190 → 1191 not taken.
✗ Branch 1454 → 1418 not taken.
✗ Branch 1454 → 1455 not taken.
✗ Branch 1664 → 1628 not taken.
✗ Branch 1664 → 1665 not taken.
✗ Branch 1756 → 1720 not taken.
✗ Branch 1756 → 1757 not taken.
✗ Branch 2165 → 2129 not taken.
✗ Branch 2165 → 2166 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1856 → 1623 taken 3620 times.
✓ Branch 1856 → 1857 taken 1810 times.
✓ Branch 2930 → 2697 taken 79480 times.
✓ Branch 2930 → 2931 taken 39740 times.
✓ Branch 4632 → 4399 taken 56652 times.
✓ Branch 4632 → 4633 taken 28326 times.
✓ Branch 5459 → 5226 taken 13052 times.
✓ Branch 5459 → 5460 taken 6526 times.
✗ Branch 6181 → 5948 not taken.
✗ Branch 6181 → 6182 not taken.
✓ Branch 7397 → 7164 taken 61952 times.
✓ Branch 7397 → 7398 taken 30976 times.
✓ Branch 8372 → 8139 taken 30968 times.
✓ Branch 8372 → 8373 taken 15484 times.
✓ Branch 8870 → 8637 taken 30968 times.
✓ Branch 8870 → 8871 taken 15484 times.
✓ Branch 10618 → 10385 taken 556 times.
✓ Branch 10618 → 10619 taken 278 times.
✗ Branch 12844 → 12611 not taken.
✗ Branch 12844 → 12845 not taken.
✗ Branch 13918 → 13685 not taken.
✗ Branch 13918 → 13919 not taken.
✗ Branch 15620 → 15387 not taken.
✗ Branch 15620 → 15621 not taken.
✗ Branch 16447 → 16214 not taken.
✗ Branch 16447 → 16448 not taken.
✗ Branch 17169 → 16936 not taken.
✗ Branch 17169 → 17170 not taken.
✗ Branch 18385 → 18152 not taken.
✗ Branch 18385 → 18386 not taken.
✗ Branch 19360 → 19127 not taken.
✗ Branch 19360 → 19361 not taken.
✗ Branch 19858 → 19625 not taken.
✗ Branch 19858 → 19859 not taken.
✓ Branch 21606 → 21373 taken 318016 times.
✓ Branch 21606 → 21607 taken 159008 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 408 → 372 not taken.
✗ Branch 408 → 409 not taken.
✗ Branch 624 → 588 not taken.
✗ Branch 624 → 625 not taken.
✗ Branch 1015 → 979 not taken.
✗ Branch 1015 → 1016 not taken.
✗ Branch 1189 → 1153 not taken.
✗ Branch 1189 → 1190 not taken.
✗ Branch 1335 → 1299 not taken.
✗ Branch 1335 → 1336 not taken.
✗ Branch 1599 → 1563 not taken.
✗ Branch 1599 → 1600 not taken.
✗ Branch 1809 → 1773 not taken.
✗ Branch 1809 → 1810 not taken.
✗ Branch 1901 → 1865 not taken.
✗ Branch 1901 → 1902 not taken.
✗ Branch 2310 → 2274 not taken.
✗ Branch 2310 → 2311 not taken.
✗ Branch 2789 → 2753 not taken.
✗ Branch 2789 → 2790 not taken.
✗ Branch 3005 → 2969 not taken.
✗ Branch 3005 → 3006 not taken.
✗ Branch 3396 → 3360 not taken.
✗ Branch 3396 → 3397 not taken.
✗ Branch 3570 → 3534 not taken.
✗ Branch 3570 → 3571 not taken.
✗ Branch 3716 → 3680 not taken.
✗ Branch 3716 → 3717 not taken.
✗ Branch 3980 → 3944 not taken.
✗ Branch 3980 → 3981 not taken.
✗ Branch 4190 → 4154 not taken.
✗ Branch 4190 → 4191 not taken.
✗ Branch 4282 → 4246 not taken.
✗ Branch 4282 → 4283 not taken.
✗ Branch 4691 → 4655 not taken.
✗ Branch 4691 → 4692 not taken.
892896 for (int z = 0; z < 2; z++) {
515 595264 auto& as = a->sides[z];
516 595264 const auto& bs = b->sides[z];
517 // If there's no bottom edges, then we must be an isolated vertex, so we can end early.
518
11/98
None:
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 45 not taken.
✗ Branch 60 → 61 not taken.
✗ Branch 60 → 90 not taken.
✗ Branch 222 → 223 not taken.
✗ Branch 222 → 252 not taken.
✗ Branch 232 → 233 not taken.
✗ Branch 232 → 262 not taken.
✗ Branch 396 → 397 not taken.
✗ Branch 396 → 426 not taken.
✗ Branch 448 → 449 not taken.
✗ Branch 448 → 478 not taken.
✗ Branch 839 → 840 not taken.
✗ Branch 839 → 869 not taken.
✗ Branch 1013 → 1014 not taken.
✗ Branch 1013 → 1043 not taken.
✗ Branch 1159 → 1160 not taken.
✗ Branch 1159 → 1189 not taken.
✗ Branch 1423 → 1424 not taken.
✗ Branch 1423 → 1453 not taken.
✗ Branch 1633 → 1634 not taken.
✗ Branch 1633 → 1663 not taken.
✗ Branch 1725 → 1726 not taken.
✗ Branch 1725 → 1755 not taken.
✗ Branch 2134 → 2135 not taken.
✗ Branch 2134 → 2164 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1644 → 1645 taken 3620 times.
✗ Branch 1644 → 1855 not taken.
✓ Branch 2718 → 2719 taken 79480 times.
✗ Branch 2718 → 2929 not taken.
✓ Branch 4420 → 4421 taken 56652 times.
✗ Branch 4420 → 4631 not taken.
✓ Branch 5247 → 5248 taken 13052 times.
✗ Branch 5247 → 5458 not taken.
✗ Branch 5969 → 5970 not taken.
✗ Branch 5969 → 6180 not taken.
✓ Branch 7185 → 7186 taken 61952 times.
✗ Branch 7185 → 7396 not taken.
✓ Branch 8160 → 8161 taken 30968 times.
✗ Branch 8160 → 8371 not taken.
✓ Branch 8658 → 8659 taken 30968 times.
✗ Branch 8658 → 8869 not taken.
✓ Branch 10406 → 10407 taken 278 times.
✓ Branch 10406 → 10617 taken 278 times.
✗ Branch 12632 → 12633 not taken.
✗ Branch 12632 → 12843 not taken.
✗ Branch 13706 → 13707 not taken.
✗ Branch 13706 → 13917 not taken.
✗ Branch 15408 → 15409 not taken.
✗ Branch 15408 → 15619 not taken.
✗ Branch 16235 → 16236 not taken.
✗ Branch 16235 → 16446 not taken.
✗ Branch 16957 → 16958 not taken.
✗ Branch 16957 → 17168 not taken.
✗ Branch 18173 → 18174 not taken.
✗ Branch 18173 → 18384 not taken.
✗ Branch 19148 → 19149 not taken.
✗ Branch 19148 → 19359 not taken.
✗ Branch 19646 → 19647 not taken.
✗ Branch 19646 → 19857 not taken.
✓ Branch 21394 → 21395 taken 159008 times.
✓ Branch 21394 → 21605 taken 159008 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 377 → 378 not taken.
✗ Branch 377 → 407 not taken.
✗ Branch 593 → 594 not taken.
✗ Branch 593 → 623 not taken.
✗ Branch 984 → 985 not taken.
✗ Branch 984 → 1014 not taken.
✗ Branch 1158 → 1159 not taken.
✗ Branch 1158 → 1188 not taken.
✗ Branch 1304 → 1305 not taken.
✗ Branch 1304 → 1334 not taken.
✗ Branch 1568 → 1569 not taken.
✗ Branch 1568 → 1598 not taken.
✗ Branch 1778 → 1779 not taken.
✗ Branch 1778 → 1808 not taken.
✗ Branch 1870 → 1871 not taken.
✗ Branch 1870 → 1900 not taken.
✗ Branch 2279 → 2280 not taken.
✗ Branch 2279 → 2309 not taken.
✗ Branch 2758 → 2759 not taken.
✗ Branch 2758 → 2788 not taken.
✗ Branch 2974 → 2975 not taken.
✗ Branch 2974 → 3004 not taken.
✗ Branch 3365 → 3366 not taken.
✗ Branch 3365 → 3395 not taken.
✗ Branch 3539 → 3540 not taken.
✗ Branch 3539 → 3569 not taken.
✗ Branch 3685 → 3686 not taken.
✗ Branch 3685 → 3715 not taken.
✗ Branch 3949 → 3950 not taken.
✗ Branch 3949 → 3979 not taken.
✗ Branch 4159 → 4160 not taken.
✗ Branch 4159 → 4189 not taken.
✗ Branch 4251 → 4252 not taken.
✗ Branch 4251 → 4281 not taken.
✗ Branch 4660 → 4661 not taken.
✗ Branch 4660 → 4690 not taken.
1190528 if (bs.bot_ends[0] == -1) {
519 // Do nothing
520
14/98
None:
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
✗ Branch 62 → 63 not taken.
✗ Branch 62 → 64 not taken.
✗ Branch 224 → 225 not taken.
✗ Branch 224 → 226 not taken.
✗ Branch 234 → 235 not taken.
✗ Branch 234 → 236 not taken.
✗ Branch 398 → 399 not taken.
✗ Branch 398 → 400 not taken.
✗ Branch 450 → 451 not taken.
✗ Branch 450 → 452 not taken.
✗ Branch 841 → 842 not taken.
✗ Branch 841 → 843 not taken.
✗ Branch 1015 → 1016 not taken.
✗ Branch 1015 → 1017 not taken.
✗ Branch 1161 → 1162 not taken.
✗ Branch 1161 → 1163 not taken.
✗ Branch 1425 → 1426 not taken.
✗ Branch 1425 → 1427 not taken.
✗ Branch 1635 → 1636 not taken.
✗ Branch 1635 → 1637 not taken.
✗ Branch 1727 → 1728 not taken.
✗ Branch 1727 → 1729 not taken.
✗ Branch 2136 → 2137 not taken.
✗ Branch 2136 → 2138 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1652 → 1653 taken 3620 times.
✗ Branch 1652 → 1658 not taken.
✓ Branch 2726 → 2727 taken 38076 times.
✓ Branch 2726 → 2732 taken 41404 times.
✓ Branch 4428 → 4429 taken 29726 times.
✓ Branch 4428 → 4434 taken 26926 times.
✓ Branch 5255 → 5256 taken 6032 times.
✓ Branch 5255 → 5261 taken 7020 times.
✗ Branch 5977 → 5978 not taken.
✗ Branch 5977 → 5983 not taken.
✓ Branch 7193 → 7194 taken 30976 times.
✓ Branch 7193 → 7199 taken 30976 times.
✓ Branch 8168 → 8169 taken 15484 times.
✓ Branch 8168 → 8174 taken 15484 times.
✓ Branch 8666 → 8667 taken 30968 times.
✗ Branch 8666 → 8672 not taken.
✗ Branch 10414 → 10415 not taken.
✓ Branch 10414 → 10420 taken 278 times.
✗ Branch 12640 → 12641 not taken.
✗ Branch 12640 → 12646 not taken.
✗ Branch 13714 → 13715 not taken.
✗ Branch 13714 → 13720 not taken.
✗ Branch 15416 → 15417 not taken.
✗ Branch 15416 → 15422 not taken.
✗ Branch 16243 → 16244 not taken.
✗ Branch 16243 → 16249 not taken.
✗ Branch 16965 → 16966 not taken.
✗ Branch 16965 → 16971 not taken.
✗ Branch 18181 → 18182 not taken.
✗ Branch 18181 → 18187 not taken.
✗ Branch 19156 → 19157 not taken.
✗ Branch 19156 → 19162 not taken.
✗ Branch 19654 → 19655 not taken.
✗ Branch 19654 → 19660 not taken.
✗ Branch 21402 → 21403 not taken.
✓ Branch 21402 → 21408 taken 159008 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 379 → 380 not taken.
✗ Branch 379 → 381 not taken.
✗ Branch 595 → 596 not taken.
✗ Branch 595 → 597 not taken.
✗ Branch 986 → 987 not taken.
✗ Branch 986 → 988 not taken.
✗ Branch 1160 → 1161 not taken.
✗ Branch 1160 → 1162 not taken.
✗ Branch 1306 → 1307 not taken.
✗ Branch 1306 → 1308 not taken.
✗ Branch 1570 → 1571 not taken.
✗ Branch 1570 → 1572 not taken.
✗ Branch 1780 → 1781 not taken.
✗ Branch 1780 → 1782 not taken.
✗ Branch 1872 → 1873 not taken.
✗ Branch 1872 → 1874 not taken.
✗ Branch 2281 → 2282 not taken.
✗ Branch 2281 → 2283 not taken.
✗ Branch 2760 → 2761 not taken.
✗ Branch 2760 → 2762 not taken.
✗ Branch 2976 → 2977 not taken.
✗ Branch 2976 → 2978 not taken.
✗ Branch 3367 → 3368 not taken.
✗ Branch 3367 → 3369 not taken.
✗ Branch 3541 → 3542 not taken.
✗ Branch 3541 → 3543 not taken.
✗ Branch 3687 → 3688 not taken.
✗ Branch 3687 → 3689 not taken.
✗ Branch 3951 → 3952 not taken.
✗ Branch 3951 → 3953 not taken.
✗ Branch 4161 → 4162 not taken.
✗ Branch 4161 → 4163 not taken.
✗ Branch 4253 → 4254 not taken.
✗ Branch 4253 → 4255 not taken.
✗ Branch 4662 → 4663 not taken.
✗ Branch 4662 → 4664 not taken.
871956 } else if (as.bot_ends[0] == -1) {
521 154882 as = bs;
522 } else {
523 843288 quarter_edge_matches[as.bot_ends[1]] = bs.bot_ends[0];
524 843288 quarter_edge_matches[bs.bot_ends[0]] = as.bot_ends[1];
525 843288 as.bot_ends[1] = bs.bot_ends[1];
526
527
11/98
None:
✗ Branch 28 → 29 not taken.
✗ Branch 28 → 45 not taken.
✗ Branch 73 → 74 not taken.
✗ Branch 73 → 90 not taken.
✗ Branch 235 → 236 not taken.
✗ Branch 235 → 252 not taken.
✗ Branch 245 → 246 not taken.
✗ Branch 245 → 262 not taken.
✗ Branch 409 → 410 not taken.
✗ Branch 409 → 426 not taken.
✗ Branch 461 → 462 not taken.
✗ Branch 461 → 478 not taken.
✗ Branch 852 → 853 not taken.
✗ Branch 852 → 869 not taken.
✗ Branch 1026 → 1027 not taken.
✗ Branch 1026 → 1043 not taken.
✗ Branch 1172 → 1173 not taken.
✗ Branch 1172 → 1189 not taken.
✗ Branch 1436 → 1437 not taken.
✗ Branch 1436 → 1453 not taken.
✗ Branch 1646 → 1647 not taken.
✗ Branch 1646 → 1663 not taken.
✗ Branch 1738 → 1739 not taken.
✗ Branch 1738 → 1755 not taken.
✗ Branch 2147 → 2148 not taken.
✗ Branch 2147 → 2164 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1734 → 1735 not taken.
✗ Branch 1734 → 1855 not taken.
✗ Branch 2808 → 2809 not taken.
✓ Branch 2808 → 2929 taken 41404 times.
✓ Branch 4510 → 4511 taken 16726 times.
✓ Branch 4510 → 4631 taken 10200 times.
✓ Branch 5337 → 5338 taken 342 times.
✓ Branch 5337 → 5458 taken 6678 times.
✗ Branch 6059 → 6060 not taken.
✗ Branch 6059 → 6180 not taken.
✓ Branch 7275 → 7276 taken 21228 times.
✓ Branch 7275 → 7396 taken 9748 times.
✓ Branch 8250 → 8251 taken 10650 times.
✓ Branch 8250 → 8371 taken 4834 times.
✗ Branch 8748 → 8749 not taken.
✗ Branch 8748 → 8869 not taken.
✓ Branch 10496 → 10497 taken 278 times.
✗ Branch 10496 → 10617 not taken.
✗ Branch 12722 → 12723 not taken.
✗ Branch 12722 → 12843 not taken.
✗ Branch 13796 → 13797 not taken.
✗ Branch 13796 → 13917 not taken.
✗ Branch 15498 → 15499 not taken.
✗ Branch 15498 → 15619 not taken.
✗ Branch 16325 → 16326 not taken.
✗ Branch 16325 → 16446 not taken.
✗ Branch 17047 → 17048 not taken.
✗ Branch 17047 → 17168 not taken.
✗ Branch 18263 → 18264 not taken.
✗ Branch 18263 → 18384 not taken.
✗ Branch 19238 → 19239 not taken.
✗ Branch 19238 → 19359 not taken.
✗ Branch 19736 → 19737 not taken.
✗ Branch 19736 → 19857 not taken.
✓ Branch 21484 → 21485 taken 159008 times.
✗ Branch 21484 → 21605 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 390 → 391 not taken.
✗ Branch 390 → 407 not taken.
✗ Branch 606 → 607 not taken.
✗ Branch 606 → 623 not taken.
✗ Branch 997 → 998 not taken.
✗ Branch 997 → 1014 not taken.
✗ Branch 1171 → 1172 not taken.
✗ Branch 1171 → 1188 not taken.
✗ Branch 1317 → 1318 not taken.
✗ Branch 1317 → 1334 not taken.
✗ Branch 1581 → 1582 not taken.
✗ Branch 1581 → 1598 not taken.
✗ Branch 1791 → 1792 not taken.
✗ Branch 1791 → 1808 not taken.
✗ Branch 1883 → 1884 not taken.
✗ Branch 1883 → 1900 not taken.
✗ Branch 2292 → 2293 not taken.
✗ Branch 2292 → 2309 not taken.
✗ Branch 2771 → 2772 not taken.
✗ Branch 2771 → 2788 not taken.
✗ Branch 2987 → 2988 not taken.
✗ Branch 2987 → 3004 not taken.
✗ Branch 3378 → 3379 not taken.
✗ Branch 3378 → 3395 not taken.
✗ Branch 3552 → 3553 not taken.
✗ Branch 3552 → 3569 not taken.
✗ Branch 3698 → 3699 not taken.
✗ Branch 3698 → 3715 not taken.
✗ Branch 3962 → 3963 not taken.
✗ Branch 3962 → 3979 not taken.
✗ Branch 4172 → 4173 not taken.
✗ Branch 4172 → 4189 not taken.
✗ Branch 4264 → 4265 not taken.
✗ Branch 4264 → 4281 not taken.
✗ Branch 4673 → 4674 not taken.
✗ Branch 4673 → 4690 not taken.
562192 if (bs.tops[0].end == -1) {
528 // Do nothing
529
9/98
None:
✗ Branch 30 → 31 not taken.
✗ Branch 30 → 32 not taken.
✗ Branch 75 → 76 not taken.
✗ Branch 75 → 77 not taken.
✗ Branch 237 → 238 not taken.
✗ Branch 237 → 239 not taken.
✗ Branch 247 → 248 not taken.
✗ Branch 247 → 249 not taken.
✗ Branch 411 → 412 not taken.
✗ Branch 411 → 413 not taken.
✗ Branch 463 → 464 not taken.
✗ Branch 463 → 465 not taken.
✗ Branch 854 → 855 not taken.
✗ Branch 854 → 856 not taken.
✗ Branch 1028 → 1029 not taken.
✗ Branch 1028 → 1030 not taken.
✗ Branch 1174 → 1175 not taken.
✗ Branch 1174 → 1176 not taken.
✗ Branch 1438 → 1439 not taken.
✗ Branch 1438 → 1440 not taken.
✗ Branch 1648 → 1649 not taken.
✗ Branch 1648 → 1650 not taken.
✗ Branch 1740 → 1741 not taken.
✗ Branch 1740 → 1742 not taken.
✗ Branch 2149 → 2150 not taken.
✗ Branch 2149 → 2151 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1743 → 1744 not taken.
✗ Branch 1743 → 1755 not taken.
✗ Branch 2817 → 2818 not taken.
✗ Branch 2817 → 2829 not taken.
✓ Branch 4519 → 4520 taken 2316 times.
✓ Branch 4519 → 4531 taken 14410 times.
✓ Branch 5346 → 5347 taken 158 times.
✓ Branch 5346 → 5358 taken 184 times.
✗ Branch 6068 → 6069 not taken.
✗ Branch 6068 → 6080 not taken.
✓ Branch 7284 → 7285 taken 184 times.
✓ Branch 7284 → 7296 taken 21044 times.
✗ Branch 8259 → 8260 not taken.
✓ Branch 8259 → 8271 taken 10650 times.
✗ Branch 8757 → 8758 not taken.
✗ Branch 8757 → 8769 not taken.
✗ Branch 10505 → 10506 not taken.
✓ Branch 10505 → 10517 taken 278 times.
✗ Branch 12731 → 12732 not taken.
✗ Branch 12731 → 12743 not taken.
✗ Branch 13805 → 13806 not taken.
✗ Branch 13805 → 13817 not taken.
✗ Branch 15507 → 15508 not taken.
✗ Branch 15507 → 15519 not taken.
✗ Branch 16334 → 16335 not taken.
✗ Branch 16334 → 16346 not taken.
✗ Branch 17056 → 17057 not taken.
✗ Branch 17056 → 17068 not taken.
✗ Branch 18272 → 18273 not taken.
✗ Branch 18272 → 18284 not taken.
✗ Branch 19247 → 19248 not taken.
✗ Branch 19247 → 19259 not taken.
✗ Branch 19745 → 19746 not taken.
✗ Branch 19745 → 19757 not taken.
✗ Branch 21493 → 21494 not taken.
✓ Branch 21493 → 21505 taken 159008 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 392 → 393 not taken.
✗ Branch 392 → 394 not taken.
✗ Branch 608 → 609 not taken.
✗ Branch 608 → 610 not taken.
✗ Branch 999 → 1000 not taken.
✗ Branch 999 → 1001 not taken.
✗ Branch 1173 → 1174 not taken.
✗ Branch 1173 → 1175 not taken.
✗ Branch 1319 → 1320 not taken.
✗ Branch 1319 → 1321 not taken.
✗ Branch 1583 → 1584 not taken.
✗ Branch 1583 → 1585 not taken.
✗ Branch 1793 → 1794 not taken.
✗ Branch 1793 → 1795 not taken.
✗ Branch 1885 → 1886 not taken.
✗ Branch 1885 → 1887 not taken.
✗ Branch 2294 → 2295 not taken.
✗ Branch 2294 → 2296 not taken.
✗ Branch 2773 → 2774 not taken.
✗ Branch 2773 → 2775 not taken.
✗ Branch 2989 → 2990 not taken.
✗ Branch 2989 → 2991 not taken.
✗ Branch 3380 → 3381 not taken.
✗ Branch 3380 → 3382 not taken.
✗ Branch 3554 → 3555 not taken.
✗ Branch 3554 → 3556 not taken.
✗ Branch 3700 → 3701 not taken.
✗ Branch 3700 → 3702 not taken.
✗ Branch 3964 → 3965 not taken.
✗ Branch 3964 → 3966 not taken.
✗ Branch 4174 → 4175 not taken.
✗ Branch 4174 → 4176 not taken.
✗ Branch 4266 → 4267 not taken.
✗ Branch 4266 → 4268 not taken.
✗ Branch 4675 → 4676 not taken.
✗ Branch 4675 → 4677 not taken.
416464 } else if (as.tops[0].end == -1) {
530 2658 as.tops = bs.tops;
531 } else {
532 // Caller must check that we're planar
533 616722 assert(as.tops[1].depth <= bs.tops[0].depth);
534 616722 quarter_edge_matches[as.tops[1].end] = bs.tops[0].end;
535 616722 quarter_edge_matches[bs.tops[0].end] = as.tops[1].end;
536 616722 as.tops[1] = bs.tops[1];
537 }
538 }
539 }
540 }
541 };
542 17421407 auto make_edge_planarity = [&] [[gnu::always_inline]] (int item, int top_depth, bool is_tree) -> tstack_maybe_planarity_t {
543 if constexpr (with_planarity) {
544 650356 assert(item >= 1 + NV);
545 650356 int ve = item - (1 + NV);
546 650356 bool top_dir = stack_dir[top_depth];
547 650356 edge_top_depths[ve] = top_depth;
548 650356 tstack_planarity_t p;
549 ✗ if (is_tree) {
550 216456 p.sides[0].bot_ends = {4 * ve + 2 * !top_dir + 0, 4 * ve + 2 * top_dir + 1};
551 216456 p.sides[1].bot_ends = {4 * ve + 2 * !top_dir + 1, 4 * ve + 2 * top_dir + 0};
552 } else {
553 1084256 p.sides[0].bot_ends = {4 * ve + 2 * !top_dir + 0, 4 * ve + 2 * !top_dir + 1};
554 1084256 p.sides[0].tops = {{{4 * ve + 2 * top_dir + 1, top_depth}, {4 * ve + 2 * top_dir + 0, top_depth}}};
555 }
556 650356 return p;
557 } else {
558 ✗ return {};
559 }
560 };
561 struct tstack_t {
562 int v_start = -1;
563 int top_depth = -1;
564 int first_idx = -1;
565 std::array<item_list, 2> spans;
566 [[no_unique_address]] tstack_maybe_planarity_t planarity;
567 };
568
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 88 → 89 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22 → 23 taken 87 times.
✗ Branch 40 → 41 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 89 → 90 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 41 → 42 not taken.
20287 std::vector<tstack_t> tstack; tstack.reserve(NV + NE);
569
1/4
✗ Branch 103 → 104 not taken.
✓ Branch 103 → 105 taken 392434 times.
✗ Branch 430 → 431 not taken.
✗ Branch 430 → 432 not taken.
5858128 auto cur_tstack = [&] [[gnu::always_inline]] () -> tstack_t& { return tstack.end()[-1]; };
570 51503704 auto nxt_tstack = [&] [[gnu::always_inline]] () -> tstack_t& { return tstack.end()[-2]; };
571
572 25282212 auto push_tstack = [&] [[gnu::always_inline]] (int v_start, int top_depth, int item, tstack_maybe_planarity_t planarity) -> void {
573
33/85
None:
✗ Branch 6 → 7 not taken.
✗ Branch 8 → 9 not taken.
✗ Branch 9 → 10 not taken.
✗ Branch 10 → 11 not taken.
✗ Branch 22 → 23 not taken.
✗ Branch 72 → 73 not taken.
✗ Branch 73 → 74 not taken.
✗ Branch 136 → 137 not taken.
✗ Branch 150 → 151 not taken.
✗ Branch 747 → 748 not taken.
✗ Branch 906 → 907 not taken.
✗ Branch 1956 → 1957 not taken.
✗ Branch 2257 → 2258 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 195 → 493 not taken.
✓ Branch 195 → 494 taken 16368 times.
✓ Branch 498 → 499 taken 16368 times.
✓ Branch 1226 → 1227 taken 7144 times.
✓ Branch 1226 → 1228 taken 61198 times.
✓ Branch 1232 → 1233 taken 68342 times.
✗ Branch 4098 → 4099 not taken.
✗ Branch 4098 → 4100 not taken.
✗ Branch 4104 → 4105 not taken.
✓ Branch 4840 → 4841 taken 774 times.
✓ Branch 4840 → 4842 taken 17220 times.
✓ Branch 4846 → 4847 taken 17994 times.
✓ Branch 5037 → 5335 taken 6370 times.
✓ Branch 5037 → 5336 taken 60268 times.
✓ Branch 5340 → 5341 taken 66638 times.
✗ Branch 6035 → 6036 not taken.
✗ Branch 6035 → 6037 not taken.
✗ Branch 6041 → 6042 not taken.
✓ Branch 8907 → 8908 taken 88460 times.
✓ Branch 8907 → 8909 taken 281418 times.
✓ Branch 8913 → 8914 taken 369878 times.
✗ Branch 9649 → 9650 not taken.
✗ Branch 9649 → 9651 not taken.
✗ Branch 9655 → 9656 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 37 → 38 taken 1786537 times.
✓ Branch 89 → 90 taken 7379748 times.
✗ Branch 117 → 118 not taken.
✗ Branch 278 → 279 not taken.
✗ Branch 281 → 282 not taken.
✓ Branch 342 → 343 taken 2907882 times.
✓ Branch 371 → 372 taken 9692445 times.
✗ Branch 416 → 417 not taken.
✓ Branch 608 → 609 taken 3495313 times.
✗ Branch 669 → 670 not taken.
✗ Branch 889 → 890 not taken.
✗ Branch 1048 → 1049 not taken.
✗ Branch 1155 → 1156 not taken.
✗ Branch 1303 → 1304 not taken.
✗ Branch 1914 → 1915 not taken.
✗ Branch 2073 → 2074 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 197 → 495 not taken.
✓ Branch 197 → 496 taken 16368 times.
✓ Branch 500 → 501 taken 16368 times.
✓ Branch 1288 → 1289 taken 7144 times.
✓ Branch 1288 → 1290 taken 61198 times.
✓ Branch 1294 → 1295 taken 68342 times.
✗ Branch 9686 → 9687 not taken.
✗ Branch 9686 → 9688 not taken.
✗ Branch 9692 → 9693 not taken.
✓ Branch 11010 → 11011 taken 774 times.
✓ Branch 11010 → 11012 taken 17220 times.
✓ Branch 11016 → 11017 taken 17994 times.
✓ Branch 11218 → 11516 taken 6370 times.
✓ Branch 11218 → 11517 taken 60268 times.
✓ Branch 11521 → 11522 taken 66638 times.
✗ Branch 12276 → 12277 not taken.
✗ Branch 12276 → 12278 not taken.
✗ Branch 12282 → 12283 not taken.
✓ Branch 20674 → 20675 taken 88460 times.
✓ Branch 20674 → 20676 taken 281418 times.
✓ Branch 20680 → 20681 taken 369878 times.
✗ Branch 21998 → 21999 not taken.
✗ Branch 21998 → 22000 not taken.
✗ Branch 22004 → 22005 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 119 → 120 not taken.
✗ Branch 295 → 296 not taken.
✗ Branch 2101 → 2102 not taken.
✗ Branch 2402 → 2403 not taken.
✗ Branch 2513 → 2514 not taken.
✗ Branch 2676 → 2677 not taken.
✗ Branch 4482 → 4483 not taken.
✗ Branch 4783 → 4784 not taken.
26545861 tstack.emplace_back(v_start, top_depth, nxt_edge_idx, set_sides(stack_dir[top_depth], unit_list(item), {}), planarity);
574 };
575 14407151 auto push_vert_tstack = [&] [[gnu::always_inline]] (int v, int top_depth) -> void {
576 14588864 int item = vert_item(v);
577 28993722 push_tstack(v, top_depth, item, {});
578 };
579 18411780 auto push_edge_tstack = [&] [[gnu::always_inline]] (int v_start, int top_depth, int e, bool is_tree) -> void {
580 11751501 int item = edge_item(e);
581
0/14
None:
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
✗ Branch 132 → 133 not taken.
✗ Branch 132 → 134 not taken.
✗ Branch 1938 → 1939 not taken.
✗ Branch 1938 → 1940 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 277 → 278 not taken.
✗ Branch 277 → 279 not taken.
✗ Branch 2083 → 2084 not taken.
✗ Branch 2083 → 2085 not taken.
✗ Branch 2658 → 2659 not taken.
✗ Branch 2658 → 2660 not taken.
✗ Branch 4464 → 4465 not taken.
✗ Branch 4464 → 4466 not taken.
23064782 push_tstack(v_start, top_depth, item, make_edge_planarity(item, top_depth, is_tree));
582 };
583 20200 auto flip_tstack_planarity = [&] [[gnu::always_inline]] (tstack_t& a) -> void {
584 if constexpr (with_planarity) {
585 21258 a.spans[0].v[0] ^= 1;
586 21258 a.spans[0].v[1] ^= 1;
587 21258 a.spans[1].v[0] ^= 1;
588 21258 a.spans[1].v[1] ^= 1;
589
4/50
None:
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 17 not taken.
✗ Branch 36 → 37 not taken.
✗ Branch 36 → 42 not taken.
✗ Branch 70 → 71 not taken.
✗ Branch 70 → 76 not taken.
✗ Branch 97 → 98 not taken.
✗ Branch 97 → 103 not taken.
✗ Branch 330 → 331 not taken.
✗ Branch 330 → 336 not taken.
✗ Branch 687 → 688 not taken.
✗ Branch 687 → 693 not taken.
✗ Branch 947 → 948 not taken.
✗ Branch 947 → 953 not taken.
✗ Branch 1244 → 1245 not taken.
✗ Branch 1244 → 1250 not taken.
✗ Branch 1305 → 1306 not taken.
✗ Branch 1305 → 1311 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3806 → 3807 taken 436 times.
✗ Branch 3806 → 4140 not taken.
✓ Branch 4944 → 4945 taken 6380 times.
✗ Branch 4944 → 4967 not taken.
✓ Branch 6432 → 6433 taken 86 times.
✗ Branch 6432 → 6533 not taken.
✓ Branch 6711 → 6712 taken 184 times.
✗ Branch 6711 → 6734 not taken.
✗ Branch 14794 → 14795 not taken.
✗ Branch 14794 → 15128 not taken.
✗ Branch 15932 → 15933 not taken.
✗ Branch 15932 → 15955 not taken.
✗ Branch 17420 → 17421 not taken.
✗ Branch 17420 → 17521 not taken.
✗ Branch 17699 → 17700 not taken.
✗ Branch 17699 → 17722 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 832 → 833 not taken.
✗ Branch 832 → 838 not taken.
✗ Branch 1092 → 1093 not taken.
✗ Branch 1092 → 1098 not taken.
✗ Branch 1389 → 1390 not taken.
✗ Branch 1389 → 1395 not taken.
✗ Branch 1450 → 1451 not taken.
✗ Branch 1450 → 1456 not taken.
✗ Branch 3213 → 3214 not taken.
✗ Branch 3213 → 3219 not taken.
✗ Branch 3473 → 3474 not taken.
✗ Branch 3473 → 3479 not taken.
✗ Branch 3770 → 3771 not taken.
✗ Branch 3770 → 3776 not taken.
✗ Branch 3831 → 3832 not taken.
✗ Branch 3831 → 3837 not taken.
14172 if (a.planarity) {
590 21258 std::swap(a.planarity->sides[0], a.planarity->sides[1]);
591 }
592 }
593 };
594 24095225 auto merge_tstack_tops = [&] [[gnu::always_inline]] () -> void {
595 19167087 tstack_t& a = nxt_tstack();
596 20160107 const tstack_t& b = cur_tstack();
597
11/28
✓ Branch 93 → 94 taken 1373427 times.
✗ Branch 93 → 95 not taken.
✓ Branch 144 → 145 taken 1372819 times.
✓ Branch 144 → 146 taken 393042 times.
✓ Branch 166 → 167 taken 1987837 times.
✓ Branch 166 → 168 taken 2314099 times.
✓ Branch 185 → 186 taken 644559 times.
✓ Branch 185 → 187 taken 571238 times.
✗ Branch 241 → 242 not taken.
✓ Branch 241 → 243 taken 4471866 times.
✓ Branch 249 → 250 taken 4471866 times.
✗ Branch 249 → 251 not taken.
✗ Branch 319 → 320 not taken.
✓ Branch 319 → 321 taken 438447 times.
✗ Branch 420 → 421 not taken.
✗ Branch 420 → 422 not taken.
✗ Branch 471 → 472 not taken.
✗ Branch 471 → 473 not taken.
✗ Branch 493 → 494 not taken.
✗ Branch 493 → 495 not taken.
✗ Branch 512 → 513 not taken.
✗ Branch 512 → 514 not taken.
✗ Branch 568 → 569 not taken.
✗ Branch 568 → 570 not taken.
✗ Branch 576 → 577 not taken.
✗ Branch 576 → 578 not taken.
✗ Branch 646 → 647 not taken.
✓ Branch 646 → 648 taken 134867 times.
19167087 setmin(a.top_depth, b.top_depth);
598
16/28
✓ Branch 95 → 96 taken 566621 times.
✓ Branch 95 → 98 taken 806806 times.
✓ Branch 146 → 147 taken 731862 times.
✓ Branch 146 → 149 taken 1033999 times.
✓ Branch 168 → 169 taken 1416107 times.
✓ Branch 168 → 171 taken 2885829 times.
✓ Branch 187 → 188 taken 566284 times.
✓ Branch 187 → 190 taken 649513 times.
✓ Branch 243 → 244 taken 2851393 times.
✓ Branch 243 → 246 taken 1620473 times.
✓ Branch 251 → 252 taken 1620473 times.
✓ Branch 251 → 254 taken 2851393 times.
✓ Branch 321 → 322 taken 91768 times.
✓ Branch 321 → 324 taken 346679 times.
✗ Branch 422 → 423 not taken.
✗ Branch 422 → 425 not taken.
✗ Branch 473 → 474 not taken.
✗ Branch 473 → 476 not taken.
✗ Branch 495 → 496 not taken.
✗ Branch 495 → 498 not taken.
✗ Branch 514 → 515 not taken.
✗ Branch 514 → 517 not taken.
✗ Branch 570 → 571 not taken.
✗ Branch 570 → 573 not taken.
✗ Branch 578 → 579 not taken.
✗ Branch 578 → 581 not taken.
✓ Branch 648 → 649 taken 61136 times.
✓ Branch 648 → 651 taken 73731 times.
23139167 a.spans[0] = concat(b.spans[0], a.spans[0]);
599
15/28
✓ Branch 98 → 99 taken 806806 times.
✓ Branch 98 → 101 taken 566621 times.
✓ Branch 149 → 150 taken 1033999 times.
✓ Branch 149 → 152 taken 731862 times.
✓ Branch 171 → 172 taken 3754377 times.
✓ Branch 171 → 174 taken 547559 times.
✓ Branch 190 → 191 taken 885453 times.
✓ Branch 190 → 193 taken 330344 times.
✓ Branch 246 → 247 taken 3071485 times.
✓ Branch 246 → 249 taken 1400381 times.
✓ Branch 254 → 255 taken 4471866 times.
✗ Branch 254 → 257 not taken.
✓ Branch 324 → 325 taken 346679 times.
✓ Branch 324 → 327 taken 91768 times.
✗ Branch 425 → 426 not taken.
✗ Branch 425 → 428 not taken.
✗ Branch 476 → 477 not taken.
✗ Branch 476 → 479 not taken.
✗ Branch 498 → 499 not taken.
✗ Branch 498 → 501 not taken.
✗ Branch 517 → 518 not taken.
✗ Branch 517 → 520 not taken.
✗ Branch 573 → 574 not taken.
✗ Branch 573 → 576 not taken.
✗ Branch 581 → 582 not taken.
✗ Branch 581 → 584 not taken.
✓ Branch 651 → 652 taken 73731 times.
✓ Branch 651 → 654 taken 61136 times.
23139167 a.spans[1] = concat(a.spans[1], b.spans[1]);
600 if constexpr (with_planarity) {
601 496510 merge_planarity(a.planarity, b.planarity);
602 }
603
10/20
✓ Branch 101 → 102 taken 608 times.
✓ Branch 101 → 105 taken 1372819 times.
✓ Branch 152 → 153 taken 1033999 times.
✓ Branch 152 → 154 taken 731862 times.
✓ Branch 249 → 250 taken 4471866 times.
✗ Branch 249 → 251 not taken.
✗ Branch 257 → 258 not taken.
✓ Branch 257 → 259 taken 4471866 times.
✓ Branch 327 → 328 taken 346679 times.
✓ Branch 327 → 329 taken 91768 times.
✗ Branch 428 → 429 not taken.
✗ Branch 428 → 432 not taken.
✗ Branch 479 → 480 not taken.
✗ Branch 479 → 481 not taken.
✗ Branch 576 → 577 not taken.
✗ Branch 576 → 578 not taken.
✗ Branch 584 → 585 not taken.
✗ Branch 584 → 586 not taken.
✓ Branch 654 → 655 taken 73731 times.
✓ Branch 654 → 656 taken 61136 times.
19167087 tstack.pop_back();
604 };
605
606 6546346 auto maybe_unwrap_nxt = [&] [[gnu::always_inline]] (node_type type, bool is_tree) -> int {
607
2/4
✓ Branch 204 → 205 taken 332 times.
✓ Branch 204 → 212 taken 4186552 times.
✗ Branch 531 → 532 not taken.
✗ Branch 531 → 539 not taken.
4611156 tstack_t& t = nxt_tstack();
608
609
14/71
None:
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 20 not taken.
✗ Branch 8 → 21 not taken.
✗ Branch 237 → 238 not taken.
✗ Branch 237 → 249 not taken.
✗ Branch 296 → 297 not taken.
✗ Branch 296 → 309 not taken.
✗ Branch 513 → 514 not taken.
✗ Branch 513 → 525 not taken.
✗ Branch 773 → 774 not taken.
✗ Branch 773 → 785 not taken.
✗ Branch 1479 → 1480 not taken.
✗ Branch 1479 → 1492 not taken.
✗ Branch 1982 → 1983 not taken.
✗ Branch 1982 → 1995 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1635 → 1636 taken 396 times.
✓ Branch 1635 → 1683 taken 39490 times.
✓ Branch 2960 → 2961 taken 8130 times.
✓ Branch 2960 → 3008 taken 4834 times.
✗ Branch 6444 → 6445 not taken.
✗ Branch 6444 → 6492 not taken.
✗ Branch 7769 → 7770 not taken.
✗ Branch 7769 → 7817 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 105 → 106 taken 608 times.
✓ Branch 105 → 113 taken 1765253 times.
✗ Branch 106 → 107 not taken.
✓ Branch 106 → 108 taken 608 times.
✓ Branch 204 → 205 taken 332 times.
✓ Branch 204 → 212 taken 4186552 times.
✗ Branch 205 → 206 not taken.
✓ Branch 205 → 207 taken 332 times.
✗ Branch 379 → 380 not taken.
✗ Branch 379 → 391 not taken.
✗ Branch 432 → 433 not taken.
✗ Branch 432 → 440 not taken.
✗ Branch 433 → 434 not taken.
✗ Branch 433 → 435 not taken.
✗ Branch 531 → 532 not taken.
✗ Branch 531 → 539 not taken.
✗ Branch 532 → 533 not taken.
✗ Branch 532 → 534 not taken.
✗ Branch 655 → 656 not taken.
✗ Branch 655 → 667 not taken.
✗ Branch 915 → 916 not taken.
✗ Branch 915 → 927 not taken.
✗ Branch 1404 → 1405 not taken.
✗ Branch 1404 → 1416 not taken.
✗ Branch 1680 → 1681 not taken.
✗ Branch 1680 → 1692 not taken.
✗ Branch 1940 → 1941 not taken.
✗ Branch 1940 → 1952 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1956 → 1957 taken 396 times.
✓ Branch 1956 → 2009 taken 39490 times.
✓ Branch 7470 → 7471 taken 8130 times.
✓ Branch 7470 → 7523 taken 4834 times.
✗ Branch 12944 → 12945 not taken.
✗ Branch 12944 → 12997 not taken.
✗ Branch 18458 → 18459 not taken.
✗ Branch 18458 → 18511 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 441 → 442 not taken.
✗ Branch 441 → 454 not taken.
✗ Branch 1624 → 1625 not taken.
✗ Branch 1624 → 1637 not taken.
✗ Branch 2127 → 2128 not taken.
✗ Branch 2127 → 2140 not taken.
✗ Branch 2822 → 2823 not taken.
✗ Branch 2822 → 2835 not taken.
✗ Branch 4005 → 4006 not taken.
✗ Branch 4005 → 4018 not taken.
✗ Branch 4508 → 4509 not taken.
✗ Branch 4508 → 4521 not taken.
6076437 if (type == node_type::R) return alloc_item(type);
610
611 1844233 assert(type == node_type::P || type == node_type::S);
612
613 // If we want to ternarize, never reuse.
614
36/112
None:
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 35 not taken.
✗ Branch 24 → 25 not taken.
✗ Branch 24 → 37 not taken.
✗ Branch 252 → 253 not taken.
✗ Branch 252 → 264 not taken.
✗ Branch 312 → 313 not taken.
✗ Branch 312 → 325 not taken.
✗ Branch 528 → 529 not taken.
✗ Branch 528 → 540 not taken.
✗ Branch 788 → 789 not taken.
✗ Branch 788 → 800 not taken.
✗ Branch 1495 → 1496 not taken.
✗ Branch 1495 → 1508 not taken.
✗ Branch 1998 → 1999 not taken.
✗ Branch 1998 → 2011 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1689 → 1690 not taken.
✓ Branch 1689 → 1691 taken 39490 times.
✓ Branch 1691 → 1692 taken 19745 times.
✓ Branch 1691 → 1740 taken 19745 times.
✗ Branch 3012 → 3013 not taken.
✓ Branch 3012 → 3014 taken 4834 times.
✓ Branch 3014 → 3015 taken 2417 times.
✓ Branch 3014 → 3063 taken 2417 times.
✗ Branch 4186 → 4187 not taken.
✓ Branch 4186 → 4188 taken 278 times.
✓ Branch 4188 → 4189 taken 139 times.
✓ Branch 4188 → 4236 taken 139 times.
✗ Branch 6498 → 6499 not taken.
✗ Branch 6498 → 6500 not taken.
✗ Branch 6500 → 6501 not taken.
✗ Branch 6500 → 6549 not taken.
✗ Branch 7821 → 7822 not taken.
✗ Branch 7821 → 7823 not taken.
✗ Branch 7823 → 7824 not taken.
✗ Branch 7823 → 7872 not taken.
✗ Branch 8995 → 8996 not taken.
✓ Branch 8995 → 8997 taken 159008 times.
✓ Branch 8997 → 8998 taken 79504 times.
✓ Branch 8997 → 9045 taken 79504 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 115 → 116 taken 1071046 times.
✓ Branch 115 → 123 taken 694207 times.
✗ Branch 116 → 117 not taken.
✓ Branch 116 → 118 taken 1071046 times.
✓ Branch 212 → 213 taken 2943421 times.
✓ Branch 212 → 220 taken 1243131 times.
✗ Branch 213 → 214 not taken.
✓ Branch 213 → 215 taken 2943421 times.
✓ Branch 290 → 291 taken 438431 times.
✓ Branch 290 → 298 taken 16 times.
✗ Branch 291 → 292 not taken.
✓ Branch 291 → 293 taken 438431 times.
✗ Branch 394 → 395 not taken.
✗ Branch 394 → 406 not taken.
✗ Branch 442 → 443 not taken.
✗ Branch 442 → 450 not taken.
✗ Branch 443 → 444 not taken.
✗ Branch 443 → 445 not taken.
✗ Branch 539 → 540 not taken.
✗ Branch 539 → 547 not taken.
✗ Branch 540 → 541 not taken.
✗ Branch 540 → 542 not taken.
✓ Branch 617 → 618 taken 128745 times.
✓ Branch 617 → 625 taken 6122 times.
✗ Branch 618 → 619 not taken.
✓ Branch 618 → 620 taken 128745 times.
✗ Branch 670 → 671 not taken.
✗ Branch 670 → 682 not taken.
✗ Branch 930 → 931 not taken.
✗ Branch 930 → 942 not taken.
✗ Branch 1419 → 1420 not taken.
✗ Branch 1419 → 1431 not taken.
✗ Branch 1695 → 1696 not taken.
✗ Branch 1695 → 1707 not taken.
✗ Branch 1955 → 1956 not taken.
✗ Branch 1955 → 1967 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2015 → 2016 not taken.
✓ Branch 2015 → 2017 taken 39490 times.
✓ Branch 2017 → 2018 taken 19745 times.
✓ Branch 2017 → 2071 taken 19745 times.
✗ Branch 7527 → 7528 not taken.
✓ Branch 7527 → 7529 taken 4834 times.
✓ Branch 7529 → 7530 taken 2417 times.
✓ Branch 7529 → 7583 taken 2417 times.
✗ Branch 9774 → 9775 not taken.
✓ Branch 9774 → 9776 taken 278 times.
✓ Branch 9776 → 9777 taken 139 times.
✓ Branch 9776 → 9829 taken 139 times.
✗ Branch 13003 → 13004 not taken.
✗ Branch 13003 → 13005 not taken.
✗ Branch 13005 → 13006 not taken.
✗ Branch 13005 → 13059 not taken.
✗ Branch 18515 → 18516 not taken.
✗ Branch 18515 → 18517 not taken.
✗ Branch 18517 → 18518 not taken.
✗ Branch 18517 → 18571 not taken.
✗ Branch 20762 → 20763 not taken.
✓ Branch 20762 → 20764 taken 159008 times.
✓ Branch 20764 → 20765 taken 79504 times.
✓ Branch 20764 → 20817 taken 79504 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 457 → 458 not taken.
✗ Branch 457 → 470 not taken.
✗ Branch 1640 → 1641 not taken.
✗ Branch 1640 → 1653 not taken.
✗ Branch 2143 → 2144 not taken.
✗ Branch 2143 → 2156 not taken.
✗ Branch 2838 → 2839 not taken.
✗ Branch 2838 → 2851 not taken.
✗ Branch 4021 → 4022 not taken.
✗ Branch 4021 → 4034 not taken.
✗ Branch 4524 → 4525 not taken.
✗ Branch 4524 → 4537 not taken.
11717592 if (ternarize) return alloc_item(type);
615
616
8/12
✓ Branch 123 → 124 taken 386292 times.
✓ Branch 123 → 125 taken 307915 times.
✓ Branch 220 → 221 taken 443140 times.
✓ Branch 220 → 222 taken 799991 times.
✓ Branch 298 → 299 taken 12 times.
✓ Branch 298 → 300 taken 4 times.
✗ Branch 450 → 451 not taken.
✗ Branch 450 → 452 not taken.
✗ Branch 547 → 548 not taken.
✗ Branch 547 → 549 not taken.
✓ Branch 625 → 626 taken 3623 times.
✓ Branch 625 → 627 taken 2499 times.
2147086 bool top_dir = stack_dir[t.top_depth];
617 3387373 assert(get_side(t.spans, !top_dir).empty());
618
24/36
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1789 → 1790 taken 18319 times.
✓ Branch 1789 → 1794 taken 1426 times.
✓ Branch 3112 → 3113 taken 822 times.
✓ Branch 3112 → 3117 taken 1595 times.
✓ Branch 4285 → 4286 taken 23 times.
✓ Branch 4285 → 4290 taken 116 times.
✗ Branch 6598 → 6599 not taken.
✗ Branch 6598 → 6603 not taken.
✗ Branch 7921 → 7922 not taken.
✗ Branch 7921 → 7926 not taken.
✓ Branch 9094 → 9095 taken 58711 times.
✓ Branch 9094 → 9099 taken 20793 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 127 → 128 taken 307915 times.
✓ Branch 127 → 129 taken 386292 times.
✓ Branch 224 → 225 taken 799991 times.
✓ Branch 224 → 226 taken 443140 times.
✓ Branch 302 → 303 taken 4 times.
✓ Branch 302 → 304 taken 12 times.
✗ Branch 454 → 455 not taken.
✗ Branch 454 → 456 not taken.
✗ Branch 551 → 552 not taken.
✗ Branch 551 → 553 not taken.
✓ Branch 629 → 630 taken 2499 times.
✓ Branch 629 → 631 taken 3623 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2120 → 2121 taken 18319 times.
✓ Branch 2120 → 2125 taken 1426 times.
✓ Branch 7632 → 7633 taken 822 times.
✓ Branch 7632 → 7637 taken 1595 times.
✓ Branch 9878 → 9879 taken 23 times.
✓ Branch 9878 → 9883 taken 116 times.
✗ Branch 13108 → 13109 not taken.
✗ Branch 13108 → 13113 not taken.
✗ Branch 18620 → 18621 not taken.
✗ Branch 18620 → 18625 not taken.
✓ Branch 20866 → 20867 taken 58711 times.
✓ Branch 20866 → 20871 taken 20793 times.
2554306 int item = get_side(t.spans, top_dir).v[0] >> 1;
619 3664715 assert(item == (get_side(t.spans, top_dir).v[1] >> 1));
620
23/76
None:
✗ Branch 47 → 48 not taken.
✗ Branch 47 → 51 not taken.
✗ Branch 49 → 50 not taken.
✗ Branch 49 → 90 not taken.
✗ Branch 276 → 277 not taken.
✗ Branch 276 → 280 not taken.
✗ Branch 337 → 338 not taken.
✗ Branch 337 → 378 not taken.
✗ Branch 552 → 553 not taken.
✗ Branch 552 → 556 not taken.
✗ Branch 812 → 813 not taken.
✗ Branch 812 → 816 not taken.
✗ Branch 1520 → 1521 not taken.
✗ Branch 1520 → 1561 not taken.
✗ Branch 2023 → 2024 not taken.
✗ Branch 2023 → 2064 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1841 → 1842 taken 8312 times.
✓ Branch 1841 → 1864 taken 11433 times.
✓ Branch 3164 → 3165 taken 419 times.
✓ Branch 3164 → 3187 taken 1998 times.
✓ Branch 4337 → 4338 taken 3 times.
✓ Branch 4337 → 4360 taken 136 times.
✗ Branch 6650 → 6651 not taken.
✗ Branch 6650 → 6673 not taken.
✗ Branch 7973 → 7974 not taken.
✗ Branch 7973 → 7996 not taken.
✓ Branch 9146 → 9147 taken 28104 times.
✓ Branch 9146 → 9169 taken 51400 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 133 → 134 taken 266728 times.
✓ Branch 133 → 137 taken 427479 times.
✓ Branch 230 → 231 taken 908319 times.
✓ Branch 230 → 234 taken 334812 times.
✗ Branch 308 → 309 not taken.
✓ Branch 308 → 312 taken 16 times.
✗ Branch 418 → 419 not taken.
✗ Branch 418 → 422 not taken.
✗ Branch 460 → 461 not taken.
✗ Branch 460 → 464 not taken.
✗ Branch 557 → 558 not taken.
✗ Branch 557 → 561 not taken.
✓ Branch 635 → 636 taken 173 times.
✓ Branch 635 → 639 taken 5949 times.
✗ Branch 694 → 695 not taken.
✗ Branch 694 → 698 not taken.
✗ Branch 954 → 955 not taken.
✗ Branch 954 → 958 not taken.
✗ Branch 1443 → 1444 not taken.
✗ Branch 1443 → 1447 not taken.
✗ Branch 1719 → 1720 not taken.
✗ Branch 1719 → 1723 not taken.
✗ Branch 1979 → 1980 not taken.
✗ Branch 1979 → 1983 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2172 → 2173 taken 8312 times.
✓ Branch 2172 → 2384 taken 11433 times.
✓ Branch 7684 → 7685 taken 419 times.
✓ Branch 7684 → 7826 taken 1998 times.
✓ Branch 9930 → 9931 taken 3 times.
✓ Branch 9930 → 10072 taken 136 times.
✗ Branch 13160 → 13161 not taken.
✗ Branch 13160 → 13372 not taken.
✗ Branch 18672 → 18673 not taken.
✗ Branch 18672 → 18814 not taken.
✓ Branch 20918 → 20919 taken 28104 times.
✓ Branch 20918 → 21060 taken 51400 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 482 → 483 not taken.
✗ Branch 482 → 523 not taken.
✗ Branch 1665 → 1666 not taken.
✗ Branch 1665 → 1706 not taken.
✗ Branch 2168 → 2169 not taken.
✗ Branch 2168 → 2209 not taken.
✗ Branch 2863 → 2864 not taken.
✗ Branch 2863 → 2904 not taken.
✗ Branch 4046 → 4047 not taken.
✗ Branch 4046 → 4087 not taken.
✗ Branch 4549 → 4550 not taken.
✗ Branch 4549 → 4590 not taken.
2147086 if (item_types[item] == type) {
621
22/36
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1855 → 1856 taken 436 times.
✓ Branch 1855 → 1857 taken 7876 times.
✓ Branch 3178 → 3179 taken 341 times.
✓ Branch 3178 → 3180 taken 78 times.
✓ Branch 4351 → 4352 taken 2 times.
✓ Branch 4351 → 4353 taken 1 time.
✗ Branch 6664 → 6665 not taken.
✗ Branch 6664 → 6666 not taken.
✗ Branch 7987 → 7988 not taken.
✗ Branch 7987 → 7989 not taken.
✓ Branch 9160 → 9161 taken 7583 times.
✓ Branch 9160 → 9162 taken 20521 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 134 → 135 taken 119069 times.
✓ Branch 134 → 136 taken 147659 times.
✓ Branch 231 → 232 taken 741242 times.
✓ Branch 231 → 233 taken 167077 times.
✗ Branch 309 → 310 not taken.
✗ Branch 309 → 311 not taken.
✗ Branch 461 → 462 not taken.
✗ Branch 461 → 463 not taken.
✗ Branch 558 → 559 not taken.
✗ Branch 558 → 560 not taken.
✓ Branch 636 → 637 taken 69 times.
✓ Branch 636 → 638 taken 104 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2186 → 2187 taken 436 times.
✓ Branch 2186 → 2188 taken 7876 times.
✓ Branch 7698 → 7699 taken 341 times.
✓ Branch 7698 → 7700 taken 78 times.
✓ Branch 9944 → 9945 taken 2 times.
✓ Branch 9944 → 9946 taken 1 time.
✗ Branch 13174 → 13175 not taken.
✗ Branch 13174 → 13176 not taken.
✗ Branch 18686 → 18687 not taken.
✗ Branch 18686 → 18688 not taken.
✓ Branch 20932 → 20933 taken 7583 times.
✓ Branch 20932 → 20934 taken 20521 times.
1265620 t.spans = set_sides(top_dir, item_ch[item], {});
622 if constexpr (with_planarity) {
623 // Unwrap the planarity data
624 // We don't really need to maintain this at all because S/P nodes are known to be trivially planar
625 // The current state is just make_edge_planarity(wrapped), which means that it has the right shape, just needs to be relabelled.
626 73676 assert(node_planarity[item - (1 + NV + NE)]);
627 36838 const auto& matches = *node_planarity[item - (1 + NV + NE)];
628 73676 assert(t.planarity);
629 36838 auto& p = *t.planarity;
630
2/24
None:
✗ Branch 62 → 63 not taken.
✗ Branch 62 → 76 not taken.
✗ Branch 350 → 351 not taken.
✗ Branch 350 → 364 not taken.
✗ Branch 1533 → 1534 not taken.
✗ Branch 1533 → 1547 not taken.
✗ Branch 2036 → 2037 not taken.
✗ Branch 2036 → 2050 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2245 → 2246 taken 71 times.
✓ Branch 2245 → 2315 taken 8241 times.
✗ Branch 13233 → 13234 not taken.
✗ Branch 13233 → 13303 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 495 → 496 not taken.
✗ Branch 495 → 509 not taken.
✗ Branch 1678 → 1679 not taken.
✗ Branch 1678 → 1692 not taken.
✗ Branch 2181 → 2182 not taken.
✗ Branch 2181 → 2195 not taken.
✗ Branch 2876 → 2877 not taken.
✗ Branch 2876 → 2890 not taken.
✗ Branch 4059 → 4060 not taken.
✗ Branch 4059 → 4073 not taken.
✗ Branch 4562 → 4563 not taken.
✗ Branch 4562 → 4576 not taken.
8312 if (is_tree) {
631 213 p.sides[0].bot_ends[0] = matches[2 * !top_dir + 1];
632 213 p.sides[0].bot_ends[1] = matches[2 * top_dir + 0];
633 213 p.sides[1].bot_ends[0] = matches[2 * !top_dir + 0];
634 213 p.sides[1].bot_ends[1] = matches[2 * top_dir + 1];
635 } else {
636 110301 p.sides[0].bot_ends[0] = matches[2 * !top_dir + 1];
637 110301 p.sides[0].bot_ends[1] = matches[2 * !top_dir + 0];
638 110301 p.sides[0].tops[0].end = matches[2 * top_dir + 0];
639 110301 p.sides[0].tops[1].end = matches[2 * top_dir + 1];
640 }
641 }
642 1212058 return item;
643 } else {
644
4/12
✗ Branch 137 → 138 not taken.
✓ Branch 137 → 139 taken 427479 times.
✗ Branch 234 → 235 not taken.
✓ Branch 234 → 236 taken 334812 times.
✗ Branch 312 → 313 not taken.
✓ Branch 312 → 314 taken 16 times.
✗ Branch 464 → 465 not taken.
✗ Branch 464 → 466 not taken.
✗ Branch 561 → 562 not taken.
✗ Branch 561 → 563 not taken.
✗ Branch 639 → 640 not taken.
✓ Branch 639 → 641 taken 5949 times.
1796380 return alloc_item(type);
645 }
646 };
647
648 13496677 auto finish_tstack_top = [&] [[gnu::always_inline]] (int item, bool is_tree) -> void {
649 6950331 tstack_t& t = cur_tstack();
650
8/12
✓ Branch 152 → 153 taken 1033999 times.
✓ Branch 152 → 154 taken 731862 times.
✓ Branch 265 → 266 taken 1373791 times.
✓ Branch 265 → 267 taken 2813093 times.
✓ Branch 327 → 328 taken 346679 times.
✓ Branch 327 → 329 taken 91768 times.
✗ Branch 479 → 480 not taken.
✗ Branch 479 → 481 not taken.
✗ Branch 592 → 593 not taken.
✗ Branch 592 → 594 not taken.
✓ Branch 654 → 655 taken 73731 times.
✓ Branch 654 → 656 taken 61136 times.
6950331 bool top_dir = stack_dir[t.top_depth];
651 10627075 assert(get_side(t.spans, !top_dir).empty());
652
653 if constexpr (with_planarity) {
654
6/32
None:
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 46 not taken.
✗ Branch 535 → 536 not taken.
✗ Branch 535 → 567 not taken.
✗ Branch 1865 → 1866 not taken.
✗ Branch 1865 → 1897 not taken.
✗ Branch 2180 → 2181 not taken.
✗ Branch 2180 → 2212 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3155 → 3156 taken 39740 times.
✓ Branch 3155 → 3262 taken 146 times.
✓ Branch 9320 → 9321 taken 5458 times.
✓ Branch 9320 → 9425 taken 7506 times.
✓ Branch 10694 → 10695 taken 278 times.
✗ Branch 10694 → 10799 not taken.
✗ Branch 14143 → 14144 not taken.
✗ Branch 14143 → 14250 not taken.
✗ Branch 20308 → 20309 not taken.
✗ Branch 20308 → 20413 not taken.
✓ Branch 21682 → 21683 taken 159008 times.
✗ Branch 21682 → 21787 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 680 → 681 not taken.
✗ Branch 680 → 712 not taken.
✗ Branch 2010 → 2011 not taken.
✗ Branch 2010 → 2042 not taken.
✗ Branch 2325 → 2326 not taken.
✗ Branch 2325 → 2357 not taken.
✗ Branch 3061 → 3062 not taken.
✗ Branch 3061 → 3093 not taken.
✗ Branch 4391 → 4392 not taken.
✗ Branch 4391 → 4423 not taken.
✗ Branch 4706 → 4707 not taken.
✗ Branch 4706 → 4738 not taken.
424272 if (t.planarity) {
655 204484 const auto& p = *t.planarity;
656 204484 std::array<int, 4> matches{};
657 ✗ if (is_tree) {
658 119220 matches[2 * !top_dir + 1] = p.sides[0].bot_ends[0];
659 119220 matches[2 * top_dir + 0] = p.sides[0].bot_ends[1];
660 119220 matches[2 * !top_dir + 0] = p.sides[1].bot_ends[0];
661 119220 matches[2 * top_dir + 1] = p.sides[1].bot_ends[1];
662 } else {
663 494232 matches[2 * !top_dir + 1] = p.sides[0].bot_ends[0];
664 494232 matches[2 * !top_dir + 0] = p.sides[0].bot_ends[1];
665 494232 matches[2 * top_dir + 0] = p.sides[0].tops[0].end;
666 494232 matches[2 * top_dir + 1] = p.sides[0].tops[1].end;
667 }
668
0/10
None:
✗ Branch 44 → 45 not taken.
✗ Branch 565 → 566 not taken.
✗ Branch 1895 → 1896 not taken.
✗ Branch 2210 → 2211 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 710 → 711 not taken.
✗ Branch 2040 → 2041 not taken.
✗ Branch 2355 → 2356 not taken.
✗ Branch 3091 → 3092 not taken.
✗ Branch 4421 → 4422 not taken.
✗ Branch 4736 → 4737 not taken.
408968 node_planarity[item - (1 + NV + NE)] = matches;
669 } else {
670 7652 assert(item_types[item] == node_type::R);
671
0/10
None:
✗ Branch 51 → 52 not taken.
✗ Branch 572 → 573 not taken.
✗ Branch 1902 → 1903 not taken.
✗ Branch 2217 → 2218 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 717 → 718 not taken.
✗ Branch 2047 → 2048 not taken.
✗ Branch 2362 → 2363 not taken.
✗ Branch 3098 → 3099 not taken.
✗ Branch 4428 → 4429 not taken.
✗ Branch 4743 → 4744 not taken.
15304 node_planarity[item - (1 + NV + NE)] = std::unexpected(nonplanarity_certficate_t{});
672 }
673 }
674
16/24
✓ Branch 156 → 157 taken 731862 times.
✓ Branch 156 → 158 taken 1033999 times.
✓ Branch 158 → 159 taken 1033999 times.
✓ Branch 158 → 160 taken 731862 times.
✓ Branch 269 → 270 taken 2813093 times.
✓ Branch 269 → 271 taken 1373791 times.
✓ Branch 271 → 272 taken 1373791 times.
✓ Branch 271 → 273 taken 2813093 times.
✓ Branch 331 → 332 taken 91768 times.
✓ Branch 331 → 333 taken 346679 times.
✓ Branch 333 → 334 taken 346679 times.
✓ Branch 333 → 335 taken 91768 times.
✗ Branch 483 → 484 not taken.
✗ Branch 483 → 485 not taken.
✗ Branch 485 → 486 not taken.
✗ Branch 485 → 487 not taken.
✗ Branch 596 → 597 not taken.
✗ Branch 596 → 598 not taken.
✗ Branch 598 → 599 not taken.
✗ Branch 598 → 600 not taken.
✓ Branch 658 → 659 taken 61136 times.
✓ Branch 658 → 660 taken 73731 times.
✓ Branch 660 → 661 taken 73731 times.
✓ Branch 660 → 662 taken 61136 times.
11072462 item_vs[item] = make_vs(t.v_start, t.top_depth);
675
32/48
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2263 → 2264 taken 37016 times.
✓ Branch 2263 → 2268 taken 2870 times.
✓ Branch 4010 → 4011 taken 1714 times.
✓ Branch 4010 → 4015 taken 11250 times.
✓ Branch 4759 → 4760 taken 46 times.
✓ Branch 4759 → 4764 taken 232 times.
✗ Branch 7072 → 7073 not taken.
✗ Branch 7072 → 7077 not taken.
✗ Branch 8819 → 8820 not taken.
✗ Branch 8819 → 8824 not taken.
✓ Branch 9568 → 9569 taken 117422 times.
✓ Branch 9568 → 9573 taken 41586 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 158 → 159 taken 1033999 times.
✓ Branch 158 → 160 taken 731862 times.
✓ Branch 161 → 162 taken 731862 times.
✓ Branch 161 → 163 taken 1033999 times.
✓ Branch 271 → 272 taken 1373791 times.
✓ Branch 271 → 273 taken 2813093 times.
✓ Branch 274 → 275 taken 2813093 times.
✓ Branch 274 → 276 taken 1373791 times.
✓ Branch 333 → 334 taken 346679 times.
✓ Branch 333 → 335 taken 91768 times.
✓ Branch 336 → 337 taken 91768 times.
✓ Branch 336 → 338 taken 346679 times.
✗ Branch 485 → 486 not taken.
✗ Branch 485 → 487 not taken.
✗ Branch 488 → 489 not taken.
✗ Branch 488 → 490 not taken.
✗ Branch 598 → 599 not taken.
✗ Branch 598 → 600 not taken.
✗ Branch 601 → 602 not taken.
✗ Branch 601 → 603 not taken.
✓ Branch 660 → 661 taken 73731 times.
✓ Branch 660 → 662 taken 61136 times.
✓ Branch 663 → 664 taken 61136 times.
✓ Branch 663 → 665 taken 73731 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3342 → 3343 taken 37016 times.
✓ Branch 3342 → 3347 taken 2870 times.
✓ Branch 9505 → 9506 taken 1714 times.
✓ Branch 9505 → 9510 taken 11250 times.
✓ Branch 10879 → 10880 taken 46 times.
✓ Branch 10879 → 10884 taken 232 times.
✗ Branch 14330 → 14331 not taken.
✗ Branch 14330 → 14335 not taken.
✗ Branch 20493 → 20494 not taken.
✗ Branch 20493 → 20498 not taken.
✓ Branch 21867 → 21868 taken 117422 times.
✓ Branch 21867 → 21872 taken 41586 times.
13900662 item_ch[item] = get_side(t.spans, top_dir);
676
677
24/36
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2293 → 2294 taken 2870 times.
✓ Branch 2293 → 2295 taken 37016 times.
✓ Branch 4040 → 4041 taken 11250 times.
✓ Branch 4040 → 4042 taken 1714 times.
✓ Branch 4789 → 4790 taken 232 times.
✓ Branch 4789 → 4791 taken 46 times.
✗ Branch 7102 → 7103 not taken.
✗ Branch 7102 → 7104 not taken.
✗ Branch 8849 → 8850 not taken.
✗ Branch 8849 → 8851 not taken.
✓ Branch 9598 → 9599 taken 41586 times.
✓ Branch 9598 → 9600 taken 117422 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 161 → 162 taken 731862 times.
✓ Branch 161 → 163 taken 1033999 times.
✓ Branch 274 → 275 taken 2813093 times.
✓ Branch 274 → 276 taken 1373791 times.
✓ Branch 336 → 337 taken 91768 times.
✓ Branch 336 → 338 taken 346679 times.
✗ Branch 488 → 489 not taken.
✗ Branch 488 → 490 not taken.
✗ Branch 601 → 602 not taken.
✗ Branch 601 → 603 not taken.
✓ Branch 663 → 664 taken 61136 times.
✓ Branch 663 → 665 taken 73731 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3372 → 3373 taken 2870 times.
✓ Branch 3372 → 3374 taken 37016 times.
✓ Branch 9535 → 9536 taken 11250 times.
✓ Branch 9535 → 9537 taken 1714 times.
✓ Branch 10909 → 10910 taken 232 times.
✓ Branch 10909 → 10911 taken 46 times.
✗ Branch 14360 → 14361 not taken.
✗ Branch 14360 → 14362 not taken.
✗ Branch 20523 → 20524 not taken.
✗ Branch 20523 → 20525 not taken.
✓ Branch 21897 → 21898 taken 41586 times.
✓ Branch 21897 → 21899 taken 117422 times.
7062207 t.spans = set_sides(top_dir, unit_list(item), {});
678
0/20
None:
✗ Branch 63 → 64 not taken.
✗ Branch 63 → 65 not taken.
✗ Branch 584 → 585 not taken.
✗ Branch 584 → 586 not taken.
✗ Branch 1914 → 1915 not taken.
✗ Branch 1914 → 1916 not taken.
✗ Branch 2229 → 2230 not taken.
✗ Branch 2229 → 2231 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 729 → 730 not taken.
✗ Branch 729 → 731 not taken.
✗ Branch 2059 → 2060 not taken.
✗ Branch 2059 → 2061 not taken.
✗ Branch 2374 → 2375 not taken.
✗ Branch 2374 → 2376 not taken.
✗ Branch 3110 → 3111 not taken.
✗ Branch 3110 → 3112 not taken.
✗ Branch 4440 → 4441 not taken.
✗ Branch 4440 → 4442 not taken.
✗ Branch 4755 → 4756 not taken.
✗ Branch 4755 → 4757 not taken.
7162467 t.planarity = make_edge_planarity(item, t.top_depth, is_tree);
679 };
680
681 struct dfs_stack_t {
682 bool has_vert_tstack;
683 int ch_idx;
684 int ch_end;
685 int orig_tstack;
686 };
687
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 99 → 100 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 23 → 24 taken 87 times.
✗ Branch 41 → 42 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 100 → 101 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 42 → 43 not taken.
20287 std::vector<dfs_stack_t> stk; stk.reserve(NV);
688
6/10
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9740 → 104 taken 16368 times.
✓ Branch 9740 → 9741 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 679 → 25 taken 1786537 times.
✓ Branch 679 → 680 taken 87 times.
✗ Branch 2111 → 44 not taken.
✗ Branch 2111 → 2112 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22099 → 105 taken 16368 times.
✓ Branch 22099 → 22100 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4824 → 45 not taken.
✗ Branch 4824 → 4825 not taken.
1839560 for (auto rt : roots) {
689 29008464 auto push_vert = [&] [[gnu::always_inline]] (int cur) -> void {
690 // stack_dir[cur_depth] must already be set for the lowval, so that we can push the vert tstack
691 28975728 int cur_depth = int(stk.size());
692 14588864 stack_verts[cur_depth] = cur;
693
694 14588864 int lo = outedges.bounds[cur];
695 14588864 int hi = outedges.bounds[cur+1];
696 bool has_vert_tstack;
697 {
698 // Find the first same-BCC edge, and check it's type 2 (has lowval2), if so it's the ear tstack and we defer pushing ourselves.
699 14588864 int first_edge = lo;
700
21/54
None:
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 13 not taken.
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 13 not taken.
✗ Branch 14 → 7 not taken.
✗ Branch 14 → 15 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 140 → 141 taken 17042 times.
✓ Branch 140 → 154 taken 16368 times.
✓ Branch 152 → 153 taken 17042 times.
✗ Branch 152 → 154 not taken.
✓ Branch 4982 → 4983 taken 128132 times.
✓ Branch 4982 → 4996 taken 6238 times.
✓ Branch 4994 → 4995 taken 49738 times.
✓ Branch 4994 → 4996 taken 78394 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 28 → 29 taken 396887 times.
✓ Branch 28 → 31 taken 1786537 times.
✓ Branch 29 → 30 taken 396887 times.
✗ Branch 29 → 31 not taken.
✗ Branch 53 → 54 not taken.
✗ Branch 53 → 58 not taken.
✗ Branch 56 → 57 not taken.
✗ Branch 56 → 58 not taken.
✗ Branch 59 → 52 not taken.
✗ Branch 59 → 60 not taken.
✓ Branch 362 → 363 taken 12284206 times.
✓ Branch 362 → 365 taken 5139837 times.
✓ Branch 363 → 364 taken 4823716 times.
✓ Branch 363 → 365 taken 7460490 times.
✗ Branch 1091 → 1092 not taken.
✗ Branch 1091 → 1096 not taken.
✗ Branch 1094 → 1095 not taken.
✗ Branch 1094 → 1096 not taken.
✗ Branch 1097 → 1090 not taken.
✗ Branch 1097 → 1098 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 141 → 142 taken 17042 times.
✓ Branch 141 → 155 taken 16368 times.
✓ Branch 153 → 154 taken 17042 times.
✗ Branch 153 → 155 not taken.
✓ Branch 11162 → 11163 taken 128132 times.
✓ Branch 11162 → 11176 taken 6238 times.
✓ Branch 11174 → 11175 taken 49738 times.
✓ Branch 11174 → 11176 taken 78394 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 54 → 55 not taken.
✗ Branch 54 → 59 not taken.
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 59 not taken.
✗ Branch 60 → 53 not taken.
✗ Branch 60 → 61 not taken.
✗ Branch 2448 → 2449 not taken.
✗ Branch 2448 → 2453 not taken.
✗ Branch 2451 → 2452 not taken.
✗ Branch 2451 → 2453 not taken.
✗ Branch 2454 → 2447 not taken.
✗ Branch 2454 → 2455 not taken.
20099815 while (first_edge < hi && outedges.dat[first_edge].key.is_new_block()) first_edge++;
701
15/54
None:
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 20 not taken.
✗ Branch 18 → 19 not taken.
✗ Branch 18 → 20 not taken.
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 66 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 154 → 155 not taken.
✓ Branch 154 → 166 taken 16368 times.
✗ Branch 165 → 166 not taken.
✗ Branch 165 → 196 not taken.
✓ Branch 4996 → 4997 taken 78394 times.
✓ Branch 4996 → 5008 taken 6238 times.
✓ Branch 5007 → 5008 taken 60400 times.
✓ Branch 5007 → 5038 taken 17994 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 31 → 32 not taken.
✓ Branch 31 → 33 taken 1786537 times.
✗ Branch 32 → 33 not taken.
✗ Branch 32 → 34 not taken.
✗ Branch 60 → 61 not taken.
✗ Branch 60 → 65 not taken.
✗ Branch 63 → 64 not taken.
✗ Branch 63 → 65 not taken.
✗ Branch 66 → 67 not taken.
✗ Branch 66 → 111 not taken.
✓ Branch 365 → 366 taken 7460490 times.
✓ Branch 365 → 367 taken 5139837 times.
✓ Branch 366 → 367 taken 4552608 times.
✓ Branch 366 → 368 taken 2907882 times.
✗ Branch 1098 → 1099 not taken.
✗ Branch 1098 → 1103 not taken.
✗ Branch 1101 → 1102 not taken.
✗ Branch 1101 → 1103 not taken.
✗ Branch 1104 → 1105 not taken.
✗ Branch 1104 → 1149 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 155 → 156 not taken.
✓ Branch 155 → 167 taken 16368 times.
✗ Branch 166 → 167 not taken.
✗ Branch 166 → 198 not taken.
✓ Branch 11176 → 11177 taken 78394 times.
✓ Branch 11176 → 11188 taken 6238 times.
✓ Branch 11187 → 11188 taken 60400 times.
✓ Branch 11187 → 11219 taken 17994 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 61 → 62 not taken.
✗ Branch 61 → 66 not taken.
✗ Branch 64 → 65 not taken.
✗ Branch 64 → 66 not taken.
✗ Branch 67 → 68 not taken.
✗ Branch 67 → 112 not taken.
✗ Branch 2455 → 2456 not taken.
✗ Branch 2455 → 2460 not taken.
✗ Branch 2458 → 2459 not taken.
✗ Branch 2458 → 2460 not taken.
✗ Branch 2461 → 2462 not taken.
✗ Branch 2461 → 2506 not taken.
14588864 if (first_edge < hi && outedges.dat[first_edge].key.is_type_2()) {
702 // Move first_edge to the beginning
703 2943870 auto e = outedges.dat[first_edge];
704 3267762 std::move_backward(outedges.dat.begin() + lo, outedges.dat.begin() + first_edge, outedges.dat.begin() + first_edge + 1);
705 2943870 outedges.dat[lo] = e;
706 2943870 has_vert_tstack = false;
707 } else {
708
3/4
✗ Branch 33 → 36 not taken.
✓ Branch 33 → 37 taken 1786537 times.
✓ Branch 367 → 370 taken 1620473 times.
✓ Branch 367 → 371 taken 8071972 times.
11644994 push_vert_tstack(cur, cur_depth);
709 11644994 has_vert_tstack = true;
710 }
711 }
712
2/8
None:
✗ Branch 77 → 78 not taken.
✗ Branch 79 → 80 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 39 → 40 taken 1786537 times.
✗ Branch 122 → 123 not taken.
✓ Branch 373 → 374 taken 12600327 times.
✗ Branch 1160 → 1161 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 125 → 126 not taken.
✗ Branch 2519 → 2520 not taken.
14588864 stk.push_back({has_vert_tstack, lo, hi, -1});
713 };
714 // return true means jump to start_edge, return false means jump to finish_edge
715 17914937 auto start_edge = [&] [[gnu::always_inline]] () -> std::optional<int> {
716
1/2
✗ Branch 346 → 347 not taken.
✓ Branch 346 → 348 taken 16095664 times.
17105664 int cur_depth = int(stk.size()) - 1;
717
1/2
✗ Branch 348 → 349 not taken.
✓ Branch 348 → 350 taken 16095664 times.
17105664 auto& s = stk.back();
718 17105664 assert(s.ch_idx < s.ch_end);
719
2/2
✓ Branch 350 → 351 taken 10875061 times.
✓ Branch 350 → 353 taken 5220603 times.
17105664 auto [_, nxt, e_side, key] = outedges.dat[s.ch_idx];
720 17105664 auto [lowval, is_tree, is_type_1] = key.unpack(cur_depth);
721
722 // edge_dir convention: false is forwards, true is backwards.
723 // That means that cur is on the edge_dir side and nxt is on the !edge_dir side.
724
13/26
None:
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 12 not taken.
✗ Branch 10 → 11 not taken.
✗ Branch 10 → 12 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4886 → 4887 taken 438220 times.
✓ Branch 4886 → 4895 taken 66780 times.
✓ Branch 4893 → 4894 taken 288562 times.
✓ Branch 4893 → 4895 taken 149658 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 350 → 351 taken 10875061 times.
✓ Branch 350 → 353 taken 5220603 times.
✓ Branch 351 → 352 taken 5344709 times.
✓ Branch 351 → 353 taken 5530352 times.
✗ Branch 353 → 354 not taken.
✓ Branch 353 → 355 taken 16095664 times.
✗ Branch 1063 → 1064 not taken.
✗ Branch 1063 → 1067 not taken.
✗ Branch 1065 → 1066 not taken.
✗ Branch 1065 → 1067 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 11066 → 11067 taken 438220 times.
✓ Branch 11066 → 11075 taken 66780 times.
✓ Branch 11073 → 11074 taken 288562 times.
✓ Branch 11073 → 11075 taken 149658 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2420 → 2421 not taken.
✗ Branch 2420 → 2424 not taken.
✗ Branch 2422 → 2423 not taken.
✗ Branch 2422 → 2424 not taken.
23027497 stack_dir[cur_depth] = (lowval >= cur_depth ? false : !stack_dir[lowval]);
725
726
1/2
✗ Branch 353 → 354 not taken.
✓ Branch 353 → 355 taken 16095664 times.
17105664 s.orig_tstack = int(tstack.size());
727
8/16
None:
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 23 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4910 → 4911 not taken.
✓ Branch 4910 → 4912 taken 505000 times.
✓ Branch 4912 → 4913 taken 84632 times.
✓ Branch 4912 → 4948 taken 420368 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 355 → 356 taken 12600327 times.
✓ Branch 355 → 357 taken 3495337 times.
✗ Branch 1070 → 1071 not taken.
✗ Branch 1070 → 1078 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 11090 → 11091 not taken.
✓ Branch 11090 → 11092 taken 505000 times.
✓ Branch 11092 → 11093 taken 84632 times.
✓ Branch 11092 → 11128 taken 420368 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2427 → 2428 not taken.
✗ Branch 2427 → 2435 not taken.
17105664 if (is_tree) {
728 12769591 stack_dir[cur_depth+1] = !stack_dir[std::min(lowval, cur_depth)];
729 12769591 first_occurrence[cur_depth] = NE;
730 12938855 return nxt;
731 } else {
732 4336073 return std::nullopt;
733 }
734 };
735 17914937 auto finish_edge = [&] [[gnu::always_inline]] () -> void {
736
2/4
✗ Branch 48 → 49 not taken.
✓ Branch 48 → 50 taken 12600327 times.
✗ Branch 375 → 376 not taken.
✓ Branch 375 → 377 taken 3495337 times.
17105664 int cur_depth = int(stk.size()) - 1;
737
2/4
✗ Branch 50 → 51 not taken.
✓ Branch 50 → 52 taken 12600327 times.
✗ Branch 377 → 378 not taken.
✓ Branch 377 → 379 taken 3495337 times.
17105664 auto& s = stk.back();
738
2/4
✗ Branch 50 → 51 not taken.
✓ Branch 50 → 52 taken 12600327 times.
✗ Branch 377 → 378 not taken.
✓ Branch 377 → 379 taken 3495337 times.
17105664 int cur = stack_verts[cur_depth];
739 17105664 assert(s.ch_idx < s.ch_end);
740
741
4/4
✓ Branch 52 → 53 taken 5220579 times.
✓ Branch 52 → 84 taken 7379748 times.
✓ Branch 379 → 380 taken 24 times.
✓ Branch 379 → 411 taken 3495313 times.
17105664 auto [_, nxt, e_side, key] = outedges.dat[s.ch_idx];
742 17105664 int e = e_side >> 1;
743 17105664 s.ch_idx++;
744
745 17105664 auto [lowval, is_tree, is_type_1] = key.unpack(cur_depth);
746
747 17105664 const int orig_tstack = s.orig_tstack;
748 17105664 const bool edge_dir = stack_dir[cur_depth];
749
750
12/23
None:
✗ Branch 10 → 11 not taken.
✗ Branch 10 → 118 not taken.
✗ Branch 10 → 120 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 684 → 685 taken 16290 times.
✓ Branch 684 → 1147 taken 68342 times.
✓ Branch 5492 → 5493 taken 50490 times.
✓ Branch 5492 → 5956 taken 369878 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 52 → 53 taken 5220579 times.
✓ Branch 52 → 84 taken 7379748 times.
✗ Branch 152 → 153 not taken.
✗ Branch 152 → 260 not taken.
✓ Branch 379 → 380 taken 24 times.
✓ Branch 379 → 411 taken 3495313 times.
✗ Branch 1177 → 1178 not taken.
✗ Branch 1177 → 1285 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 690 → 691 taken 16290 times.
✓ Branch 690 → 1165 taken 68342 times.
✓ Branch 11678 → 11679 taken 50490 times.
✓ Branch 11678 → 12153 taken 369878 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 155 → 156 not taken.
✗ Branch 155 → 265 not taken.
✗ Branch 2536 → 2537 not taken.
✗ Branch 2536 → 2646 not taken.
17105664 if (lowval >= cur_depth) {
751 // There's no planarity handling for this because it's just a Q node. I/O nodes also don't need any tracking.
752
2/4
✓ Branch 53 → 54 taken 5220579 times.
✗ Branch 53 → 71 not taken.
✗ Branch 380 → 381 not taken.
✓ Branch 380 → 398 taken 24 times.
5487723 item_vs[edge_item(e)] = {cur, -1};
753 5354163 tot_blocks++;
754
10/31
None:
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 75 not taken.
✗ Branch 14 → 76 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 708 → 709 not taken.
✓ Branch 708 → 710 taken 16290 times.
✓ Branch 710 → 711 taken 16290 times.
✗ Branch 710 → 979 not taken.
✗ Branch 5516 → 5517 not taken.
✓ Branch 5516 → 5518 taken 50490 times.
✗ Branch 5518 → 5519 not taken.
✓ Branch 5518 → 5787 taken 50490 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 53 → 54 taken 5220579 times.
✗ Branch 53 → 71 not taken.
✗ Branch 156 → 157 not taken.
✗ Branch 156 → 217 not taken.
✗ Branch 380 → 381 not taken.
✓ Branch 380 → 398 taken 24 times.
✗ Branch 1181 → 1182 not taken.
✗ Branch 1181 → 1242 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 714 → 715 not taken.
✓ Branch 714 → 716 taken 16290 times.
✓ Branch 716 → 717 taken 16290 times.
✗ Branch 716 → 990 not taken.
✗ Branch 11702 → 11703 not taken.
✓ Branch 11702 → 11704 taken 50490 times.
✗ Branch 11704 → 11705 not taken.
✓ Branch 11704 → 11978 taken 50490 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 159 → 160 not taken.
✗ Branch 159 → 221 not taken.
✗ Branch 2540 → 2541 not taken.
✗ Branch 2540 → 2602 not taken.
5354163 if (is_tree) {
755 // Bridges and components
756
6/23
None:
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 52 not taken.
✗ Branch 15 → 53 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 711 → 712 taken 6238 times.
✓ Branch 711 → 877 taken 10052 times.
✗ Branch 5519 → 5520 not taken.
✗ Branch 5519 → 5685 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 54 → 55 taken 5139837 times.
✓ Branch 54 → 67 taken 80742 times.
✗ Branch 157 → 158 not taken.
✗ Branch 157 → 194 not taken.
✗ Branch 381 → 382 not taken.
✗ Branch 381 → 394 not taken.
✗ Branch 1182 → 1183 not taken.
✗ Branch 1182 → 1219 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 717 → 718 taken 6238 times.
✓ Branch 717 → 888 taken 10052 times.
✗ Branch 11705 → 11706 not taken.
✗ Branch 11705 → 11876 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 160 → 161 not taken.
✗ Branch 160 → 198 not taken.
✗ Branch 2541 → 2542 not taken.
✗ Branch 2541 → 2579 not taken.
5253159 if (lowval == cur_depth + 1) {
757 // tstack[tstack_size-1] is currently just smuggling out the child vertex, prepend the bridge component
758 // This is just a shortcut for allocating a full I-type tstack
759
1/4
✗ Branch 55 → 56 not taken.
✓ Branch 55 → 57 taken 5139837 times.
✗ Branch 382 → 383 not taken.
✗ Branch 382 → 384 not taken.
5152313 int item = alloc_item(node_type::I);
760
2/8
✓ Branch 61 → 62 taken 5139837 times.
✗ Branch 61 → 63 not taken.
✓ Branch 63 → 64 taken 5139837 times.
✗ Branch 63 → 66 not taken.
✗ Branch 388 → 389 not taken.
✗ Branch 388 → 390 not taken.
✗ Branch 390 → 391 not taken.
✗ Branch 390 → 393 not taken.
10304626 item_vs[item] = make_vs(nxt, cur_depth);
761
1/4
✓ Branch 63 → 64 taken 5139837 times.
✗ Branch 63 → 66 not taken.
✗ Branch 390 → 391 not taken.
✗ Branch 390 → 393 not taken.
10317102 item_ch[edge_item(e)] = concat(unit_list(item), tstack.back().spans[1]); tstack.pop_back();
762 } else {
763 // tstack[tstack_size-2] is the vertex and tstack[tstack_size-1] is the backedge
764
1/4
✓ Branch 67 → 68 taken 80742 times.
✗ Branch 67 → 70 not taken.
✗ Branch 394 → 395 not taken.
✗ Branch 394 → 397 not taken.
100846 auto backedge = tstack.back().spans[0]; tstack.pop_back();
765
1/4
✓ Branch 67 → 68 taken 80742 times.
✗ Branch 67 → 70 not taken.
✗ Branch 394 → 395 not taken.
✗ Branch 394 → 397 not taken.
221796 item_ch[edge_item(e)] = concat(backedge, tstack.back().spans[1]); tstack.pop_back();
766 }
767 } else {
768 // self loops
769 101004 assert(nxt == cur);
770 101004 tot_self_loops++;
771
1/4
✗ Branch 73 → 74 not taken.
✗ Branch 73 → 75 not taken.
✗ Branch 400 → 401 not taken.
✓ Branch 400 → 402 taken 24 times.
101004 int item = alloc_item(node_type::O);
772 // Make sure the nxt is -1 as well
773 101004 item_vs[item] = {cur, -1};
774 201984 item_ch[edge_item(e)] = unit_list(item);
775 }
776
2/4
✓ Branch 80 → 81 taken 5220579 times.
✗ Branch 80 → 83 not taken.
✓ Branch 407 → 408 taken 24 times.
✗ Branch 407 → 410 not taken.
10841886 item_ch[vert_item(cur)] = concat(item_ch[vert_item(cur)], unit_list(edge_item(e)));
777 5354163 return;
778 }
779 ✗ assert(lowval < cur_depth);
780
781
6/8
✓ Branch 84 → 85 taken 2712740 times.
✓ Branch 84 → 86 taken 4667008 times.
✓ Branch 86 → 87 taken 7379748 times.
✗ Branch 86 → 277 not taken.
✓ Branch 411 → 412 taken 2631969 times.
✓ Branch 411 → 413 taken 863344 times.
✗ Branch 413 → 414 not taken.
✓ Branch 413 → 604 taken 3495313 times.
18849090 item_vs[edge_item(e)] = make_vs(nxt, cur_depth);
782
783
10/32
None:
✗ Branch 127 → 128 not taken.
✗ Branch 127 → 737 not taken.
✗ Branch 129 → 130 not taken.
✗ Branch 129 → 1934 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1186 → 1187 not taken.
✓ Branch 1186 → 1188 taken 68342 times.
✓ Branch 1188 → 1189 taken 68342 times.
✗ Branch 1188 → 4057 not taken.
✗ Branch 5995 → 5996 not taken.
✓ Branch 5995 → 5997 taken 369878 times.
✗ Branch 5997 → 5998 not taken.
✓ Branch 5997 → 8866 taken 369878 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 86 → 87 taken 7379748 times.
✗ Branch 86 → 277 not taken.
✗ Branch 269 → 270 not taken.
✗ Branch 269 → 879 not taken.
✗ Branch 413 → 414 not taken.
✓ Branch 413 → 604 taken 3495313 times.
✗ Branch 1294 → 1295 not taken.
✗ Branch 1294 → 1904 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1204 → 1205 not taken.
✓ Branch 1204 → 1206 taken 68342 times.
✓ Branch 1206 → 1207 taken 68342 times.
✗ Branch 1206 → 9601 not taken.
✗ Branch 12192 → 12193 not taken.
✓ Branch 12192 → 12194 taken 369878 times.
✗ Branch 12194 → 12195 not taken.
✓ Branch 12194 → 20589 taken 369878 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 274 → 275 not taken.
✗ Branch 274 → 2079 not taken.
✗ Branch 2655 → 2656 not taken.
✗ Branch 2655 → 4460 not taken.
11751501 if (is_tree) {
784 // The span lives on side edge_dir
785
2/4
✓ Branch 87 → 88 taken 2712740 times.
✓ Branch 87 → 89 taken 4667008 times.
✗ Branch 414 → 415 not taken.
✗ Branch 414 → 416 not taken.
15032864 push_edge_tstack(nxt, cur_depth, e, true);
786
6/24
None:
✗ Branch 369 → 141 not taken.
✗ Branch 369 → 370 not taken.
✗ Branch 610 → 155 not taken.
✗ Branch 610 → 611 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2334 → 1237 taken 44176 times.
✓ Branch 2334 → 2335 taken 64052 times.
✗ Branch 7143 → 6046 not taken.
✗ Branch 7143 → 7144 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 164 → 91 taken 2756678 times.
✓ Branch 164 → 165 taken 6388931 times.
✗ Branch 491 → 418 not taken.
✗ Branch 491 → 492 not taken.
✗ Branch 511 → 283 not taken.
✗ Branch 511 → 512 not taken.
✗ Branch 1536 → 1308 not taken.
✗ Branch 1536 → 1537 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3462 → 1299 taken 44176 times.
✓ Branch 3462 → 3463 taken 64052 times.
✗ Branch 14450 → 12287 not taken.
✗ Branch 14450 → 14451 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 755 → 300 not taken.
✗ Branch 755 → 756 not taken.
✗ Branch 3136 → 2681 not taken.
✗ Branch 3136 → 3137 not taken.
9578521 while (nxt_tstack().top_depth >= cur_depth) {
787 node_type type;
788
6/24
None:
✗ Branch 147 → 148 not taken.
✗ Branch 147 → 216 not taken.
✗ Branch 161 → 162 not taken.
✗ Branch 161 → 275 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1260 → 1261 taken 6100 times.
✓ Branch 1260 → 1566 taken 38076 times.
✗ Branch 6069 → 6070 not taken.
✗ Branch 6069 → 6375 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 91 → 92 taken 2364244 times.
✓ Branch 91 → 103 taken 392434 times.
✗ Branch 289 → 290 not taken.
✗ Branch 289 → 358 not taken.
✗ Branch 418 → 419 not taken.
✗ Branch 418 → 430 not taken.
✗ Branch 1314 → 1315 not taken.
✗ Branch 1314 → 1383 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1322 → 1323 taken 6100 times.
✓ Branch 1322 → 1887 taken 38076 times.
✗ Branch 12310 → 12311 not taken.
✗ Branch 12310 → 12875 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 306 → 307 not taken.
✗ Branch 306 → 420 not taken.
✗ Branch 2687 → 2688 not taken.
✗ Branch 2687 → 2801 not taken.
2933382 if (nxt_tstack().top_depth > cur_depth) {
789 // This is a vertex in the tstack, followed by either an S edge, possibly merged with other things
790
6/24
None:
✗ Branch 151 → 152 not taken.
✗ Branch 151 → 153 not taken.
✗ Branch 165 → 166 not taken.
✗ Branch 165 → 167 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1272 → 1273 taken 1810 times.
✓ Branch 1272 → 2335 taken 4290 times.
✗ Branch 6081 → 6082 not taken.
✗ Branch 6081 → 7144 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 92 → 93 taken 1373427 times.
✓ Branch 92 → 165 taken 990817 times.
✗ Branch 293 → 294 not taken.
✗ Branch 293 → 295 not taken.
✗ Branch 419 → 420 not taken.
✗ Branch 419 → 492 not taken.
✗ Branch 1318 → 1319 not taken.
✗ Branch 1318 → 1320 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1334 → 1335 taken 1810 times.
✓ Branch 1334 → 3463 taken 4290 times.
✗ Branch 12322 → 12323 not taken.
✗ Branch 12322 → 14451 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 310 → 311 not taken.
✗ Branch 310 → 312 not taken.
✗ Branch 2691 → 2692 not taken.
✗ Branch 2691 → 2693 not taken.
2376444 if (tstack.end()[-3].top_depth < cur_depth) {
791 // Not actually a good return, just stop
792 ✗ break;
793 }
794
795 // Just backfill this for maybe_unwrap
796
1/4
✓ Branch 93 → 94 taken 1373427 times.
✗ Branch 93 → 95 not taken.
✗ Branch 420 → 421 not taken.
✗ Branch 420 → 422 not taken.
1380667 stack_dir[nxt_tstack().top_depth] = edge_dir;
797
1/4
✓ Branch 93 → 94 taken 1373427 times.
✗ Branch 93 → 95 not taken.
✗ Branch 420 → 421 not taken.
✗ Branch 420 → 422 not taken.
1377047 merge_tstack_tops();
798
799
6/24
None:
✗ Branch 213 → 214 not taken.
✗ Branch 213 → 215 not taken.
✗ Branch 272 → 273 not taken.
✗ Branch 272 → 274 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1564 → 1565 taken 396 times.
✓ Branch 1564 → 1612 taken 1414 times.
✗ Branch 6373 → 6374 not taken.
✗ Branch 6373 → 6421 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 101 → 102 taken 608 times.
✓ Branch 101 → 105 taken 1372819 times.
✗ Branch 355 → 356 not taken.
✗ Branch 355 → 357 not taken.
✗ Branch 428 → 429 not taken.
✗ Branch 428 → 432 not taken.
✗ Branch 1380 → 1381 not taken.
✗ Branch 1380 → 1382 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1885 → 1886 taken 396 times.
✓ Branch 1885 → 1933 taken 1414 times.
✗ Branch 12873 → 12874 not taken.
✗ Branch 12873 → 12921 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 417 → 418 not taken.
✗ Branch 417 → 419 not taken.
✗ Branch 2798 → 2799 not taken.
✗ Branch 2798 → 2800 not taken.
1380667 type = nxt_tstack().top_depth > cur_depth ? node_type::S : node_type::R;
800
3/24
None:
✗ Branch 228 → 229 not taken.
✗ Branch 228 → 230 not taken.
✗ Branch 287 → 288 not taken.
✗ Branch 287 → 289 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1610 → 1611 not taken.
✓ Branch 1610 → 1612 taken 38076 times.
✗ Branch 6419 → 6420 not taken.
✗ Branch 6419 → 6421 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 103 → 104 not taken.
✓ Branch 103 → 105 taken 392434 times.
✗ Branch 370 → 371 not taken.
✗ Branch 370 → 372 not taken.
✗ Branch 430 → 431 not taken.
✗ Branch 430 → 432 not taken.
✗ Branch 1395 → 1396 not taken.
✗ Branch 1395 → 1397 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1931 → 1932 not taken.
✓ Branch 1931 → 1933 taken 38076 times.
✗ Branch 12919 → 12920 not taken.
✗ Branch 12919 → 12921 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 432 → 433 not taken.
✗ Branch 432 → 434 not taken.
✗ Branch 2813 → 2814 not taken.
✗ Branch 2813 → 2815 not taken.
620890 } else if (nxt_tstack().v_start == cur_tstack().v_start) {
801 // This will be a P node
802 ✗ type = node_type::P;
803 } else {
804 ✗ type = node_type::R;
805 }
806
2/4
✓ Branch 105 → 106 taken 608 times.
✓ Branch 105 → 113 taken 1765253 times.
✗ Branch 432 → 433 not taken.
✗ Branch 432 → 440 not taken.
1845633 int item = maybe_unwrap_nxt(type, type == node_type::S);
807
2/4
✓ Branch 144 → 145 taken 1372819 times.
✓ Branch 144 → 146 taken 393042 times.
✗ Branch 471 → 472 not taken.
✗ Branch 471 → 473 not taken.
1845633 merge_tstack_tops();
808 if constexpr (with_planarity) {
809
2/10
None:
✗ Branch 489 → 490 not taken.
✗ Branch 489 → 523 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2960 → 2961 taken 39740 times.
✓ Branch 2960 → 3085 taken 146 times.
✗ Branch 13948 → 13949 not taken.
✗ Branch 13948 → 14073 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 634 → 635 not taken.
✗ Branch 634 → 668 not taken.
✗ Branch 3015 → 3016 not taken.
✗ Branch 3015 → 3049 not taken.
79772 if (cur_tstack().planarity) {
810 // Merge all backedges into the component
811
2/10
None:
✗ Branch 522 → 498 not taken.
✗ Branch 522 → 523 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3084 → 2990 taken 79480 times.
✓ Branch 3084 → 3085 taken 39740 times.
✗ Branch 14072 → 13978 not taken.
✗ Branch 14072 → 14073 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 667 → 643 not taken.
✗ Branch 667 → 668 not taken.
✗ Branch 3048 → 3024 not taken.
✗ Branch 3048 → 3049 not taken.
158960 for (auto& side : cur_tstack().planarity->sides) {
812 79480 assert(side.bot_ends[1] != -1);
813
2/10
None:
✗ Branch 502 → 503 not taken.
✗ Branch 502 → 504 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3004 → 3005 taken 41134 times.
✓ Branch 3004 → 3006 taken 38346 times.
✗ Branch 13992 → 13993 not taken.
✗ Branch 13992 → 13994 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 647 → 648 not taken.
✗ Branch 647 → 649 not taken.
✗ Branch 3028 → 3029 not taken.
✗ Branch 3028 → 3030 not taken.
79480 if (side.tops[1].end == -1) continue;
814 38346 assert(side.tops[0].depth == cur_depth);
815 38346 assert(side.tops[1].depth == cur_depth);
816 38346 quarter_edge_matches[side.bot_ends[1]] = side.tops[1].end;
817 38346 quarter_edge_matches[side.tops[1].end] = side.bot_ends[1];
818 38346 side.bot_ends[1] = side.tops[0].end;
819
2/10
None:
✗ Branch 519 → 520 not taken.
✗ Branch 519 → 521 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3074 → 3075 taken 38346 times.
✓ Branch 3074 → 3076 taken 38346 times.
✗ Branch 14062 → 14063 not taken.
✗ Branch 14062 → 14064 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 664 → 665 not taken.
✗ Branch 664 → 666 not taken.
✗ Branch 3045 → 3046 not taken.
✗ Branch 3045 → 3047 not taken.
76692 side.tops = {};
820 }
821 }
822 }
823
2/4
✓ Branch 152 → 153 taken 1033999 times.
✓ Branch 152 → 154 taken 731862 times.
✗ Branch 479 → 480 not taken.
✗ Branch 479 → 481 not taken.
3691266 finish_tstack_top(item, true);
824 }
825
826
6/24
None:
✗ Branch 377 → 378 not taken.
✗ Branch 377 → 435 not taken.
✗ Branch 618 → 619 not taken.
✗ Branch 618 → 1202 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2364 → 2605 taken 44922 times.
✓ Branch 2364 → 2635 taken 23420 times.
✗ Branch 7173 → 7414 not taken.
✗ Branch 7173 → 7444 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 165 → 175 taken 1002145 times.
✓ Branch 165 → 176 taken 6377603 times.
✗ Branch 492 → 502 not taken.
✗ Branch 492 → 503 not taken.
✗ Branch 519 → 520 not taken.
✗ Branch 519 → 577 not taken.
✗ Branch 1544 → 1545 not taken.
✗ Branch 1544 → 1602 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3492 → 3493 taken 44922 times.
✓ Branch 3492 → 6218 taken 23420 times.
✗ Branch 14480 → 14481 not taken.
✗ Branch 14480 → 17206 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 763 → 764 not taken.
✗ Branch 763 → 1347 not taken.
✗ Branch 3144 → 3145 not taken.
✗ Branch 3144 → 3728 not taken.
7653116 if (cur_tstack().first_idx > first_occurrence[cur_depth]) {
827 if constexpr (with_planarity) {
828 44922 [&] [[gnu::always_inline]] () -> void {
829 44922 int source = int(tstack.size()) - 1;
830 do {
831 139790 --source;
832
2/12
None:
✗ Branch 6 → 7 not taken.
✗ Branch 6 → 16 not taken.
✗ Branch 623 → 624 not taken.
✗ Branch 623 → 633 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3526 → 3527 taken 36164 times.
✓ Branch 3526 → 3557 taken 103626 times.
✗ Branch 14514 → 14515 not taken.
✗ Branch 14514 → 14545 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 768 → 769 not taken.
✗ Branch 768 → 778 not taken.
✗ Branch 3149 → 3150 not taken.
✗ Branch 3149 → 3159 not taken.
279580 if (!tstack[source].planarity) {
833 // Set it somewhere so it can get copied down
834 72328 cur_tstack().planarity = tstack[source].planarity;
835 38396 return;
836 }
837
2/12
None:
✗ Branch 18 → 4 not taken.
✗ Branch 18 → 19 not taken.
✗ Branch 635 → 621 not taken.
✗ Branch 635 → 636 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3573 → 3517 taken 94868 times.
✓ Branch 3573 → 3574 taken 8758 times.
✗ Branch 14561 → 14505 not taken.
✗ Branch 14561 → 14562 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 780 → 766 not taken.
✗ Branch 780 → 781 not taken.
✗ Branch 3161 → 3147 not taken.
✗ Branch 3161 → 3162 not taken.
103626 } while (tstack[source].first_idx > first_occurrence[cur_depth]);
838
839 // From planarity's perspective, we can view each tstack as one of 2 shapes:
840 // * tstack[i] can be a single "atom" branching off tstack[i].v_start. It can be:
841 // * A single backedge (type 1)
842 // * A subtree (possibly not biconnected) with at least 2 different-depth backedges on its outside (type 2)
843 // * tstack[i] can be a "chunk". Chunks contain:
844 // * A core spanning from tstack[i].v_start (bot[0]) to tstack[i+1].v_start (bot[1]).
845 // * The core is a cyclic outer face: it has 2 *disjoint* paths from bot[0] to bot[1]
846 // * Each path can have backedges from its interior (not bot[0] or bot[1])
847 // * side[0]'s path has a backedge to tstack[i].lowval
848 // * Extra atoms on side 1, anchored at tstack[i].v_start
849 // * these must have lowval > tstack[i].lowval, or can have lowval == tstack[i].lowval and be type 2
850 // * these extra atoms are an entire suffix of v_start's: a chunk will always eat them all
851 // * Most of the time, we can treat the side[1] core and the atoms all as separate backedges from tstack[i].v_start.
852 // * The exception is when side[1].tops[1].depth == lowval: then it's forced to be a type 2 atom or part of the core, which matters.
853 // * TODO: Can we easily distinguish the 2 cases?
854 // * tstack[i] can also be a tree vertex or a tree edge (trivial cases)
855 //
856 // Note that all atoms (including the chunk-extras) at one v_start must be sorted by (lowval, type).
857 // However, a chunk can occur later (closer to the top) than its (lowval, type) sort at its v_start.
858
859 // last_top == cur_tstack().top_depth
860 8758 int last_top = cur_depth;
861
2/12
None:
✗ Branch 258 → 20 not taken.
✗ Branch 258 → 259 not taken.
✗ Branch 875 → 637 not taken.
✗ Branch 875 → 876 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4644 → 3579 taken 29926 times.
✓ Branch 4644 → 4645 taken 7158 times.
✗ Branch 15632 → 14567 not taken.
✗ Branch 15632 → 15633 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1020 → 782 not taken.
✗ Branch 1020 → 1021 not taken.
✗ Branch 3401 → 3163 not taken.
✗ Branch 3401 → 3402 not taken.
37084 while (int(tstack.size()) > source + 2) {
862
2/12
None:
✗ Branch 26 → 27 not taken.
✗ Branch 26 → 164 not taken.
✗ Branch 643 → 644 not taken.
✗ Branch 643 → 781 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3606 → 3607 taken 23934 times.
✓ Branch 3606 → 4140 taken 5992 times.
✗ Branch 14594 → 14595 not taken.
✗ Branch 14594 → 15128 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 788 → 789 not taken.
✗ Branch 788 → 926 not taken.
✗ Branch 3169 → 3170 not taken.
✗ Branch 3169 → 3307 not taken.
59852 if (nxt_tstack().top_depth > cur_depth) {
863 // Vertex or tree edge, no conditions
864
2/12
None:
✗ Branch 33 → 34 not taken.
✗ Branch 33 → 78 not taken.
✗ Branch 650 → 651 not taken.
✗ Branch 650 → 695 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3634 → 3635 taken 436 times.
✓ Branch 3634 → 3829 taken 23498 times.
✗ Branch 14622 → 14623 not taken.
✗ Branch 14622 → 14817 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 795 → 796 not taken.
✗ Branch 795 → 840 not taken.
✗ Branch 3176 → 3177 not taken.
✗ Branch 3176 → 3221 not taken.
47868 } else if (nxt_tstack().top_depth == cur_depth) {
865
1/12
None:
✗ Branch 43 → 44 not taken.
✗ Branch 43 → 55 not taken.
✗ Branch 660 → 661 not taken.
✗ Branch 660 → 672 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 3674 → 3675 not taken.
✓ Branch 3674 → 3713 taken 436 times.
✗ Branch 14662 → 14663 not taken.
✗ Branch 14662 → 14701 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 805 → 806 not taken.
✗ Branch 805 → 817 not taken.
✗ Branch 3186 → 3187 not taken.
✗ Branch 3186 → 3198 not taken.
1744 if (nxt_tstack().planarity->sides[1].tops[0].depth != -1) {
866 // Double-sided to cur_depth, conflicts with cur_tstack()
867 ✗ assert(last_top < cur_depth);
868 // nxt_tstack() is a chunk and both backedges are on the core
869 // K33 is:
870 // * cur_tstack().tops[0]
871 // * nxt_tstack().sides[0].tops[0].base
872 // * nxt_tstack().sides[1].tops[0].base
873 // + cur
874 // + nxt_tstack().v_start
875 // + cur_tstack().v_start
876 //
877 // nxt_tstack().v_start -> cur_tstack().tops[0] is the ear lowval loop
878 // cur_tstack().v_start -> cur_tstack().tops[0] is just along cur
879 // cur -> nxt_tstack().sides[*].tops[0].base is just the backedge
880 // The rest is the outer face of nxt_tstack()
881 ✗ cur_tstack().planarity = std::unexpected(tstack_nonplanarity_t{});
882 ✗ return;
883 }
884 // We will put cur_depth on side 1 until the bottom
885 872 flip_tstack_planarity(nxt_tstack());
886 } else {
887
4/32
None:
✗ Branch 87 → 88 not taken.
✗ Branch 87 → 99 not taken.
✗ Branch 97 → 98 not taken.
✗ Branch 97 → 99 not taken.
✗ Branch 100 → 101 not taken.
✗ Branch 100 → 136 not taken.
✗ Branch 704 → 705 not taken.
✗ Branch 704 → 716 not taken.
✗ Branch 714 → 715 not taken.
✗ Branch 714 → 716 not taken.
✗ Branch 717 → 718 not taken.
✗ Branch 717 → 753 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3868 → 3869 taken 98 times.
✓ Branch 3868 → 3976 taken 23400 times.
✓ Branch 3912 → 3913 taken 76 times.
✓ Branch 3912 → 3976 taken 22 times.
✗ Branch 14856 → 14857 not taken.
✗ Branch 14856 → 14964 not taken.
✗ Branch 14900 → 14901 not taken.
✗ Branch 14900 → 14964 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 849 → 850 not taken.
✗ Branch 849 → 861 not taken.
✗ Branch 859 → 860 not taken.
✗ Branch 859 → 861 not taken.
✗ Branch 862 → 863 not taken.
✗ Branch 862 → 898 not taken.
✗ Branch 3230 → 3231 not taken.
✗ Branch 3230 → 3242 not taken.
✗ Branch 3240 → 3241 not taken.
✗ Branch 3240 → 3242 not taken.
✗ Branch 3243 → 3244 not taken.
✗ Branch 3243 → 3279 not taken.
94286 if (nxt_tstack().planarity->sides[1].tops[0].depth != -1 && nxt_tstack().planarity->sides[1].tops[0].depth != cur_depth) {
888 // Non-empty on both sides, conflicts with source
889 // nxt_stack() is a chunk
890
2/12
None:
✗ Branch 116 → 117 not taken.
✗ Branch 116 → 126 not taken.
✗ Branch 733 → 734 not taken.
✗ Branch 733 → 743 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3975 → 4016 taken 4 times.
✓ Branch 3975 → 4047 taken 72 times.
✗ Branch 14963 → 15004 not taken.
✗ Branch 14963 → 15035 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 878 → 879 not taken.
✗ Branch 878 → 888 not taken.
✗ Branch 3259 → 3260 not taken.
✗ Branch 3259 → 3269 not taken.
380 if (nxt_tstack().planarity->sides[1].tops[0].depth == nxt_tstack().top_depth) {
891 // if it's core + type-2-atom
892 // by the atom ordering, we're guaranteed source->cur isn't from v_start
893 // * nxt_tstack().sides[0].tops[0].base
894 // * nxt_tstack().sides[1].tops[0].base_fork
895 // * source.base
896 // + cur
897 // + nxt_tstack().v_start
898 // + nxt_tstack().top_depth
899 //
900 // cut nxt_tstack().core.side[1]
901 // use nxt_tstack().sides[1].tops[0].prev to get from the fork to above cur down to cur
902 //
903 // otherwise it's double core
904 // * cur
905 // * nxt_tstack().sides[0].tops[0].base
906 // * nxt_tstack().sides[1].tops[0].base
907 // + cur_tstack().v_start
908 // + nxt_tstack().v_start
909 // + nxt_tstack().top_depth
910 // (cut the lowval ear edge)
911 //
912
0/4
None:
✗ Branch 124 → 125 not taken.
✗ Branch 741 → 742 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 886 → 887 not taken.
✗ Branch 3267 → 3268 not taken.
12 cur_tstack().planarity = std::unexpected(tstack_nonplanarity_t{});
913 } else {
914 // If it's an atom
915 // by atom ordering, we're guaranteed source->cur isn't from v_start
916 // * nxt_tstack().sides[0].tops[0].base
917 // * nxt_tstack().sides[1].tops[0].end (go up/down to cur/top_depth)
918 // * source.base
919 // + cur
920 // + nxt_tstack().v_start
921 // + nxt_tstack().top_depth
922 //
923 // otherwise it's double core
924 // * cur
925 // * nxt_tstack().sides[0].tops[0].base
926 // * nxt_tstack().sides[1].tops[0].base
927 // + cur_tstack().v_start
928 // + nxt_tstack().v_start
929 // + nxt_tstack().sides[1].tops[0].end (side 0 gets there from above)
930 // (cut the lowval ear edge)
931
0/4
None:
✗ Branch 133 → 134 not taken.
✗ Branch 750 → 751 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 895 → 896 not taken.
✗ Branch 3276 → 3277 not taken.
216 cur_tstack().planarity = std::unexpected(tstack_nonplanarity_t{});
932 }
933 ✗ return;
934 }
935 // Implicitly excludes -1
936
2/12
None:
✗ Branch 145 → 146 not taken.
✗ Branch 145 → 157 not taken.
✗ Branch 762 → 763 not taken.
✗ Branch 762 → 774 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4015 → 4078 taken 1524 times.
✓ Branch 4015 → 4116 taken 21898 times.
✗ Branch 15003 → 15066 not taken.
✗ Branch 15003 → 15104 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 907 → 908 not taken.
✗ Branch 907 → 919 not taken.
✗ Branch 3288 → 3289 not taken.
✗ Branch 3288 → 3300 not taken.
93688 if (nxt_tstack().planarity->sides[0].tops[1].depth > last_top) {
937 1524 assert(last_top < cur_depth);
938 // 3 conflicting edges with nxt_tstack(), cur_tstack(), and source
939
0/4
None:
✗ Branch 155 → 156 not taken.
✗ Branch 772 → 773 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 917 → 918 not taken.
✗ Branch 3298 → 3299 not taken.
4572 cur_tstack().planarity = std::unexpected(tstack_nonplanarity_t{});
940 1524 return;
941 }
942 43796 last_top = nxt_tstack().top_depth;
943 }
944 56652 merge_tstack_tops();
945 }
946
947 28632 int t0 = nxt_tstack().planarity->sides[0].tops[1].depth;
948 28632 int t1 = nxt_tstack().planarity->sides[1].tops[1].depth;
949 7158 assert(t0 == cur_depth || t1 == cur_depth);
950
2/12
None:
✗ Branch 281 → 282 not taken.
✗ Branch 281 → 293 not taken.
✗ Branch 898 → 899 not taken.
✗ Branch 898 → 910 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4740 → 4741 taken 632 times.
✓ Branch 4740 → 4779 taken 6526 times.
✗ Branch 15728 → 15729 not taken.
✗ Branch 15728 → 15767 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1043 → 1044 not taken.
✗ Branch 1043 → 1055 not taken.
✗ Branch 3424 → 3425 not taken.
✗ Branch 3424 → 3436 not taken.
7158 if (std::min(t0, t1) > last_top) {
951 632 assert(last_top < cur_depth);
952
0/4
None:
✗ Branch 291 → 292 not taken.
✗ Branch 908 → 909 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1053 → 1054 not taken.
✗ Branch 3434 → 3435 not taken.
1896 cur_tstack().planarity = std::unexpected(tstack_nonplanarity_t{});
953 632 return;
954 }
955
2/12
None:
✗ Branch 293 → 294 not taken.
✗ Branch 293 → 338 not taken.
✗ Branch 910 → 911 not taken.
✗ Branch 910 → 955 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4783 → 4784 taken 6380 times.
✓ Branch 4783 → 4967 taken 146 times.
✗ Branch 15771 → 15772 not taken.
✗ Branch 15771 → 15955 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1055 → 1056 not taken.
✗ Branch 1055 → 1100 not taken.
✗ Branch 3436 → 3437 not taken.
✗ Branch 3436 → 3481 not taken.
6526 if (t0 == cur_depth) {
956 // We need to flip cur_tstack and nxt_tstack relative to each other.
957 // Flip the one with worse top_depth.
958
2/12
None:
✗ Branch 306 → 307 not taken.
✗ Branch 306 → 314 not taken.
✗ Branch 923 → 924 not taken.
✗ Branch 923 → 931 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4833 → 4834 taken 1602 times.
✓ Branch 4833 → 4854 taken 4778 times.
✗ Branch 15821 → 15822 not taken.
✗ Branch 15821 → 15842 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1068 → 1069 not taken.
✗ Branch 1068 → 1076 not taken.
✗ Branch 3449 → 3450 not taken.
✗ Branch 3449 → 3457 not taken.
25520 flip_tstack_planarity(cur_tstack().top_depth < nxt_tstack().top_depth ? nxt_tstack() : cur_tstack());
959 }
960 6526 merge_tstack_tops();
961
962 // Prune off finished cur-side things
963
2/12
None:
✗ Branch 469 → 438 not taken.
✗ Branch 469 → 470 not taken.
✗ Branch 1086 → 1055 not taken.
✗ Branch 1086 → 1087 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 5681 → 5499 taken 13052 times.
✓ Branch 5681 → 5682 taken 6526 times.
✗ Branch 16669 → 16487 not taken.
✗ Branch 16669 → 16670 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1231 → 1200 not taken.
✗ Branch 1231 → 1232 not taken.
✗ Branch 3612 → 3581 not taken.
✗ Branch 3612 → 3613 not taken.
39156 for (auto& side : cur_tstack().planarity->sides) {
964 26104 assert(side.bot_ends[1] != -1);
965
2/12
None:
✗ Branch 467 → 442 not taken.
✗ Branch 467 → 468 not taken.
✗ Branch 1084 → 1059 not taken.
✗ Branch 1084 → 1085 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 5678 → 5510 taken 7282 times.
✓ Branch 5678 → 5679 taken 13052 times.
✗ Branch 16666 → 16498 not taken.
✗ Branch 16666 → 16667 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1229 → 1204 not taken.
✗ Branch 1229 → 1230 not taken.
✗ Branch 3610 → 3585 not taken.
✗ Branch 3610 → 3611 not taken.
40668 while (side.tops[1].depth == cur_depth) {
966 {
967 // Link these to bot_ends[1]
968 21846 quarter_edge_matches[side.bot_ends[1]] = side.tops[1].end;
969 21846 quarter_edge_matches[side.tops[1].end] = side.bot_ends[1];
970 21846 side.bot_ends[1] = side.tops[1].end ^ 1;
971 }
972 21846 side.tops[1].end = std::exchange(quarter_edge_matches[side.bot_ends[1]], -1);
973
2/12
None:
✗ Branch 455 → 456 not taken.
✗ Branch 455 → 462 not taken.
✗ Branch 1072 → 1073 not taken.
✗ Branch 1072 → 1079 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 5608 → 5609 taken 5602 times.
✓ Branch 5608 → 5650 taken 1680 times.
✗ Branch 16596 → 16597 not taken.
✗ Branch 16596 → 16638 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1217 → 1218 not taken.
✗ Branch 1217 → 1224 not taken.
✗ Branch 3598 → 3599 not taken.
✗ Branch 3598 → 3605 not taken.
14564 if (side.tops[1].end != -1) {
974 11204 quarter_edge_matches[side.tops[1].end] = -1;
975 16806 side.tops[1].depth = edge_top_depths[side.tops[1].end >> 2];
976 } else {
977
2/12
None:
✗ Branch 463 → 464 not taken.
✗ Branch 463 → 465 not taken.
✗ Branch 1080 → 1081 not taken.
✗ Branch 1080 → 1082 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 5655 → 5656 taken 1680 times.
✓ Branch 5655 → 5657 taken 1680 times.
✗ Branch 16643 → 16644 not taken.
✗ Branch 16643 → 16645 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1225 → 1226 not taken.
✗ Branch 1225 → 1227 not taken.
✗ Branch 3606 → 3607 not taken.
✗ Branch 3606 → 3608 not taken.
3360 side.tops = {};
978 }
979 }
980 }
981 134766 }();
982 }
983
6/24
None:
✗ Branch 434 → 379 not taken.
✗ Branch 434 → 435 not taken.
✗ Branch 1201 → 1101 not taken.
✗ Branch 1201 → 1202 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2634 → 2365 taken 140856 times.
✓ Branch 2634 → 2635 taken 44922 times.
✗ Branch 7443 → 7174 not taken.
✗ Branch 7443 → 7444 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 175 → 166 taken 4301936 times.
✓ Branch 175 → 176 taken 1002145 times.
✗ Branch 502 → 493 not taken.
✗ Branch 502 → 503 not taken.
✗ Branch 576 → 521 not taken.
✗ Branch 576 → 577 not taken.
✗ Branch 1601 → 1546 not taken.
✗ Branch 1601 → 1602 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 6217 → 5689 taken 106004 times.
✓ Branch 6217 → 6218 taken 44922 times.
✗ Branch 17205 → 16677 not taken.
✗ Branch 17205 → 17206 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1346 → 1246 not taken.
✗ Branch 1346 → 1347 not taken.
✗ Branch 3727 → 3627 not taken.
✗ Branch 3727 → 3728 not taken.
5977489 while (cur_tstack().first_idx > first_occurrence[cur_depth]) {
984
2/4
✓ Branch 166 → 167 taken 1987837 times.
✓ Branch 166 → 168 taken 2314099 times.
✗ Branch 493 → 494 not taken.
✗ Branch 493 → 495 not taken.
9097592 merge_tstack_tops();
985 }
986 }
987
988 7516432 if (is_type_1) assert(s.has_vert_tstack);
989
8/32
None:
✗ Branch 438 → 439 not taken.
✗ Branch 438 → 753 not taken.
✗ Branch 1205 → 1206 not taken.
✗ Branch 1205 → 1962 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2644 → 2645 not taken.
✓ Branch 2644 → 2646 taken 68342 times.
✓ Branch 2646 → 2647 taken 50348 times.
✓ Branch 2646 → 4124 taken 17994 times.
✗ Branch 7453 → 7454 not taken.
✗ Branch 7453 → 7455 not taken.
✗ Branch 7455 → 7456 not taken.
✗ Branch 7455 → 8933 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 179 → 180 taken 4471866 times.
✓ Branch 179 → 284 taken 2907882 times.
✗ Branch 506 → 507 not taken.
✗ Branch 506 → 611 not taken.
✗ Branch 580 → 581 not taken.
✗ Branch 580 → 895 not taken.
✗ Branch 1605 → 1606 not taken.
✗ Branch 1605 → 1920 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 6227 → 6228 not taken.
✓ Branch 6227 → 6229 taken 68342 times.
✓ Branch 6229 → 6230 taken 50348 times.
✓ Branch 6229 → 9712 taken 17994 times.
✗ Branch 17215 → 17216 not taken.
✗ Branch 17215 → 17217 not taken.
✗ Branch 17217 → 17218 not taken.
✗ Branch 17217 → 20700 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1350 → 1351 not taken.
✗ Branch 1350 → 2107 not taken.
✗ Branch 3731 → 3732 not taken.
✗ Branch 3731 → 4488 not taken.
7516432 if (s.has_vert_tstack) {
990 // NB: tstack[orig_size] is the vertex and tstack[orig_size+1] is the backedge; maybe we should reverse them?
991 4572562 assert(int(tstack.size()) >= orig_tstack + 3);
992
993
7/28
None:
✗ Branch 442 → 443 not taken.
✗ Branch 442 → 494 not taken.
✗ Branch 1209 → 1210 not taken.
✗ Branch 1209 → 1460 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2655 → 2896 taken 37384 times.
✓ Branch 2655 → 2903 taken 12964 times.
✗ Branch 7464 → 7705 not taken.
✗ Branch 7464 → 7712 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 184 → 194 taken 284982 times.
✓ Branch 184 → 197 taken 4186884 times.
✗ Branch 511 → 521 not taken.
✗ Branch 511 → 524 not taken.
✗ Branch 584 → 585 not taken.
✗ Branch 584 → 636 not taken.
✗ Branch 1609 → 1610 not taken.
✗ Branch 1609 → 1661 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 6238 → 6239 not taken.
✓ Branch 6238 → 6240 taken 50348 times.
✓ Branch 6240 → 6241 taken 37384 times.
✓ Branch 6240 → 7411 taken 12964 times.
✗ Branch 17226 → 17227 not taken.
✗ Branch 17226 → 17228 not taken.
✗ Branch 17228 → 17229 not taken.
✗ Branch 17228 → 18399 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1354 → 1355 not taken.
✗ Branch 1354 → 1605 not taken.
✗ Branch 3735 → 3736 not taken.
✗ Branch 3735 → 3986 not taken.
4572562 if (!is_type_1) {
994 if constexpr (with_planarity) {
995 37384 [&] [[gnu::always_inline]] () -> void {
996 // The lowval side should be side 1, everything else goes on side 0.
997 // The exception is tstack[orig_tstack + 2], which could be == lowval on one/both sides,
998 // but is guaranteed to have *something* > lowval by non-type-1-ness
999 37384 auto& t = tstack[orig_tstack + 2];
1000
2/12
None:
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 13 not taken.
✗ Branch 1212 → 1213 not taken.
✗ Branch 1212 → 1221 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 6262 → 6263 taken 20660 times.
✓ Branch 6262 → 6291 taken 16724 times.
✗ Branch 17250 → 17251 not taken.
✗ Branch 17250 → 17279 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1357 → 1358 not taken.
✗ Branch 1357 → 1366 not taken.
✗ Branch 3738 → 3739 not taken.
✗ Branch 3738 → 3747 not taken.
74768 if (!t.planarity) {
1001 41320 cur_tstack().planarity = t.planarity;
1002 20660 return;
1003 }
1004 50172 assert(t.planarity->sides[0].tops[0].depth == t.top_depth);
1005 50172 assert(t.planarity->sides[0].tops[1].depth != -1);
1006
2/12
None:
✗ Branch 26 → 27 not taken.
✗ Branch 26 → 44 not taken.
✗ Branch 1234 → 1235 not taken.
✗ Branch 1234 → 1252 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 6358 → 6359 taken 86 times.
✓ Branch 6358 → 6455 taken 16638 times.
✗ Branch 17346 → 17347 not taken.
✗ Branch 17346 → 17443 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1379 → 1380 not taken.
✗ Branch 1379 → 1397 not taken.
✗ Branch 3760 → 3761 not taken.
✗ Branch 3760 → 3778 not taken.
50172 if (t.planarity->sides[0].tops[1].depth == lowval) {
1007 86 flip_tstack_planarity(t);
1008
4/32
None:
✗ Branch 47 → 48 not taken.
✗ Branch 47 → 53 not taken.
✗ Branch 51 → 52 not taken.
✗ Branch 51 → 53 not taken.
✗ Branch 54 → 55 not taken.
✗ Branch 54 → 64 not taken.
✗ Branch 1255 → 1256 not taken.
✗ Branch 1255 → 1261 not taken.
✗ Branch 1259 → 1260 not taken.
✗ Branch 1259 → 1261 not taken.
✗ Branch 1262 → 1263 not taken.
✗ Branch 1262 → 1272 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 6475 → 6476 taken 1882 times.
✓ Branch 6475 → 6533 taken 14756 times.
✓ Branch 6500 → 6501 taken 1878 times.
✓ Branch 6500 → 6533 taken 4 times.
✗ Branch 17463 → 17464 not taken.
✗ Branch 17463 → 17521 not taken.
✗ Branch 17488 → 17489 not taken.
✗ Branch 17488 → 17521 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1400 → 1401 not taken.
✗ Branch 1400 → 1406 not taken.
✗ Branch 1404 → 1405 not taken.
✗ Branch 1404 → 1406 not taken.
✗ Branch 1407 → 1408 not taken.
✗ Branch 1407 → 1417 not taken.
✗ Branch 3781 → 3782 not taken.
✗ Branch 3781 → 3787 not taken.
✗ Branch 3785 → 3786 not taken.
✗ Branch 3785 → 3787 not taken.
✗ Branch 3788 → 3789 not taken.
✗ Branch 3788 → 3798 not taken.
53678 } else if (t.planarity->sides[1].tops[1].depth != -1 && t.planarity->sides[1].tops[1].depth != lowval) {
1009
0/4
None:
✗ Branch 62 → 63 not taken.
✗ Branch 1270 → 1271 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1415 → 1416 not taken.
✗ Branch 3796 → 3797 not taken.
5634 cur_tstack().planarity = std::unexpected(tstack_nonplanarity_t{});
1010 1878 return;
1011 }
1012 44538 assert(t.planarity->sides[0].tops[1].depth > lowval);
1013 44538 int last_top = t.planarity->sides[0].tops[1].depth;
1014
2/12
None:
✗ Branch 149 → 73 not taken.
✗ Branch 149 → 150 not taken.
✗ Branch 1357 → 1281 not taken.
✗ Branch 1357 → 1358 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 6902 → 6582 taken 42110 times.
✓ Branch 6902 → 6903 taken 10026 times.
✗ Branch 17890 → 17570 not taken.
✗ Branch 17890 → 17891 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1502 → 1426 not taken.
✗ Branch 1502 → 1503 not taken.
✗ Branch 3883 → 3807 not taken.
✗ Branch 3883 → 3884 not taken.
52136 for (int i = orig_tstack + 3; i < int(tstack.size()); i++) {
1015
2/12
None:
✗ Branch 75 → 76 not taken.
✗ Branch 75 → 85 not taken.
✗ Branch 1283 → 1284 not taken.
✗ Branch 1283 → 1293 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 6591 → 6592 taken 1192 times.
✓ Branch 6591 → 6623 taken 40918 times.
✗ Branch 17579 → 17580 not taken.
✗ Branch 17579 → 17611 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1428 → 1429 not taken.
✗ Branch 1428 → 1438 not taken.
✗ Branch 3809 → 3810 not taken.
✗ Branch 3809 → 3819 not taken.
84220 if (!tstack[i].planarity) {
1016 2384 cur_tstack().planarity = tstack[i].planarity;
1017 1192 return;
1018 }
1019
2/12
None:
✗ Branch 86 → 87 not taken.
✗ Branch 86 → 105 not taken.
✗ Branch 1294 → 1295 not taken.
✗ Branch 1294 → 1313 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 6633 → 6634 taken 184 times.
✓ Branch 6633 → 6734 taken 40734 times.
✗ Branch 17621 → 17622 not taken.
✗ Branch 17621 → 17722 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1439 → 1440 not taken.
✗ Branch 1439 → 1458 not taken.
✗ Branch 3820 → 3821 not taken.
✗ Branch 3820 → 3839 not taken.
40918 if (tstack[i].top_depth == lowval) {
1020 184 flip_tstack_planarity(tstack[i]);
1021 }
1022
4/32
None:
✗ Branch 109 → 110 not taken.
✗ Branch 109 → 116 not taken.
✗ Branch 114 → 115 not taken.
✗ Branch 114 → 116 not taken.
✗ Branch 117 → 118 not taken.
✗ Branch 117 → 127 not taken.
✗ Branch 1317 → 1318 not taken.
✗ Branch 1317 → 1324 not taken.
✗ Branch 1322 → 1323 not taken.
✗ Branch 1322 → 1324 not taken.
✗ Branch 1325 → 1326 not taken.
✗ Branch 1325 → 1335 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 6757 → 6758 taken 662 times.
✓ Branch 6757 → 6786 taken 40256 times.
✓ Branch 6785 → 6786 taken 14 times.
✓ Branch 6785 → 6808 taken 648 times.
✗ Branch 17745 → 17746 not taken.
✗ Branch 17745 → 17774 not taken.
✗ Branch 17773 → 17774 not taken.
✗ Branch 17773 → 17796 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1462 → 1463 not taken.
✗ Branch 1462 → 1469 not taken.
✗ Branch 1467 → 1468 not taken.
✗ Branch 1467 → 1469 not taken.
✗ Branch 1470 → 1471 not taken.
✗ Branch 1470 → 1480 not taken.
✗ Branch 3843 → 3844 not taken.
✗ Branch 3843 → 3850 not taken.
✗ Branch 3848 → 3849 not taken.
✗ Branch 3848 → 3850 not taken.
✗ Branch 3851 → 3852 not taken.
✗ Branch 3851 → 3861 not taken.
124078 if (tstack[i].planarity->sides[1].tops[1].depth != -1 && tstack[i].planarity->sides[1].tops[1].depth != lowval) {
1023
0/4
None:
✗ Branch 125 → 126 not taken.
✗ Branch 1333 → 1334 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1478 → 1479 not taken.
✗ Branch 3859 → 3860 not taken.
1944 cur_tstack().planarity = std::unexpected(tstack_nonplanarity_t{});
1024 648 return;
1025 }
1026 120810 int next_top = tstack[i].planarity->sides[0].tops[0].depth;
1027
2/12
None:
✗ Branch 131 → 132 not taken.
✗ Branch 131 → 147 not taken.
✗ Branch 1339 → 1340 not taken.
✗ Branch 1339 → 1355 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 6807 → 6840 taken 28476 times.
✓ Branch 6807 → 6896 taken 11794 times.
✗ Branch 17795 → 17828 not taken.
✗ Branch 17795 → 17884 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1484 → 1485 not taken.
✗ Branch 1484 → 1500 not taken.
✗ Branch 3865 → 3866 not taken.
✗ Branch 3865 → 3881 not taken.
40270 if (next_top != -1) {
1028
2/12
None:
✗ Branch 132 → 133 not taken.
✗ Branch 132 → 142 not taken.
✗ Branch 1340 → 1341 not taken.
✗ Branch 1340 → 1350 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 6840 → 6841 taken 2980 times.
✓ Branch 6840 → 6873 taken 25496 times.
✗ Branch 17828 → 17829 not taken.
✗ Branch 17828 → 17861 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1485 → 1486 not taken.
✗ Branch 1485 → 1495 not taken.
✗ Branch 3866 → 3867 not taken.
✗ Branch 3866 → 3876 not taken.
28476 if (last_top > next_top) {
1029
0/4
None:
✗ Branch 140 → 141 not taken.
✗ Branch 1348 → 1349 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1493 → 1494 not taken.
✗ Branch 3874 → 3875 not taken.
8940 cur_tstack().planarity = std::unexpected(tstack_nonplanarity_t{});
1030 2980 return;
1031 }
1032 76488 last_top = tstack[i].planarity->sides[0].tops[1].depth;
1033 }
1034 }
1035 112152 }();
1036 }
1037
7/28
None:
✗ Branch 493 → 444 not taken.
✗ Branch 493 → 494 not taken.
✗ Branch 1459 → 1365 not taken.
✗ Branch 1459 → 1460 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2902 → 2656 taken 53976 times.
✓ Branch 2902 → 2903 taken 37384 times.
✗ Branch 7711 → 7465 not taken.
✗ Branch 7711 → 7712 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 194 → 195 not taken.
✓ Branch 194 → 196 taken 1500779 times.
✓ Branch 196 → 185 taken 1215797 times.
✓ Branch 196 → 197 taken 284982 times.
✗ Branch 521 → 522 not taken.
✗ Branch 521 → 523 not taken.
✗ Branch 523 → 512 not taken.
✗ Branch 523 → 524 not taken.
✗ Branch 635 → 586 not taken.
✗ Branch 635 → 636 not taken.
✗ Branch 1660 → 1611 not taken.
✗ Branch 1660 → 1661 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 7410 → 6905 taken 53976 times.
✓ Branch 7410 → 7411 taken 37384 times.
✗ Branch 18398 → 17893 not taken.
✗ Branch 18398 → 18399 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1604 → 1510 not taken.
✗ Branch 1604 → 1605 not taken.
✗ Branch 3985 → 3891 not taken.
✗ Branch 3985 → 3986 not taken.
1683499 while (int(tstack.size()) > orig_tstack + 3) {
1038
2/4
✓ Branch 185 → 186 taken 644559 times.
✓ Branch 185 → 187 taken 571238 times.
✗ Branch 512 → 513 not taken.
✗ Branch 512 → 514 not taken.
2647498 merge_tstack_tops();
1039 }
1040 }
1041
1042 4572562 assert(int(tstack.size()) == orig_tstack + 3);
1043 int item;
1044
7/28
None:
✗ Branch 497 → 498 not taken.
✗ Branch 497 → 568 not taken.
✗ Branch 1463 → 1464 not taken.
✗ Branch 1463 → 1574 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2911 → 2912 taken 12964 times.
✓ Branch 2911 → 3236 taken 37384 times.
✗ Branch 7720 → 7721 not taken.
✗ Branch 7720 → 8045 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 201 → 202 taken 4186884 times.
✓ Branch 201 → 241 taken 284982 times.
✗ Branch 528 → 529 not taken.
✗ Branch 528 → 568 not taken.
✗ Branch 639 → 640 not taken.
✗ Branch 639 → 710 not taken.
✗ Branch 1664 → 1665 not taken.
✗ Branch 1664 → 1735 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 7419 → 7420 not taken.
✓ Branch 7419 → 7421 taken 50348 times.
✓ Branch 7421 → 7422 taken 12964 times.
✓ Branch 7421 → 7880 taken 37384 times.
✗ Branch 18407 → 18408 not taken.
✗ Branch 18407 → 18409 not taken.
✗ Branch 18409 → 18410 not taken.
✗ Branch 18409 → 18868 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1608 → 1609 not taken.
✗ Branch 1608 → 1719 not taken.
✗ Branch 3989 → 3990 not taken.
✗ Branch 3989 → 4100 not taken.
4572562 if (is_type_1) {
1045
6/24
None:
✗ Branch 504 → 505 not taken.
✗ Branch 504 → 506 not taken.
✗ Branch 1470 → 1471 not taken.
✗ Branch 1470 → 1472 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2938 → 2939 taken 8130 times.
✓ Branch 2938 → 2940 taken 4834 times.
✗ Branch 7747 → 7748 not taken.
✗ Branch 7747 → 7749 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 202 → 203 taken 332 times.
✓ Branch 202 → 204 taken 4186552 times.
✗ Branch 529 → 530 not taken.
✗ Branch 529 → 531 not taken.
✗ Branch 646 → 647 not taken.
✗ Branch 646 → 648 not taken.
✗ Branch 1671 → 1672 not taken.
✗ Branch 1671 → 1673 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 7448 → 7449 taken 8130 times.
✓ Branch 7448 → 7450 taken 4834 times.
✗ Branch 18436 → 18437 not taken.
✗ Branch 18436 → 18438 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1615 → 1616 not taken.
✗ Branch 1615 → 1617 not taken.
✗ Branch 3996 → 3997 not taken.
✗ Branch 3996 → 3998 not taken.
4238740 item = maybe_unwrap_nxt(cur_tstack().top_depth == cur_depth ? node_type::S : node_type::R, false);
1046 } else {
1047 // Just for the type checker
1048 ✗ item = -1;
1049 }
1050 // Merge with the backedge
1051
1/4
✗ Branch 241 → 242 not taken.
✓ Branch 241 → 243 taken 4471866 times.
✗ Branch 568 → 569 not taken.
✗ Branch 568 → 570 not taken.
4572562 merge_tstack_tops();
1052 // Merge with the vertex
1053
1/4
✓ Branch 249 → 250 taken 4471866 times.
✗ Branch 249 → 251 not taken.
✗ Branch 576 → 577 not taken.
✗ Branch 576 → 578 not taken.
4572562 merge_tstack_tops();
1054
1055
1/4
✗ Branch 257 → 258 not taken.
✓ Branch 257 → 259 taken 4471866 times.
✗ Branch 584 → 585 not taken.
✗ Branch 584 → 586 not taken.
4673258 cur_tstack().v_start = cur;
1056 4673258 assert(cur_tstack().top_depth == lowval);
1057
1058 // Fold everything to the correct side now that we're leaving the child.
1059 // The entire subtree should go to the !edge_dir side.
1060
5/12
✓ Branch 259 → 260 taken 4471866 times.
✗ Branch 259 → 262 not taken.
✓ Branch 262 → 263 taken 2851393 times.
✓ Branch 262 → 264 taken 1620473 times.
✓ Branch 264 → 265 taken 4186884 times.
✓ Branch 264 → 284 taken 284982 times.
✗ Branch 586 → 587 not taken.
✗ Branch 586 → 589 not taken.
✗ Branch 589 → 590 not taken.
✗ Branch 589 → 591 not taken.
✗ Branch 591 → 592 not taken.
✗ Branch 591 → 611 not taken.
12298605 cur_tstack().spans = set_sides(!edge_dir, concat(cur_tstack().spans[0], cur_tstack().spans[1]), {});
1061
1062 if constexpr (with_planarity) {
1063
2/10
None:
✗ Branch 1814 → 1815 not taken.
✗ Branch 1814 → 1852 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9084 → 9085 taken 15484 times.
✓ Branch 9084 → 9247 taken 34864 times.
✗ Branch 20072 → 20073 not taken.
✗ Branch 20072 → 20235 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1959 → 1960 not taken.
✗ Branch 1959 → 1997 not taken.
✗ Branch 4340 → 4341 not taken.
✗ Branch 4340 → 4378 not taken.
100696 if (cur_tstack().planarity) {
1064 // precondition: side 1 should be the lowval only side
1065 30968 auto& sides = cur_tstack().planarity->sides;
1066 15484 auto& s0 = sides[0];
1067 15484 auto& s1 = sides[1];
1068 15484 quarter_edge_matches[s0.bot_ends[0]] = s1.bot_ends[0];
1069 15484 quarter_edge_matches[s1.bot_ends[0]] = s0.bot_ends[0];
1070 15484 s0.bot_ends[0] = s1.bot_ends[1];
1071
2/10
None:
✗ Branch 1833 → 1834 not taken.
✗ Branch 1833 → 1851 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9165 → 9166 taken 126 times.
✓ Branch 9165 → 9241 taken 15358 times.
✗ Branch 20153 → 20154 not taken.
✗ Branch 20153 → 20229 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1978 → 1979 not taken.
✗ Branch 1978 → 1996 not taken.
✗ Branch 4359 → 4360 not taken.
✗ Branch 4359 → 4377 not taken.
15484 if (s1.tops[0].end != -1) {
1072 // Caller must have checked that we're planar
1073 126 assert(s1.tops[1].depth == lowval);
1074
1075 // This is always true
1076 126 assert(s1.tops[0].depth == lowval);
1077 126 quarter_edge_matches[s0.tops[0].end] = s1.tops[0].end;
1078 126 quarter_edge_matches[s1.tops[0].end] = s0.tops[0].end;
1079 126 s0.tops[0].end = s1.tops[1].end;
1080 // Already true since the backedge was on side 0
1081 126 assert(s0.tops[0].depth == lowval);
1082 }
1083 15484 s1 = tstack_planarity_side_t{};
1084 }
1085 }
1086
1087
7/28
None:
✗ Branch 711 → 712 not taken.
✗ Branch 711 → 753 not taken.
✗ Branch 1852 → 1853 not taken.
✗ Branch 1852 → 1962 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3898 → 3899 taken 12964 times.
✓ Branch 3898 → 4124 taken 37384 times.
✗ Branch 8707 → 8708 not taken.
✗ Branch 8707 → 8933 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 264 → 265 taken 4186884 times.
✓ Branch 264 → 284 taken 284982 times.
✗ Branch 591 → 592 not taken.
✗ Branch 591 → 611 not taken.
✗ Branch 853 → 854 not taken.
✗ Branch 853 → 895 not taken.
✗ Branch 1878 → 1879 not taken.
✗ Branch 1878 → 1920 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 9247 → 9248 not taken.
✓ Branch 9247 → 9249 taken 50348 times.
✓ Branch 9249 → 9250 taken 12964 times.
✓ Branch 9249 → 9712 taken 37384 times.
✗ Branch 20235 → 20236 not taken.
✗ Branch 20235 → 20237 not taken.
✗ Branch 20237 → 20238 not taken.
✗ Branch 20237 → 20700 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1997 → 1998 not taken.
✗ Branch 1997 → 2107 not taken.
✗ Branch 4378 → 4379 not taken.
✗ Branch 4378 → 4488 not taken.
4572562 if (is_type_1) {
1088
2/4
✓ Branch 265 → 266 taken 1373791 times.
✓ Branch 265 → 267 taken 2813093 times.
✗ Branch 592 → 593 not taken.
✗ Branch 592 → 594 not taken.
8425624 finish_tstack_top(item, false);
1089 }
1090 }
1091 } else {
1092 4235069 assert(is_type_1);
1093 // The span lives on side !edge_dir
1094
2/4
✗ Branch 279 → 280 not taken.
✗ Branch 279 → 281 not taken.
✓ Branch 606 → 607 taken 863344 times.
✓ Branch 606 → 608 taken 2631969 times.
4235069 push_edge_tstack(cur, lowval, e, false);
1095
2/4
✗ Branch 282 → 283 not taken.
✗ Branch 282 → 284 not taken.
✓ Branch 609 → 610 taken 1419004 times.
✓ Branch 609 → 611 taken 2076309 times.
4235069 setmin(first_occurrence[lowval], nxt_edge_idx++);
1096 }
1097
1098 11751501 assert(int(tstack.size()) >= orig_tstack + 1);
1099
1100 // If is_type_1, the last entry on the tstack is either the vert_tstack, or the previous child as a unit
1101
25/68
None:
✗ Branch 756 → 757 not taken.
✗ Branch 756 → 765 not taken.
✗ Branch 763 → 764 not taken.
✗ Branch 763 → 765 not taken.
✗ Branch 766 → 767 not taken.
✗ Branch 766 → 899 not taken.
✗ Branch 1965 → 1966 not taken.
✗ Branch 1965 → 1974 not taken.
✗ Branch 1972 → 1973 not taken.
✗ Branch 1972 → 1974 not taken.
✗ Branch 1975 → 1976 not taken.
✗ Branch 1975 → 2249 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4132 → 4133 not taken.
✓ Branch 4132 → 4134 taken 68342 times.
✓ Branch 4134 → 4135 taken 12964 times.
✓ Branch 4134 → 4807 taken 55378 times.
✓ Branch 4158 → 4159 taken 278 times.
✓ Branch 4158 → 4807 taken 12686 times.
✗ Branch 8941 → 8942 not taken.
✓ Branch 8941 → 8943 taken 369878 times.
✓ Branch 8943 → 8944 taken 369878 times.
✗ Branch 8943 → 9616 not taken.
✓ Branch 8967 → 8968 taken 159008 times.
✓ Branch 8967 → 9616 taken 210870 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 288 → 289 taken 4186884 times.
✓ Branch 288 → 339 taken 3192864 times.
✓ Branch 289 → 290 taken 438447 times.
✓ Branch 289 → 339 taken 3748437 times.
✓ Branch 615 → 616 taken 3495313 times.
✗ Branch 615 → 666 not taken.
✓ Branch 616 → 617 taken 134867 times.
✓ Branch 616 → 666 taken 3360446 times.
✗ Branch 898 → 899 not taken.
✗ Branch 898 → 907 not taken.
✗ Branch 905 → 906 not taken.
✗ Branch 905 → 907 not taken.
✗ Branch 908 → 909 not taken.
✗ Branch 908 → 1041 not taken.
✗ Branch 1923 → 1924 not taken.
✗ Branch 1923 → 1932 not taken.
✗ Branch 1930 → 1931 not taken.
✗ Branch 1930 → 1932 not taken.
✗ Branch 1933 → 1934 not taken.
✗ Branch 1933 → 2066 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 9720 → 9721 not taken.
✓ Branch 9720 → 9722 taken 68342 times.
✓ Branch 9722 → 9723 taken 12964 times.
✓ Branch 9722 → 10976 taken 55378 times.
✓ Branch 9746 → 9747 taken 278 times.
✓ Branch 9746 → 10976 taken 12686 times.
✗ Branch 20708 → 20709 not taken.
✓ Branch 20708 → 20710 taken 369878 times.
✓ Branch 20710 → 20711 taken 369878 times.
✗ Branch 20710 → 21964 not taken.
✓ Branch 20734 → 20735 taken 159008 times.
✓ Branch 20734 → 21964 taken 210870 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2110 → 2111 not taken.
✗ Branch 2110 → 2119 not taken.
✗ Branch 2117 → 2118 not taken.
✗ Branch 2117 → 2119 not taken.
✗ Branch 2120 → 2121 not taken.
✗ Branch 2120 → 2394 not taken.
✗ Branch 4491 → 4492 not taken.
✗ Branch 4491 → 4500 not taken.
✗ Branch 4498 → 4499 not taken.
✗ Branch 4498 → 4500 not taken.
✗ Branch 4501 → 4502 not taken.
✗ Branch 4501 → 4775 not taken.
12517185 if (is_type_1 && nxt_tstack().top_depth == lowval) {
1102 // This will be a P node
1103
4/4
✓ Branch 290 → 291 taken 438431 times.
✓ Branch 290 → 298 taken 16 times.
✓ Branch 617 → 618 taken 128745 times.
✓ Branch 617 → 625 taken 6122 times.
891886 int item = maybe_unwrap_nxt(node_type::P, false);
1104
2/4
✗ Branch 319 → 320 not taken.
✓ Branch 319 → 321 taken 438447 times.
✗ Branch 646 → 647 not taken.
✓ Branch 646 → 648 taken 134867 times.
891886 merge_tstack_tops();
1105
4/4
✓ Branch 327 → 328 taken 346679 times.
✓ Branch 327 → 329 taken 91768 times.
✓ Branch 654 → 655 taken 73731 times.
✓ Branch 654 → 656 taken 61136 times.
1783772 finish_tstack_top(item, false);
1106 }
1107
1108
13/32
None:
✗ Branch 899 → 900 not taken.
✗ Branch 899 → 912 not taken.
✗ Branch 2249 → 2250 not taken.
✗ Branch 2249 → 2264 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4808 → 4809 not taken.
✓ Branch 4808 → 4810 taken 68342 times.
✓ Branch 4810 → 601 taken 50348 times.
✓ Branch 4810 → 4811 taken 17994 times.
✗ Branch 9617 → 9618 not taken.
✓ Branch 9617 → 9619 taken 369878 times.
✗ Branch 9619 → 9620 not taken.
✓ Branch 9619 → 9664 taken 369878 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 339 → 340 taken 2907882 times.
✓ Branch 339 → 345 taken 4471866 times.
✗ Branch 666 → 667 not taken.
✓ Branch 666 → 672 taken 3495313 times.
✗ Branch 1041 → 1042 not taken.
✗ Branch 1041 → 1054 not taken.
✗ Branch 2066 → 2067 not taken.
✗ Branch 2066 → 2079 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10977 → 10978 not taken.
✓ Branch 10977 → 10979 taken 68342 times.
✓ Branch 10979 → 10980 taken 17994 times.
✓ Branch 10979 → 11029 taken 50348 times.
✗ Branch 21965 → 21966 not taken.
✓ Branch 21965 → 21967 taken 369878 times.
✗ Branch 21967 → 21968 not taken.
✓ Branch 21967 → 22017 taken 369878 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2394 → 2395 not taken.
✗ Branch 2394 → 2409 not taken.
✗ Branch 4775 → 4776 not taken.
✗ Branch 4775 → 4790 not taken.
11751501 if (!s.has_vert_tstack) {
1109 // Throw cur_vert_node onto the tstack so it'll get interleaved correctly
1110
2/4
✓ Branch 340 → 341 taken 1092267 times.
✓ Branch 340 → 342 taken 1815615 times.
✗ Branch 667 → 668 not taken.
✗ Branch 667 → 669 not taken.
2943870 push_vert_tstack(cur, cur_depth);
1111 2943870 s.has_vert_tstack = true;
1112 2943870 assert(!is_type_1);
1113 }
1114 };
1115 16206137 auto pop_vert = [&] [[gnu::always_inline]] () -> void {
1116
1/2
✗ Branch 43 → 44 not taken.
✓ Branch 43 → 45 taken 14386864 times.
14588864 auto& s = stk.back();
1117 14588864 assert(s.ch_idx == s.ch_end);
1118 14588864 assert(s.has_vert_tstack);
1119
2/2
✓ Branch 47 → 48 taken 12600327 times.
✓ Branch 47 → 674 taken 1786537 times.
14588864 stk.pop_back();
1120 };
1121
1122 // Set something arbitrary, this is the normal convention for block-roots
1123
1/2
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 1786537 times.
1819273 stack_dir[0] = true;
1124 1819273 push_vert(rt);
1125 ✗ while (true) {
1126
4/8
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 610 → 611 taken 101000 times.
✓ Branch 610 → 4854 taken 505000 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 133 → 134 not taken.
✗ Branch 133 → 1057 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 614 → 615 taken 101000 times.
✓ Branch 614 → 11034 taken 505000 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 136 → 137 not taken.
✗ Branch 136 → 2414 not taken.
31694528 if (stk.back().ch_idx == stk.back().ch_end) {
1127 14588864 pop_vert();
1128
6/10
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 632 → 633 taken 84632 times.
✓ Branch 632 → 9665 taken 16368 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 47 → 48 taken 12600327 times.
✓ Branch 47 → 674 taken 1786537 times.
✗ Branch 142 → 143 not taken.
✗ Branch 142 → 144 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 636 → 637 taken 84632 times.
✓ Branch 636 → 22024 taken 16368 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 145 → 146 not taken.
✗ Branch 145 → 147 not taken.
14588864 if (stk.empty()) break;
1129
2/2
✓ Branch 42 → 43 taken 14386864 times.
✓ Branch 42 → 346 taken 16095664 times.
31694528 finish_edge();
1130
6/10
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4952 → 4953 taken 84632 times.
✓ Branch 4952 → 5441 taken 420368 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 358 → 359 taken 12600327 times.
✓ Branch 358 → 375 taken 3495337 times.
✗ Branch 1083 → 1084 not taken.
✗ Branch 1083 → 1169 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 11132 → 11133 taken 84632 times.
✓ Branch 11132 → 11625 taken 420368 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2440 → 2441 not taken.
✗ Branch 2440 → 2528 not taken.
18115664 } else if (std::optional<int> nxt = start_edge(); nxt) {
1131
1/2
✗ Branch 359 → 360 not taken.
✓ Branch 359 → 361 taken 12600327 times.
25539182 push_vert(*nxt);
1132 } else {
1133 17105664 finish_edge();
1134 }
1135 }
1136
1/2
✓ Branch 674 → 675 taken 1786537 times.
✗ Branch 674 → 677 not taken.
3638546 item_ch[ROOT_ITEM] = concat(item_ch[ROOT_ITEM], tstack.back().spans[1]); tstack.pop_back();
1137 }
1138 20287 }
1139
1140 // Phase 3: relabel the full tree in preorder
1141 20287 int tot_items = int(item_types.size());
1142 {
1143
4/6
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9776 → 9777 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 686 → 687 taken 87 times.
✓ Branch 687 → 688 taken 87 times.
✗ Branch 2121 → 2122 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22135 → 22136 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4834 → 4835 not taken.
20287 std::vector<int> vert_index(NV, -1);
1144
4/6
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9783 → 9784 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 687 → 688 taken 87 times.
✓ Branch 688 → 689 taken 87 times.
✗ Branch 2125 → 2126 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22142 → 22143 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4838 → 4839 not taken.
20287 std::vector<int> edge_index(NE, -1);
1145
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9788 → 9789 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 688 → 689 taken 87 times.
✗ Branch 2129 → 2130 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22147 → 22148 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4842 → 4843 not taken.
20287 std::vector<bool> edge_flipped(NE);
1146
1147
4/6
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9794 → 9795 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 689 → 690 taken 87 times.
✓ Branch 690 → 691 taken 87 times.
✗ Branch 2133 → 2134 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22153 → 22154 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4846 → 4847 not taken.
20287 std::vector<int> par(tot_items, -1);
1148
4/6
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9801 → 9802 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 690 → 691 taken 87 times.
✓ Branch 691 → 692 taken 87 times.
✗ Branch 2137 → 2138 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22160 → 22161 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4850 → 4851 not taken.
20287 std::vector<int> subtree_end(tot_items, -1);
1149
4/6
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9807 → 9808 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 691 → 692 taken 87 times.
✓ Branch 692 → 693 taken 87 times.
✗ Branch 2141 → 2142 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22166 → 22167 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4854 → 4855 not taken.
20287 std::vector<node_type> types(tot_items, node_type::F);
1150
4/6
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9814 → 9815 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 692 → 693 taken 87 times.
✓ Branch 693 → 694 taken 87 times.
✗ Branch 2145 → 2146 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22173 → 22174 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4858 → 4859 not taken.
20287 std::vector<int> orig_id(tot_items, -1);
1151
1152 20287 csr<int> ch;
1153
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9820 → 9821 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 693 → 694 taken 87 times.
✗ Branch 2147 → 2148 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22179 → 22180 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4860 → 4861 not taken.
20287 ch.bounds.resize(tot_items + 1, 0);
1154
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9822 → 9823 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 694 → 695 taken 87 times.
✗ Branch 2148 → 2149 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22181 → 22182 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4861 → 4862 not taken.
20287 ch.dat.resize(tot_items - 1);
1155
1156 // Each node is a child, and additionally most non-block node has 2 cap verts; blocks have 1, and O nodes have 1
1157 20287 int tot_node_verts = NV + (tot_items - 1 - NV) * 2 - tot_blocks - tot_self_loops;
1158
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9825 → 9826 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 695 → 696 taken 87 times.
✗ Branch 2151 → 2152 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22184 → 22185 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4864 → 4865 not taken.
20287 std::vector<node_vert_t> node_verts(tot_node_verts);
1159
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9828 → 9829 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 696 → 697 taken 87 times.
✗ Branch 2153 → 2154 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22187 → 22188 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4866 → 4867 not taken.
20287 csr_index node_nvs; node_nvs.bounds.resize(tot_items + 1);
1160
4/6
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9833 → 9834 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 697 → 698 taken 87 times.
✓ Branch 698 → 699 taken 87 times.
✗ Branch 2156 → 2157 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22192 → 22193 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4869 → 4870 not taken.
20287 std::vector<int> vert_par_nv(tot_items, -1);
1161
1162 20287 int tot_node_edges = (tot_items - 1 - NV - tot_blocks) * 2;
1163
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9838 → 9839 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 698 → 699 taken 87 times.
✗ Branch 2160 → 2161 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22197 → 22198 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4873 → 4874 not taken.
20287 std::vector<node_edge_t> node_edges(tot_node_edges);
1164
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9841 → 9842 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 699 → 700 taken 87 times.
✗ Branch 2162 → 2163 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22200 → 22201 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4875 → 4876 not taken.
20287 csr_index node_nes; node_nes.bounds.resize(tot_items + 1);
1165
1166 20287 csr<node_adj_t> node_adj;
1167
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9843 → 9844 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 700 → 701 taken 87 times.
✗ Branch 2163 → 2164 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22202 → 22203 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4876 → 4877 not taken.
20287 node_adj.bounds.resize(tot_node_verts * 2 + 1);
1168
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9844 → 9845 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 701 → 702 taken 87 times.
✗ Branch 2164 → 2165 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22203 → 22204 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4877 → 4878 not taken.
20287 node_adj.dat.resize(tot_node_edges * 2);
1169
1170
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9847 → 9848 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 702 → 703 taken 87 times.
✗ Branch 2167 → 2168 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22206 → 22207 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4880 → 4881 not taken.
20287 std::vector<bool> node_planar(with_planarity ? tot_items : 0);
1171
4/6
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9853 → 9854 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 703 → 704 taken 87 times.
✓ Branch 704 → 705 taken 87 times.
✗ Branch 2171 → 2172 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22212 → 22213 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4884 → 4885 not taken.
20287 std::vector<int> ne_rot_adj(with_planarity ? 4 * tot_node_edges : 0, -1);
1172
1173
4/6
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9860 → 9861 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 704 → 705 taken 87 times.
✓ Branch 705 → 706 taken 87 times.
✗ Branch 2175 → 2176 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22219 → 22220 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4888 → 4889 not taken.
20287 std::vector<int> vert_pos_buf(NV, -1);
1174
4/6
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9867 → 9868 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 705 → 706 taken 87 times.
✓ Branch 706 → 707 taken 87 times.
✗ Branch 2179 → 2180 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22226 → 22227 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4892 → 4893 not taken.
20287 std::vector<int> cnts_buf(2 * NV, -1);
1175 struct ch_buf_t {
1176 int loc;
1177 int item_id;
1178 };
1179
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9872 → 9873 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 706 → 707 taken 87 times.
✗ Branch 2183 → 2184 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22231 → 22232 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4896 → 4897 not taken.
20287 std::vector<ch_buf_t> ch_buf(tot_items);
1180
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9876 → 9877 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 707 → 708 taken 87 times.
✗ Branch 2187 → 2188 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22235 → 22236 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4900 → 4901 not taken.
20287 std::vector<int> rot_edge_ne(with_planarity ? 2 * NE + 1 : 0);
1181
1182 20200 int nxt_unassigned_idx = 0;
1183
1184 struct dfs_stack_t {
1185 int cur_idx;
1186 int ch_idx;
1187 int ch_end;
1188 int cur_nv;
1189 int cur_ne;
1190 };
1191
3/5
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 9880 → 9881 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 708 → 709 taken 87 times.
✗ Branch 2189 → 2190 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22239 → 22240 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4902 → 4903 not taken.
20287 std::vector<dfs_stack_t> stk; stk.reserve(tot_items);
1192 81966830 auto push_item = [&] [[gnu::always_inline]] (int cur_item) -> void {
1193 42669567 int cur_idx = nxt_unassigned_idx++;
1194 42669567 node_type cur_type = types[cur_idx] = item_types[cur_item];
1195 42669567 bool planar = true;
1196
6/22
None:
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 7 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 9908 → 9909 not taken.
✓ Branch 9908 → 9994 taken 10100 times.
✗ Branch 11435 → 11436 not taken.
✓ Branch 11435 → 11438 taken 838026 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 709 → 710 not taken.
✓ Branch 709 → 722 taken 87 times.
✗ Branch 832 → 833 not taken.
✓ Branch 832 → 835 taken 40973228 times.
✗ Branch 2193 → 2194 not taken.
✗ Branch 2193 → 2196 not taken.
✗ Branch 2561 → 2562 not taken.
✗ Branch 2561 → 2564 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22267 → 22268 not taken.
✓ Branch 22267 → 22400 taken 10100 times.
✗ Branch 24058 → 24059 not taken.
✓ Branch 24058 → 24061 taken 838026 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4906 → 4907 not taken.
✗ Branch 4906 → 4909 not taken.
✗ Branch 5374 → 5375 not taken.
✗ Branch 5374 → 5377 not taken.
42669567 if (cur_type == node_type::F) {
1197 ✗ assert(cur_item == 0);
1198
6/22
None:
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 15 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 9909 → 9910 not taken.
✗ Branch 9909 → 9911 not taken.
✓ Branch 11438 → 11439 taken 101000 times.
✓ Branch 11438 → 11459 taken 737026 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 710 → 711 not taken.
✗ Branch 710 → 712 not taken.
✓ Branch 835 → 836 taken 14386864 times.
✓ Branch 835 → 840 taken 26586364 times.
✗ Branch 2196 → 2197 not taken.
✗ Branch 2196 → 2204 not taken.
✗ Branch 2564 → 2565 not taken.
✗ Branch 2564 → 2572 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22268 → 22269 not taken.
✗ Branch 22268 → 22270 not taken.
✓ Branch 24061 → 24062 taken 101000 times.
✓ Branch 24061 → 24082 taken 737026 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4909 → 4910 not taken.
✗ Branch 4909 → 4917 not taken.
✗ Branch 5377 → 5378 not taken.
✗ Branch 5377 → 5385 not taken.
42649280 } else if (cur_type == node_type::V) {
1199 14588864 assert(1 <= cur_item && cur_item < 1 + NV);
1200 14588864 int orig_vert = cur_item - 1;
1201 14588864 orig_id[cur_idx] = orig_vert;
1202 14588864 vert_index[orig_vert] = cur_idx;
1203
6/22
None:
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 33 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 9911 → 9912 not taken.
✗ Branch 9911 → 9984 not taken.
✓ Branch 11459 → 11460 taken 505000 times.
✓ Branch 11459 → 11532 taken 232026 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 712 → 713 not taken.
✗ Branch 712 → 720 not taken.
✓ Branch 840 → 841 taken 16095664 times.
✓ Branch 840 → 848 taken 10490700 times.
✗ Branch 2204 → 2205 not taken.
✗ Branch 2204 → 2222 not taken.
✗ Branch 2572 → 2573 not taken.
✗ Branch 2572 → 2590 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22270 → 22271 not taken.
✗ Branch 22270 → 22343 not taken.
✓ Branch 24082 → 24083 taken 505000 times.
✓ Branch 24082 → 24155 taken 232026 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4917 → 4918 not taken.
✗ Branch 4917 → 4935 not taken.
✗ Branch 5385 → 5386 not taken.
✗ Branch 5385 → 5403 not taken.
28060416 } else if (cur_type == node_type::Q) {
1204 17105664 assert(1 + NV <= cur_item && cur_item < 1 + NV + NE);
1205 17105664 int orig_edge = cur_item - 1 - NV;
1206
1/4
✗ Branch 716 → 717 not taken.
✗ Branch 716 → 718 not taken.
✗ Branch 844 → 845 not taken.
✓ Branch 844 → 846 taken 16095664 times.
17105664 orig_id[cur_idx] = orig_edge;
1207 17105664 edge_index[orig_edge] = cur_idx;
1208 18115664 assert(item_vs[cur_item][0] != -1);
1209 19125664 edge_flipped[orig_edge] = item_vs[cur_item][0] != edges[orig_edge][0];
1210 } else {
1211 10954752 assert(1 + NV + NE <= cur_item);
1212 if constexpr (with_planarity) {
1213
2/16
None:
✗ Branch 35 → 36 not taken.
✗ Branch 35 → 53 not taken.
✗ Branch 36 → 37 not taken.
✗ Branch 36 → 53 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22353 → 22354 not taken.
✗ Branch 22353 → 22400 not taken.
✓ Branch 24165 → 24166 taken 175298 times.
✓ Branch 24165 → 24212 taken 56728 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4937 → 4938 not taken.
✗ Branch 4937 → 4955 not taken.
✗ Branch 4938 → 4939 not taken.
✗ Branch 4938 → 4955 not taken.
✗ Branch 5405 → 5406 not taken.
✗ Branch 5405 → 5423 not taken.
✗ Branch 5406 → 5407 not taken.
✗ Branch 5406 → 5423 not taken.
232026 if (cur_type == node_type::O || cur_type == node_type::I) {
1214 // No planarity data was set up
1215
3/26
None:
✗ Branch 37 → 38 not taken.
✗ Branch 37 → 40 not taken.
✗ Branch 38 → 39 not taken.
✗ Branch 38 → 40 not taken.
✗ Branch 39 → 40 not taken.
✗ Branch 39 → 52 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22354 → 22355 not taken.
✗ Branch 22354 → 22356 not taken.
✗ Branch 22355 → 22356 not taken.
✗ Branch 22355 → 22399 not taken.
✓ Branch 24166 → 24167 taken 8526 times.
✓ Branch 24166 → 24168 taken 166772 times.
✓ Branch 24167 → 24168 taken 8526 times.
✗ Branch 24167 → 24211 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4939 → 4940 not taken.
✗ Branch 4939 → 4942 not taken.
✗ Branch 4940 → 4941 not taken.
✗ Branch 4940 → 4942 not taken.
✗ Branch 4941 → 4942 not taken.
✗ Branch 4941 → 4954 not taken.
✗ Branch 5407 → 5408 not taken.
✗ Branch 5407 → 5410 not taken.
✗ Branch 5408 → 5409 not taken.
✗ Branch 5408 → 5410 not taken.
✗ Branch 5409 → 5410 not taken.
✗ Branch 5409 → 5422 not taken.
175298 } else if (cur_type == node_type::S || cur_type == node_type::P || cur_type == node_type::R) {
1216 175298 const auto& p = node_planarity[cur_item - (1 + NV + NE)];
1217
2/10
None:
✗ Branch 42 → 43 not taken.
✗ Branch 42 → 50 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22373 → 22397 not taken.
✗ Branch 22373 → 22398 not taken.
✓ Branch 24185 → 24209 taken 167646 times.
✓ Branch 24185 → 24210 taken 7652 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4944 → 4945 not taken.
✗ Branch 4944 → 4952 not taken.
✗ Branch 5412 → 5413 not taken.
✗ Branch 5412 → 5420 not taken.
350596 if (p) {
1218 // Make sure this runs before our planarity_flip checks
1219
2/10
None:
✗ Branch 49 → 44 not taken.
✗ Branch 49 → 51 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22397 → 22374 not taken.
✗ Branch 22397 → 22400 not taken.
✓ Branch 24209 → 24186 taken 670584 times.
✓ Branch 24209 → 24212 taken 167646 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4951 → 4946 not taken.
✗ Branch 4951 → 4953 not taken.
✗ Branch 5419 → 5414 not taken.
✗ Branch 5419 → 5421 not taken.
838230 for (int s = 0; s < 4; s++) {
1220 670584 int a = 8 * NE + s, b = (*p)[s];
1221 670584 quarter_edge_matches[a] = b;
1222 670584 quarter_edge_matches[b] = a;
1223 }
1224 } else {
1225 // TODO: Any certificate stuff
1226 7652 planar = false;
1227 }
1228 − } else assert(false);
1229 }
1230 }
1231
2/4
✗ Branch 22400 → 22401 not taken.
✓ Branch 22400 → 22402 taken 10100 times.
✗ Branch 24212 → 24213 not taken.
✓ Branch 24212 → 24214 taken 838026 times.
848126 if constexpr (with_planarity) node_planar[cur_idx] = planar;
1232
1233 // HACK: Fill ch and vert_items in with orig items / orig verts for now,
1234 // because we don't have the final item id's yet.
1235
3/4
✗ Branch 722 → 723 not taken.
✓ Branch 722 → 724 taken 87 times.
✓ Branch 850 → 851 taken 26586364 times.
✓ Branch 850 → 852 taken 14386864 times.
42669567 int ch_st = ch.bounds[cur_idx];
1236 42669567 int ch_en = ch_st;
1237 42669567 int nv_st = node_nvs.bounds[cur_idx];
1238 42669567 int nv_en = nv_st;
1239 42669567 int n_edges = 0;
1240
9/24
None:
✗ Branch 39 → 40 not taken.
✗ Branch 39 → 44 not taken.
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 64 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10018 → 10019 not taken.
✓ Branch 10018 → 10039 taken 10100 times.
✓ Branch 11566 → 11567 taken 737026 times.
✓ Branch 11566 → 11587 taken 101000 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 722 → 723 not taken.
✓ Branch 722 → 724 taken 87 times.
✓ Branch 850 → 851 taken 26586364 times.
✓ Branch 850 → 852 taken 14386864 times.
✗ Branch 2228 → 2229 not taken.
✗ Branch 2228 → 2233 not taken.
✗ Branch 2596 → 2597 not taken.
✗ Branch 2596 → 2601 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22434 → 22435 not taken.
✓ Branch 22434 → 22455 taken 10100 times.
✓ Branch 24246 → 24247 taken 737026 times.
✓ Branch 24246 → 24267 taken 101000 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4961 → 4962 not taken.
✗ Branch 4961 → 4966 not taken.
✗ Branch 5429 → 5430 not taken.
✗ Branch 5429 → 5434 not taken.
44365819 if (item_vs[cur_item][0] != -1) {
1241 29534468 node_verts[nv_en++] = {cur_idx, item_vs[cur_item][0]};
1242 }
1243
9/24
None:
✗ Branch 46 → 47 not taken.
✗ Branch 46 → 73 not taken.
✗ Branch 66 → 67 not taken.
✗ Branch 66 → 103 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 10053 → 10054 taken 10100 times.
✗ Branch 10053 → 10151 not taken.
✓ Branch 11601 → 11602 taken 289938 times.
✓ Branch 11601 → 11699 taken 548088 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 724 → 725 taken 87 times.
✗ Branch 724 → 737 not taken.
✓ Branch 852 → 853 taken 13999303 times.
✓ Branch 852 → 865 taken 26973925 times.
✗ Branch 2235 → 2236 not taken.
✗ Branch 2235 → 2262 not taken.
✗ Branch 2603 → 2604 not taken.
✗ Branch 2603 → 2630 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22469 → 22470 taken 10100 times.
✗ Branch 22469 → 22597 not taken.
✓ Branch 24281 → 24282 taken 289938 times.
✓ Branch 24281 → 24409 taken 548088 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4968 → 4969 not taken.
✗ Branch 4968 → 5005 not taken.
✗ Branch 5436 → 5437 not taken.
✗ Branch 5436 → 5473 not taken.
44365819 if (!item_ch[cur_item].empty()) {
1244 15199542 bool planarity_flip = item_ch[cur_item].v[0] & 1;
1245 43249356 for (int ch_item = item_ch[cur_item].v[0] >> 1; true; planarity_flip ^= (ch_nxt[ch_item] & 1), ch_item = ch_nxt[ch_item] >> 1) {
1246
2/4
✗ Branch 726 → 727 not taken.
✓ Branch 726 → 728 taken 1786537 times.
✗ Branch 854 → 855 not taken.
✓ Branch 854 → 856 taken 39186691 times.
42649280 ch.dat[ch_en++] = ch_item;
1247 42649280 assert(ch_item >= 1);
1248
9/24
None:
✗ Branch 55 → 56 not taken.
✗ Branch 55 → 58 not taken.
✗ Branch 75 → 76 not taken.
✗ Branch 75 → 78 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 10091 → 10092 taken 16368 times.
✗ Branch 10091 → 10102 not taken.
✓ Branch 11639 → 11640 taken 84632 times.
✓ Branch 11639 → 11650 taken 737026 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 728 → 729 taken 1786537 times.
✗ Branch 728 → 730 not taken.
✓ Branch 856 → 857 taken 12600327 times.
✓ Branch 856 → 858 taken 26586364 times.
✗ Branch 2244 → 2245 not taken.
✗ Branch 2244 → 2247 not taken.
✗ Branch 2612 → 2613 not taken.
✗ Branch 2612 → 2615 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22507 → 22508 taken 16368 times.
✗ Branch 22507 → 22518 not taken.
✓ Branch 24319 → 24320 taken 84632 times.
✓ Branch 24319 → 24330 taken 737026 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4977 → 4978 not taken.
✗ Branch 4977 → 4980 not taken.
✗ Branch 5445 → 5446 not taken.
✗ Branch 5445 → 5448 not taken.
42649280 if (ch_item < 1 + NV) {
1249 14588864 node_verts[nv_en++] = {cur_idx, ch_item - 1};
1250 } else {
1251 if constexpr (with_planarity) {
1252
2/10
None:
✗ Branch 78 → 79 not taken.
✗ Branch 78 → 81 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22518 → 22519 not taken.
✗ Branch 22518 → 22521 not taken.
✓ Branch 24330 → 24331 taken 503942 times.
✓ Branch 24330 → 24333 taken 233084 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4980 → 4981 not taken.
✗ Branch 4980 → 4983 not taken.
✗ Branch 5448 → 5449 not taken.
✗ Branch 5448 → 5451 not taken.
737026 if (cur_type != node_type::R) {
1253 503942 assert(!planarity_flip);
1254 } else {
1255 // Fix the planarity direction right here: reverse quarter_edge_matches upfront;
1256 // this breaks the involution property, but from here on we'll never read the low bits anyways.
1257 233084 int ve = ch_item - (1 + NV);
1258
2/10
None:
✗ Branch 81 → 82 not taken.
✗ Branch 81 → 88 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22525 → 22526 not taken.
✗ Branch 22525 → 22548 not taken.
✓ Branch 24337 → 24338 taken 19366 times.
✓ Branch 24337 → 24360 taken 213718 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4983 → 4984 not taken.
✗ Branch 4983 → 4990 not taken.
✗ Branch 5451 → 5452 not taken.
✗ Branch 5451 → 5458 not taken.
233084 if (planarity_flip) {
1259 19366 std::swap(quarter_edge_matches[4 * ve + 0], quarter_edge_matches[4 * ve + 1]);
1260 19366 std::swap(quarter_edge_matches[4 * ve + 2], quarter_edge_matches[4 * ve + 3]);
1261 }
1262 }
1263 }
1264 28060416 n_edges++;
1265 }
1266
12/24
None:
✗ Branch 61 → 62 not taken.
✗ Branch 61 → 66 not taken.
✗ Branch 91 → 92 not taken.
✗ Branch 91 → 96 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 10115 → 10116 taken 10100 times.
✓ Branch 10115 → 10124 taken 6268 times.
✓ Branch 11663 → 11664 taken 289938 times.
✓ Branch 11663 → 11672 taken 531720 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 731 → 732 taken 87 times.
✓ Branch 731 → 734 taken 1786450 times.
✓ Branch 859 → 860 taken 13999303 times.
✓ Branch 859 → 862 taken 25187388 times.
✗ Branch 2250 → 2251 not taken.
✗ Branch 2250 → 2255 not taken.
✗ Branch 2618 → 2619 not taken.
✗ Branch 2618 → 2623 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22561 → 22562 taken 10100 times.
✓ Branch 22561 → 22570 taken 6268 times.
✓ Branch 24373 → 24374 taken 289938 times.
✓ Branch 24373 → 24382 taken 531720 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4993 → 4994 not taken.
✗ Branch 4993 → 4998 not taken.
✗ Branch 5461 → 5462 not taken.
✗ Branch 5461 → 5466 not taken.
44325332 if (ch_item == (item_ch[cur_item].v[1] >> 1)) {
1267 14599466 assert(ch_nxt[ch_item] == -1);
1268 ✗ break;
1269 }
1270 }
1271 15199542 planarity_flip ^= item_ch[cur_item].v[1] & 1;
1272 14599466 assert(!planarity_flip);
1273 }
1274
9/24
None:
✗ Branch 75 → 76 not taken.
✗ Branch 75 → 80 not taken.
✗ Branch 105 → 106 not taken.
✗ Branch 105 → 110 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10162 → 10163 not taken.
✓ Branch 10162 → 10184 taken 10100 times.
✓ Branch 11710 → 11711 taken 619756 times.
✓ Branch 11710 → 11732 taken 218270 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 737 → 738 not taken.
✓ Branch 737 → 739 taken 87 times.
✓ Branch 865 → 866 taken 21365737 times.
✓ Branch 865 → 867 taken 19607491 times.
✗ Branch 2264 → 2265 not taken.
✗ Branch 2264 → 2269 not taken.
✗ Branch 2632 → 2633 not taken.
✗ Branch 2632 → 2637 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22608 → 22609 not taken.
✓ Branch 22608 → 22630 taken 10100 times.
✓ Branch 24420 → 24421 taken 619756 times.
✓ Branch 24420 → 24442 taken 218270 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5007 → 5008 not taken.
✗ Branch 5007 → 5012 not taken.
✗ Branch 5475 → 5476 not taken.
✗ Branch 5475 → 5480 not taken.
44365819 if (item_vs[cur_item][1] != -1) {
1275 23844761 node_verts[nv_en++] = {cur_idx, item_vs[cur_item][1]};
1276 }
1277
3/4
✗ Branch 739 → 740 not taken.
✓ Branch 739 → 743 taken 87 times.
✓ Branch 867 → 868 taken 26586364 times.
✓ Branch 867 → 871 taken 14386864 times.
42669567 ch.bounds[cur_idx+1] = ch_en;
1278 42669567 node_nvs.bounds[cur_idx+1] = nv_en;
1279
1280 42669567 int n_verts = nv_en - nv_st;
1281
1282
0/24
None:
✗ Branch 82 → 83 not taken.
✗ Branch 82 → 85 not taken.
✗ Branch 83 → 84 not taken.
✗ Branch 83 → 85 not taken.
✗ Branch 112 → 113 not taken.
✗ Branch 112 → 115 not taken.
✗ Branch 113 → 114 not taken.
✗ Branch 113 → 115 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2271 → 2272 not taken.
✗ Branch 2271 → 2274 not taken.
✗ Branch 2272 → 2273 not taken.
✗ Branch 2272 → 2274 not taken.
✗ Branch 2639 → 2640 not taken.
✗ Branch 2639 → 2642 not taken.
✗ Branch 2640 → 2641 not taken.
✗ Branch 2640 → 2642 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5014 → 5015 not taken.
✗ Branch 5014 → 5017 not taken.
✗ Branch 5015 → 5016 not taken.
✗ Branch 5015 → 5017 not taken.
✗ Branch 5482 → 5483 not taken.
✗ Branch 5482 → 5485 not taken.
✗ Branch 5483 → 5484 not taken.
✗ Branch 5483 → 5485 not taken.
42669567 bool is_node = cur_type != node_type::F && cur_type != node_type::V;
1283
21/72
None:
✗ Branch 86 → 87 not taken.
✗ Branch 86 → 90 not taken.
✗ Branch 87 → 88 not taken.
✗ Branch 87 → 89 not taken.
✗ Branch 88 → 89 not taken.
✗ Branch 88 → 90 not taken.
✗ Branch 116 → 117 not taken.
✗ Branch 116 → 120 not taken.
✗ Branch 117 → 118 not taken.
✗ Branch 117 → 119 not taken.
✗ Branch 118 → 119 not taken.
✗ Branch 118 → 120 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10198 → 10199 not taken.
✓ Branch 10198 → 10202 taken 10100 times.
✗ Branch 10199 → 10200 not taken.
✗ Branch 10199 → 10201 not taken.
✗ Branch 10200 → 10201 not taken.
✗ Branch 10200 → 10202 not taken.
✓ Branch 11746 → 11747 taken 737026 times.
✓ Branch 11746 → 11750 taken 101000 times.
✓ Branch 11747 → 11748 taken 505000 times.
✓ Branch 11747 → 11749 taken 232026 times.
✓ Branch 11748 → 11749 taken 438220 times.
✓ Branch 11748 → 11750 taken 66780 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 739 → 740 not taken.
✓ Branch 739 → 743 taken 87 times.
✗ Branch 740 → 741 not taken.
✗ Branch 740 → 742 not taken.
✗ Branch 741 → 742 not taken.
✗ Branch 741 → 743 not taken.
✓ Branch 867 → 868 taken 26586364 times.
✓ Branch 867 → 871 taken 14386864 times.
✓ Branch 868 → 869 taken 16095664 times.
✓ Branch 868 → 870 taken 10490700 times.
✓ Branch 869 → 870 taken 10875061 times.
✓ Branch 869 → 871 taken 5220603 times.
✗ Branch 2275 → 2276 not taken.
✗ Branch 2275 → 2279 not taken.
✗ Branch 2276 → 2277 not taken.
✗ Branch 2276 → 2278 not taken.
✗ Branch 2277 → 2278 not taken.
✗ Branch 2277 → 2279 not taken.
✗ Branch 2643 → 2644 not taken.
✗ Branch 2643 → 2647 not taken.
✗ Branch 2644 → 2645 not taken.
✗ Branch 2644 → 2646 not taken.
✗ Branch 2645 → 2646 not taken.
✗ Branch 2645 → 2647 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22644 → 22645 not taken.
✓ Branch 22644 → 22648 taken 10100 times.
✗ Branch 22645 → 22646 not taken.
✗ Branch 22645 → 22647 not taken.
✗ Branch 22646 → 22647 not taken.
✗ Branch 22646 → 22648 not taken.
✓ Branch 24456 → 24457 taken 737026 times.
✓ Branch 24456 → 24460 taken 101000 times.
✓ Branch 24457 → 24458 taken 505000 times.
✓ Branch 24457 → 24459 taken 232026 times.
✓ Branch 24458 → 24459 taken 438220 times.
✓ Branch 24458 → 24460 taken 66780 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5018 → 5019 not taken.
✗ Branch 5018 → 5022 not taken.
✗ Branch 5019 → 5020 not taken.
✗ Branch 5019 → 5021 not taken.
✗ Branch 5020 → 5021 not taken.
✗ Branch 5020 → 5022 not taken.
✗ Branch 5486 → 5487 not taken.
✗ Branch 5486 → 5490 not taken.
✗ Branch 5487 → 5488 not taken.
✗ Branch 5487 → 5489 not taken.
✗ Branch 5488 → 5489 not taken.
✗ Branch 5488 → 5490 not taken.
42669567 bool has_cap = is_node && !(cur_type == node_type::Q && ch_en - ch_st > 0);
1284
1285 ✗ if (!is_node) n_edges = 0;
1286
0/12
None:
✗ Branch 93 → 94 not taken.
✗ Branch 93 → 95 not taken.
✗ Branch 123 → 124 not taken.
✗ Branch 123 → 125 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2282 → 2283 not taken.
✗ Branch 2282 → 2284 not taken.
✗ Branch 2650 → 2651 not taken.
✗ Branch 2650 → 2652 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5025 → 5026 not taken.
✗ Branch 5025 → 5027 not taken.
✗ Branch 5493 → 5494 not taken.
✗ Branch 5493 → 5495 not taken.
22706253 if (has_cap) n_edges++;
1287
1288
2/4
✓ Branch 743 → 744 taken 87 times.
✗ Branch 743 → 747 not taken.
✗ Branch 871 → 872 not taken.
✓ Branch 871 → 875 taken 40973228 times.
42669567 int ne_st = node_nes.bounds[cur_idx];
1289 42669567 int ne_en = node_nes.bounds[cur_idx+1] = ne_st + n_edges;
1290
1291 85962817 auto set_ne = [&] [[gnu::always_inline]] (int ne, std::array<int, 2> nvs, std::array<int, 2> nds, std::array<int, 4> rot_adjs) -> void {
1292 45412506 node_edges[ne].node = cur_idx;
1293 45412506 node_edges[ne].nvs = nvs;
1294 50774474 node_adj.dat[nds[0]] = {ne, nvs[1]};
1295 50774474 node_adj.dat[nds[1]] = {ne, nvs[0]};
1296 if constexpr (with_planarity) {
1297
14/72
None:
✗ Branch 14 → 11 not taken.
✗ Branch 14 → 15 not taken.
✗ Branch 153 → 150 not taken.
✗ Branch 153 → 154 not taken.
✗ Branch 178 → 175 not taken.
✗ Branch 178 → 179 not taken.
✗ Branch 209 → 206 not taken.
✗ Branch 209 → 210 not taken.
✗ Branch 236 → 233 not taken.
✗ Branch 236 → 237 not taken.
✗ Branch 259 → 256 not taken.
✗ Branch 259 → 260 not taken.
✗ Branch 388 → 385 not taken.
✗ Branch 388 → 389 not taken.
✗ Branch 420 → 417 not taken.
✗ Branch 420 → 421 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22770 → 22760 not taken.
✗ Branch 22770 → 23847 not taken.
✗ Branch 22872 → 22862 not taken.
✗ Branch 22872 → 23847 not taken.
✗ Branch 22980 → 22970 not taken.
✗ Branch 22980 → 22981 not taken.
✗ Branch 23083 → 23073 not taken.
✗ Branch 23083 → 23179 not taken.
✗ Branch 23176 → 23166 not taken.
✗ Branch 23176 → 23177 not taken.
✗ Branch 23728 → 23718 not taken.
✗ Branch 23728 → 23729 not taken.
✗ Branch 23835 → 23825 not taken.
✗ Branch 23835 → 23836 not taken.
✓ Branch 24582 → 24572 taken 403920 times.
✓ Branch 24582 → 25659 taken 100980 times.
✓ Branch 24684 → 24674 taken 1842992 times.
✓ Branch 24684 → 25659 taken 460748 times.
✓ Branch 24792 → 24782 taken 2077560 times.
✓ Branch 24792 → 24793 taken 519390 times.
✓ Branch 24895 → 24885 taken 23032 times.
✓ Branch 24895 → 24991 taken 5758 times.
✓ Branch 24988 → 24978 taken 48024 times.
✓ Branch 24988 → 24989 taken 12006 times.
✓ Branch 25540 → 25530 taken 932336 times.
✓ Branch 25540 → 25541 taken 233084 times.
✓ Branch 25647 → 25637 taken 34104 times.
✓ Branch 25647 → 25648 taken 8526 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5055 → 5052 not taken.
✗ Branch 5055 → 5056 not taken.
✗ Branch 5080 → 5077 not taken.
✗ Branch 5080 → 5081 not taken.
✗ Branch 5111 → 5108 not taken.
✗ Branch 5111 → 5112 not taken.
✗ Branch 5138 → 5135 not taken.
✗ Branch 5138 → 5139 not taken.
✗ Branch 5161 → 5158 not taken.
✗ Branch 5161 → 5162 not taken.
✗ Branch 5290 → 5287 not taken.
✗ Branch 5290 → 5291 not taken.
✗ Branch 5322 → 5319 not taken.
✗ Branch 5322 → 5323 not taken.
✗ Branch 5523 → 5520 not taken.
✗ Branch 5523 → 5524 not taken.
✗ Branch 5548 → 5545 not taken.
✗ Branch 5548 → 5549 not taken.
✗ Branch 5579 → 5576 not taken.
✗ Branch 5579 → 5580 not taken.
✗ Branch 5606 → 5603 not taken.
✗ Branch 5606 → 5607 not taken.
✗ Branch 5629 → 5626 not taken.
✗ Branch 5629 → 5630 not taken.
✗ Branch 5758 → 5755 not taken.
✗ Branch 5758 → 5759 not taken.
✗ Branch 5790 → 5787 not taken.
✗ Branch 5790 → 5791 not taken.
6702460 for (int z = 0; z < 4; z++) ne_rot_adj[4 * ne + z] = rot_adjs[z];
1298 }
1299 };
1300
6/24
None:
✗ Branch 97 → 98 not taken.
✗ Branch 97 → 102 not taken.
✗ Branch 127 → 128 not taken.
✗ Branch 127 → 132 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 10225 → 10226 taken 10100 times.
✗ Branch 10225 → 10236 not taken.
✗ Branch 11773 → 11774 not taken.
✓ Branch 11773 → 11784 taken 838026 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 743 → 744 taken 87 times.
✗ Branch 743 → 747 not taken.
✗ Branch 871 → 872 not taken.
✓ Branch 871 → 875 taken 40973228 times.
✗ Branch 2286 → 2287 not taken.
✗ Branch 2286 → 2291 not taken.
✗ Branch 2654 → 2655 not taken.
✗ Branch 2654 → 2659 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22671 → 22672 taken 10100 times.
✗ Branch 22671 → 22682 not taken.
✗ Branch 24483 → 24484 not taken.
✓ Branch 24483 → 24494 taken 838026 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5029 → 5030 not taken.
✗ Branch 5029 → 5034 not taken.
✗ Branch 5497 → 5498 not taken.
✗ Branch 5497 → 5502 not taken.
42669567 if (cur_type == node_type::F) {
1301 // Just set node_adj bounds and we're good
1302
6/24
None:
✗ Branch 101 → 99 not taken.
✗ Branch 101 → 325 not taken.
✗ Branch 131 → 129 not taken.
✗ Branch 131 → 425 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 10235 → 10227 taken 32736 times.
✓ Branch 10235 → 11224 taken 10100 times.
✗ Branch 11783 → 11775 not taken.
✗ Branch 11783 → 12772 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 746 → 745 taken 3573074 times.
✓ Branch 746 → 818 taken 87 times.
✗ Branch 874 → 873 not taken.
✗ Branch 874 → 946 not taken.
✗ Branch 2290 → 2288 not taken.
✗ Branch 2290 → 2514 not taken.
✗ Branch 2658 → 2656 not taken.
✗ Branch 2658 → 2882 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 22681 → 22673 taken 32736 times.
✓ Branch 22681 → 23847 taken 10100 times.
✗ Branch 24493 → 24485 not taken.
✗ Branch 24493 → 25659 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5033 → 5031 not taken.
✗ Branch 5033 → 5327 not taken.
✗ Branch 5501 → 5499 not taken.
✗ Branch 5501 → 5795 not taken.
3658833 for (int i = 2 * nv_st+1; i <= 2 * nv_en; i++) {
1303 3638546 node_adj.bounds[i] = 2 * ne_st;
1304 }
1305
6/24
None:
✗ Branch 102 → 103 not taken.
✗ Branch 102 → 325 not taken.
✗ Branch 132 → 133 not taken.
✗ Branch 132 → 425 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10236 → 10237 not taken.
✗ Branch 10236 → 11224 not taken.
✓ Branch 11784 → 11785 taken 737026 times.
✓ Branch 11784 → 12772 taken 101000 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 747 → 748 not taken.
✗ Branch 747 → 818 not taken.
✓ Branch 875 → 876 taken 26586364 times.
✓ Branch 875 → 946 taken 14386864 times.
✗ Branch 2291 → 2292 not taken.
✗ Branch 2291 → 2514 not taken.
✗ Branch 2659 → 2660 not taken.
✗ Branch 2659 → 2882 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22682 → 22683 not taken.
✗ Branch 22682 → 23847 not taken.
✓ Branch 24494 → 24495 taken 737026 times.
✓ Branch 24494 → 25659 taken 101000 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5034 → 5035 not taken.
✗ Branch 5034 → 5327 not taken.
✗ Branch 5502 → 5503 not taken.
✗ Branch 5502 → 5795 not taken.
42649280 } else if (cur_type == node_type::V) {
1306 // Nothing to do
1307
6/24
None:
✗ Branch 103 → 104 not taken.
✗ Branch 103 → 121 not taken.
✗ Branch 133 → 134 not taken.
✗ Branch 133 → 156 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10237 → 10238 not taken.
✗ Branch 10237 → 10313 not taken.
✓ Branch 11785 → 11786 taken 100980 times.
✓ Branch 11785 → 11861 taken 636046 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 748 → 749 not taken.
✗ Branch 748 → 754 not taken.
✓ Branch 876 → 877 taken 48 times.
✓ Branch 876 → 882 taken 26586316 times.
✗ Branch 2292 → 2293 not taken.
✗ Branch 2292 → 2310 not taken.
✗ Branch 2660 → 2661 not taken.
✗ Branch 2660 → 2678 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22683 → 22684 not taken.
✗ Branch 22683 → 22771 not taken.
✓ Branch 24495 → 24496 taken 100980 times.
✓ Branch 24495 → 24583 taken 636046 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5035 → 5036 not taken.
✗ Branch 5035 → 5058 not taken.
✗ Branch 5503 → 5504 not taken.
✗ Branch 5503 → 5526 not taken.
28060416 } else if (n_verts == 1) {
1308 202008 assert(cur_type == node_type::Q || cur_type == node_type::O);
1309 202008 assert(n_edges == 1);
1310 202008 node_adj.bounds[2 * nv_st + 1] = 2 * ne_st + 1 * n_edges;
1311 202008 node_adj.bounds[2 * nv_st + 2] = 2 * ne_st + 2 * n_edges;
1312 302988 set_ne(ne_st, {nv_st, nv_st}, {2 * ne_st + 1, 2 * ne_st}, {4 * ne_st + 3, 4 * ne_st + 2, 4 * ne_st + 1, 4 * ne_st + 0});
1313 ✗ } else if (cur_type == node_type::Q || cur_type == node_type::I) {
1314 22156973 assert(n_verts == 2);
1315 22156973 assert(n_edges == 1);
1316 22156973 node_adj.bounds[2 * nv_st + 1] = 2 * ne_st + 0 * n_edges;
1317 22156973 node_adj.bounds[2 * nv_st + 2] = 2 * ne_st + 1 * n_edges;
1318 22156973 node_adj.bounds[2 * nv_st + 3] = 2 * ne_st + 2 * n_edges;
1319 22156973 node_adj.bounds[2 * nv_st + 4] = 2 * ne_st + 2 * n_edges;
1320 22617721 set_ne(ne_st, {nv_st, nv_st + 1}, {2 * ne_st, 2 * ne_st + 1}, {4 * ne_st + 1, 4 * ne_st + 0, 4 * ne_st + 3, 4 * ne_st + 2});
1321 ✗ } else if (cur_type == node_type::P) {
1322 // Special case: tiebreak the parallel edges so they're reversed
1323 1287511 assert(n_verts == 2);
1324 1287511 assert(n_edges >= 3);
1325 1287511 node_adj.bounds[2 * nv_st + 1] = 2 * ne_st + 0 * n_edges;
1326 1287511 node_adj.bounds[2 * nv_st + 2] = 2 * ne_st + 1 * n_edges;
1327 1287511 node_adj.bounds[2 * nv_st + 3] = 2 * ne_st + 2 * n_edges;
1328 1287511 node_adj.bounds[2 * nv_st + 4] = 2 * ne_st + 2 * n_edges;
1329
6/24
None:
✗ Branch 167 → 151 not taken.
✗ Branch 167 → 325 not taken.
✗ Branch 212 → 191 not taken.
✗ Branch 212 → 425 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10501 → 10437 not taken.
✗ Branch 10501 → 11224 not taken.
✓ Branch 12049 → 11985 taken 519390 times.
✓ Branch 12049 → 12772 taken 161014 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 766 → 765 not taken.
✗ Branch 766 → 818 not taken.
✓ Branch 894 → 893 taken 2896714 times.
✓ Branch 894 → 946 taken 965483 times.
✗ Branch 2356 → 2340 not taken.
✗ Branch 2356 → 2514 not taken.
✗ Branch 2724 → 2708 not taken.
✗ Branch 2724 → 2882 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22982 → 22906 not taken.
✗ Branch 22982 → 23847 not taken.
✓ Branch 24794 → 24718 taken 519390 times.
✓ Branch 24794 → 25659 taken 161014 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5114 → 5093 not taken.
✗ Branch 5114 → 5327 not taken.
✗ Branch 5582 → 5561 not taken.
✗ Branch 5582 → 5795 not taken.
5223005 for (int ne = ne_st; ne < ne_en; ne++) {
1330
4/20
None:
✗ Branch 151 → 152 not taken.
✗ Branch 151 → 153 not taken.
✗ Branch 191 → 192 not taken.
✗ Branch 191 → 193 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10437 → 10438 not taken.
✗ Branch 10437 → 10439 not taken.
✓ Branch 11985 → 11986 taken 161014 times.
✓ Branch 11985 → 11987 taken 358376 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2340 → 2341 not taken.
✗ Branch 2340 → 2342 not taken.
✗ Branch 2708 → 2709 not taken.
✗ Branch 2708 → 2710 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22906 → 22907 not taken.
✗ Branch 22906 → 22908 not taken.
✓ Branch 24718 → 24719 taken 161014 times.
✓ Branch 24718 → 24720 taken 358376 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5093 → 5094 not taken.
✗ Branch 5093 → 5095 not taken.
✗ Branch 5561 → 5562 not taken.
✗ Branch 5561 → 5563 not taken.
1038780 int ne_prv = (ne == ne_st ? ne_en : ne) - 1;
1331
4/20
None:
✗ Branch 154 → 155 not taken.
✗ Branch 154 → 156 not taken.
✗ Branch 194 → 195 not taken.
✗ Branch 194 → 196 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10440 → 10441 not taken.
✗ Branch 10440 → 10442 not taken.
✓ Branch 11988 → 11989 taken 358376 times.
✓ Branch 11988 → 11990 taken 161014 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2343 → 2344 not taken.
✗ Branch 2343 → 2345 not taken.
✗ Branch 2711 → 2712 not taken.
✗ Branch 2711 → 2713 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22909 → 22910 not taken.
✗ Branch 22909 → 22911 not taken.
✓ Branch 24721 → 24722 taken 358376 times.
✓ Branch 24721 → 24723 taken 161014 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5096 → 5097 not taken.
✗ Branch 5096 → 5098 not taken.
✗ Branch 5564 → 5565 not taken.
✗ Branch 5564 → 5566 not taken.
3935494 int ne_nxt = (ne+1 == ne_en ? ne_st : ne+1);
1332 3935494 std::array<int, 4> rot_adjs{4 * ne_prv + 1, 4 * ne_nxt + 0, 4 * ne_nxt + 3, 4 * ne_prv + 2};
1333 4974274 set_ne(ne, {nv_st, nv_st + 1}, {2 * ne_st + (ne - ne_st), 2 * ne_en - 1 - (ne - ne_st)}, rot_adjs);
1334 }
1335 ✗ } else if (cur_type == node_type::S) {
1336 4395932 assert(n_verts == n_edges);
1337 4395932 assert(n_verts >= 3);
1338
6/24
None:
✗ Branch 176 → 174 not taken.
✗ Branch 176 → 177 not taken.
✗ Branch 221 → 219 not taken.
✗ Branch 221 → 222 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10515 → 10507 not taken.
✗ Branch 10515 → 10516 not taken.
✓ Branch 12063 → 12055 taken 35528 times.
✓ Branch 12063 → 12064 taken 5758 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 773 → 772 not taken.
✗ Branch 773 → 774 not taken.
✓ Branch 901 → 900 taken 28656406 times.
✓ Branch 901 → 902 taken 4384416 times.
✗ Branch 2365 → 2363 not taken.
✗ Branch 2365 → 2366 not taken.
✗ Branch 2733 → 2731 not taken.
✗ Branch 2733 → 2734 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22996 → 22988 not taken.
✗ Branch 22996 → 22997 not taken.
✓ Branch 24808 → 24800 taken 35528 times.
✓ Branch 24808 → 24809 taken 5758 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5123 → 5121 not taken.
✗ Branch 5123 → 5124 not taken.
✗ Branch 5591 → 5589 not taken.
✗ Branch 5591 → 5592 not taken.
33123394 for (int i = 2 * nv_st + 1; i <= 2 * nv_en; i++) {
1339 28727462 node_adj.bounds[i] = i + 2 * (ne_st - nv_st);
1340 }
1341 // Fix bounds for the cap
1342 4395932 node_adj.bounds[2 * nv_st + 1]--;
1343 4395932 node_adj.bounds[2 * nv_en - 1]++;
1344 4395932 set_ne(ne_st, {nv_st, nv_en - 1}, {2 * ne_st, 2 * ne_en - 1}, {4 * (ne_st+1) + 1, 4 * (ne_st+1) + 0, 4 * (ne_en-1) + 3, 4 * (ne_en-1) + 2});
1345
6/24
None:
✗ Branch 207 → 189 not taken.
✗ Branch 207 → 325 not taken.
✗ Branch 262 → 239 not taken.
✗ Branch 262 → 425 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10675 → 10592 not taken.
✗ Branch 10675 → 11224 not taken.
✓ Branch 12223 → 12140 taken 12006 times.
✓ Branch 12223 → 12772 taken 5758 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 776 → 775 not taken.
✗ Branch 776 → 818 not taken.
✓ Branch 904 → 903 taken 9943787 times.
✓ Branch 904 → 946 taken 4384416 times.
✗ Branch 2396 → 2378 not taken.
✗ Branch 2396 → 2514 not taken.
✗ Branch 2764 → 2746 not taken.
✗ Branch 2764 → 2882 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23179 → 23084 not taken.
✗ Branch 23179 → 23847 not taken.
✓ Branch 24991 → 24896 taken 12006 times.
✓ Branch 24991 → 25659 taken 5758 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5164 → 5141 not taken.
✗ Branch 5164 → 5327 not taken.
✗ Branch 5632 → 5609 not taken.
✗ Branch 5632 → 5795 not taken.
14363731 for (int i = 1; i < n_edges; i++) {
1346 9967799 int ne = ne_st + i;
1347 9967799 std::array<int, 4> rot_adjs{4 * (ne-1) + 3, 4 * (ne-1) + 2, 4 * (ne+1) + 1, 4 * (ne+1) + 0};
1348
4/20
None:
✗ Branch 189 → 190 not taken.
✗ Branch 189 → 193 not taken.
✗ Branch 239 → 240 not taken.
✗ Branch 239 → 243 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10593 → 10594 not taken.
✗ Branch 10593 → 10604 not taken.
✓ Branch 12141 → 12142 taken 5758 times.
✓ Branch 12141 → 12152 taken 6248 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2378 → 2379 not taken.
✗ Branch 2378 → 2382 not taken.
✗ Branch 2746 → 2747 not taken.
✗ Branch 2746 → 2750 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23085 → 23086 not taken.
✗ Branch 23085 → 23096 not taken.
✓ Branch 24897 → 24898 taken 5758 times.
✓ Branch 24897 → 24908 taken 6248 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5141 → 5142 not taken.
✗ Branch 5141 → 5145 not taken.
✗ Branch 5609 → 5610 not taken.
✗ Branch 5609 → 5613 not taken.
9990831 if (ne-1 == ne_st) { rot_adjs[0] = 4 * ne_st + 1, rot_adjs[1] = 4 * ne_st + 0; }
1349
4/20
None:
✗ Branch 193 → 194 not taken.
✗ Branch 193 → 197 not taken.
✗ Branch 243 → 244 not taken.
✗ Branch 243 → 247 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10604 → 10605 not taken.
✗ Branch 10604 → 10616 not taken.
✓ Branch 12152 → 12153 taken 5758 times.
✓ Branch 12152 → 12164 taken 6248 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2382 → 2383 not taken.
✗ Branch 2382 → 2386 not taken.
✗ Branch 2750 → 2751 not taken.
✗ Branch 2750 → 2754 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23096 → 23097 not taken.
✗ Branch 23096 → 23108 not taken.
✓ Branch 24908 → 24909 taken 5758 times.
✓ Branch 24908 → 24920 taken 6248 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5145 → 5146 not taken.
✗ Branch 5145 → 5149 not taken.
✗ Branch 5613 → 5614 not taken.
✗ Branch 5613 → 5617 not taken.
9990831 if (ne+1 == ne_en) { rot_adjs[2] = 4 * ne_st + 3, rot_adjs[3] = 4 * ne_st + 2; }
1350 9991811 set_ne(ne, {nv_st + i - 1, nv_st + i}, {2 * ne - 1, 2 * ne}, rot_adjs);
1351 }
1352 ✗ } else if (cur_type == node_type::R) {
1353 // Bucketsort the children by the midpoint
1354
6/24
None:
✗ Branch 213 → 210 not taken.
✗ Branch 213 → 214 not taken.
✗ Branch 268 → 265 not taken.
✗ Branch 268 → 269 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10690 → 10676 not taken.
✗ Branch 10690 → 10691 not taken.
✓ Branch 12238 → 12224 taken 79146 times.
✓ Branch 12238 → 12239 taken 8526 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 778 → 777 not taken.
✗ Branch 778 → 779 not taken.
✓ Branch 906 → 905 taken 1822257 times.
✓ Branch 906 → 907 taken 940 times.
✗ Branch 2402 → 2399 not taken.
✗ Branch 2402 → 2403 not taken.
✗ Branch 2770 → 2767 not taken.
✗ Branch 2770 → 2771 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23194 → 23180 not taken.
✗ Branch 23194 → 23195 not taken.
✓ Branch 25006 → 24992 taken 79146 times.
✓ Branch 25006 → 25007 taken 8526 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5170 → 5167 not taken.
✗ Branch 5170 → 5171 not taken.
✗ Branch 5638 → 5635 not taken.
✗ Branch 5638 → 5639 not taken.
1998541 for (int nv = nv_st; nv < nv_en; nv++) {
1355 1980549 vert_pos_buf[node_verts[nv].vert] = nv;
1356 }
1357
3/12
None:
✗ Branch 214 → 215 not taken.
✗ Branch 269 → 270 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10696 → 10697 not taken.
✓ Branch 12244 → 12245 taken 8526 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 779 → 780 not taken.
✓ Branch 907 → 908 taken 940 times.
✗ Branch 2403 → 2404 not taken.
✗ Branch 2771 → 2772 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23200 → 23201 not taken.
✓ Branch 25012 → 25013 taken 8526 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5171 → 5172 not taken.
✗ Branch 5639 → 5640 not taken.
17992 cnts_buf.assign(n_verts * 2 - 1, 0);
1358
1/4
✗ Branch 780 → 781 not taken.
✗ Branch 780 → 782 not taken.
✓ Branch 908 → 909 taken 940 times.
✗ Branch 908 → 910 not taken.
17992 ch_buf.clear();
1359
1360 17992 assert(has_cap);
1361
1362 // Cap node_adj bounds
1363 17992 node_adj.bounds[2 * nv_st + 2]++;
1364 17992 node_adj.bounds[2 * nv_en - 1]++;
1365
1366
6/24
None:
✗ Branch 248 → 221 not taken.
✗ Branch 248 → 249 not taken.
✗ Branch 303 → 276 not taken.
✗ Branch 303 → 304 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10864 → 10729 not taken.
✗ Branch 10864 → 10865 not taken.
✓ Branch 12412 → 12277 taken 295178 times.
✓ Branch 12412 → 12413 taken 8526 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 794 → 785 not taken.
✗ Branch 794 → 795 not taken.
✓ Branch 922 → 913 taken 6090517 times.
✓ Branch 922 → 923 taken 940 times.
✗ Branch 2437 → 2410 not taken.
✗ Branch 2437 → 2438 not taken.
✗ Branch 2805 → 2778 not taken.
✗ Branch 2805 → 2806 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23368 → 23233 not taken.
✗ Branch 23368 → 23369 not taken.
✓ Branch 25180 → 25045 taken 295178 times.
✓ Branch 25180 → 25181 taken 8526 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5205 → 5178 not taken.
✗ Branch 5205 → 5206 not taken.
✗ Branch 5673 → 5646 not taken.
✗ Branch 5673 → 5674 not taken.
6698865 for (int i = ch_st; i < ch_en; i++) {
1367
1/4
✗ Branch 785 → 786 not taken.
✗ Branch 785 → 787 not taken.
✗ Branch 913 → 914 not taken.
✓ Branch 913 → 915 taken 6090517 times.
6680873 int item = ch.dat[i];
1368 6680873 assert(item >= 1);
1369 590356 std::array<int, 2> nvs;
1370
6/24
None:
✗ Branch 224 → 225 not taken.
✗ Branch 224 → 228 not taken.
✗ Branch 279 → 280 not taken.
✗ Branch 279 → 283 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10745 → 10746 not taken.
✗ Branch 10745 → 10762 not taken.
✓ Branch 12293 → 12294 taken 62094 times.
✓ Branch 12293 → 12310 taken 233084 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 787 → 788 not taken.
✗ Branch 787 → 789 not taken.
✓ Branch 915 → 916 taken 1820377 times.
✓ Branch 915 → 917 taken 4270140 times.
✗ Branch 2413 → 2414 not taken.
✗ Branch 2413 → 2417 not taken.
✗ Branch 2781 → 2782 not taken.
✗ Branch 2781 → 2785 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23249 → 23250 not taken.
✗ Branch 23249 → 23266 not taken.
✓ Branch 25061 → 25062 taken 62094 times.
✓ Branch 25061 → 25078 taken 233084 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5181 → 5182 not taken.
✗ Branch 5181 → 5185 not taken.
✗ Branch 5649 → 5650 not taken.
✗ Branch 5649 → 5653 not taken.
6680873 if (item < 1 + NV) {
1371 1944565 nvs = {vert_pos_buf[item-1], vert_pos_buf[item-1]};
1372 } else {
1373
1/4
✗ Branch 789 → 790 not taken.
✗ Branch 789 → 791 not taken.
✗ Branch 917 → 918 not taken.
✓ Branch 917 → 919 taken 4270140 times.
5668644 nvs = {vert_pos_buf[item_vs[item][0]], vert_pos_buf[item_vs[item][1]]};
1374 5202476 assert(nvs[0] < nvs[1]);
1375 5202476 node_adj.bounds[2 * nvs[0] + 2]++;
1376 5202476 node_adj.bounds[2 * nvs[1] + 1]++;
1377 }
1378 7861585 int loc = (nvs[0] - nv_st) + (nvs[1] - nv_st);
1379
3/12
None:
✗ Branch 245 → 246 not taken.
✗ Branch 300 → 301 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10851 → 10852 not taken.
✓ Branch 12399 → 12400 taken 295178 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 792 → 793 not taken.
✓ Branch 920 → 921 taken 6090517 times.
✗ Branch 2434 → 2435 not taken.
✗ Branch 2802 → 2803 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23355 → 23356 not taken.
✓ Branch 25167 → 25168 taken 295178 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5202 → 5203 not taken.
✗ Branch 5670 → 5671 not taken.
6680873 ch_buf.emplace_back(loc, item);
1380 6680873 cnts_buf[loc]++;
1381 }
1382 17992 int offset = ch_st;
1383
6/24
None:
✗ Branch 262 → 251 not taken.
✗ Branch 262 → 263 not taken.
✗ Branch 317 → 306 not taken.
✗ Branch 317 → 318 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10885 → 10871 not taken.
✗ Branch 10885 → 10886 not taken.
✓ Branch 12433 → 12419 taken 149766 times.
✓ Branch 12433 → 12434 taken 8526 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 797 → 796 not taken.
✗ Branch 797 → 798 not taken.
✓ Branch 925 → 924 taken 3643574 times.
✓ Branch 925 → 926 taken 940 times.
✗ Branch 2451 → 2440 not taken.
✗ Branch 2451 → 2452 not taken.
✗ Branch 2819 → 2808 not taken.
✗ Branch 2819 → 2820 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23389 → 23375 not taken.
✗ Branch 23389 → 23390 not taken.
✓ Branch 25201 → 25187 taken 149766 times.
✓ Branch 25201 → 25202 taken 8526 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5219 → 5208 not taken.
✗ Branch 5219 → 5220 not taken.
✗ Branch 5687 → 5676 not taken.
✗ Branch 5687 → 5688 not taken.
3995202 for (auto& cnt : cnts_buf) {
1384 3943106 offset += cnt;
1385 3943106 cnt = offset;
1386 }
1387
6/42
None:
✗ Branch 263 → 264 not taken.
✗ Branch 264 → 265 not taken.
✗ Branch 265 → 266 not taken.
✗ Branch 272 → 267 not taken.
✗ Branch 272 → 273 not taken.
✗ Branch 318 → 319 not taken.
✗ Branch 319 → 320 not taken.
✗ Branch 320 → 321 not taken.
✗ Branch 327 → 322 not taken.
✗ Branch 327 → 328 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10949 → 10919 not taken.
✗ Branch 10949 → 10950 not taken.
✓ Branch 12497 → 12467 taken 295178 times.
✓ Branch 12497 → 12498 taken 8526 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 800 → 799 not taken.
✗ Branch 800 → 801 not taken.
✓ Branch 928 → 927 taken 6090517 times.
✓ Branch 928 → 929 taken 940 times.
✗ Branch 2452 → 2453 not taken.
✗ Branch 2453 → 2454 not taken.
✗ Branch 2454 → 2455 not taken.
✗ Branch 2461 → 2456 not taken.
✗ Branch 2461 → 2462 not taken.
✗ Branch 2820 → 2821 not taken.
✗ Branch 2821 → 2822 not taken.
✗ Branch 2822 → 2823 not taken.
✗ Branch 2829 → 2824 not taken.
✗ Branch 2829 → 2830 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23453 → 23423 not taken.
✗ Branch 23453 → 23454 not taken.
✓ Branch 25265 → 25235 taken 295178 times.
✓ Branch 25265 → 25266 taken 8526 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5220 → 5221 not taken.
✗ Branch 5221 → 5222 not taken.
✗ Branch 5222 → 5223 not taken.
✗ Branch 5229 → 5224 not taken.
✗ Branch 5229 → 5230 not taken.
✗ Branch 5688 → 5689 not taken.
✗ Branch 5689 → 5690 not taken.
✗ Branch 5690 → 5691 not taken.
✗ Branch 5697 → 5692 not taken.
✗ Branch 5697 → 5698 not taken.
6750021 for (auto [loc, n] : std::views::reverse(ch_buf)) {
1388 6680873 ch.dat[--cnts_buf[loc]] = n;
1389 }
1390
1391 if constexpr (with_planarity) {
1392 // Set up the reverse mapping for ourselves
1393 8526 int nxt_ne = ne_en;
1394
2/10
None:
✗ Branch 337 → 329 not taken.
✗ Branch 337 → 338 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23508 → 23480 not taken.
✗ Branch 23508 → 23509 not taken.
✓ Branch 25320 → 25292 taken 295178 times.
✓ Branch 25320 → 25321 taken 8526 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5239 → 5231 not taken.
✗ Branch 5239 → 5240 not taken.
✗ Branch 5707 → 5699 not taken.
✗ Branch 5707 → 5708 not taken.
303704 for (int i = ch_en - 1; i >= ch_st; i--) {
1395 295178 int item = ch.dat[i];
1396 295178 assert(item >= 1);
1397
2/10
None:
✗ Branch 332 → 333 not taken.
✗ Branch 332 → 334 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23494 → 23495 not taken.
✗ Branch 23494 → 23496 not taken.
✓ Branch 25306 → 25307 taken 62094 times.
✓ Branch 25306 → 25308 taken 233084 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5234 → 5235 not taken.
✗ Branch 5234 → 5236 not taken.
✗ Branch 5702 → 5703 not taken.
✗ Branch 5702 → 5704 not taken.
295178 if (item < 1 + NV) continue;
1398 233084 nxt_ne--;
1399 233084 rot_edge_ne[item - (1 + NV)] = nxt_ne;
1400 }
1401 8526 assert(nxt_ne == ne_st + 1);
1402 8526 rot_edge_ne[2 * NE] = ne_st;
1403 }
1404 4289072 auto map_rot_edge = [&] [[gnu::always_inline]] (int ve) -> std::array<int, 4> {
1405 ✗ if constexpr (!with_planarity) return {-1, -1, -1, -1};
1406
6/18
None:
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23607 → 23608 not taken.
✗ Branch 23607 → 23609 not taken.
✗ Branch 23609 → 23610 not taken.
✗ Branch 23609 → 23632 not taken.
✗ Branch 23741 → 23742 not taken.
✗ Branch 23741 → 23743 not taken.
✗ Branch 23743 → 23744 not taken.
✗ Branch 23743 → 23766 not taken.
✗ Branch 25419 → 25420 not taken.
✓ Branch 25419 → 25421 taken 233084 times.
✓ Branch 25421 → 25422 taken 7242 times.
✓ Branch 25421 → 25444 taken 225842 times.
✗ Branch 25553 → 25554 not taken.
✓ Branch 25553 → 25555 taken 8526 times.
✓ Branch 25555 → 25556 taken 874 times.
✓ Branch 25555 → 25578 taken 7652 times.
241610 if (!planar) return {-1, -1, -1, -1};
1407 8116 std::array<int, 4> res{};
1408
4/22
None:
✗ Branch 11 → 5 not taken.
✗ Branch 11 → 12 not taken.
✗ Branch 369 → 363 not taken.
✗ Branch 369 → 370 not taken.
✗ Branch 405 → 399 not taken.
✗ Branch 405 → 406 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23630 → 23612 not taken.
✗ Branch 23630 → 23631 not taken.
✗ Branch 23764 → 23746 not taken.
✗ Branch 23764 → 23765 not taken.
✓ Branch 25442 → 25424 taken 28968 times.
✓ Branch 25442 → 25443 taken 7242 times.
✓ Branch 25576 → 25558 taken 3496 times.
✓ Branch 25576 → 25577 taken 874 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5271 → 5265 not taken.
✗ Branch 5271 → 5272 not taken.
✗ Branch 5307 → 5301 not taken.
✗ Branch 5307 → 5308 not taken.
✗ Branch 5739 → 5733 not taken.
✗ Branch 5739 → 5740 not taken.
✗ Branch 5775 → 5769 not taken.
✗ Branch 5775 → 5776 not taken.
40580 for (int z = 0; z < 4; z++) {
1409 32464 int o = quarter_edge_matches[4 * ve + z];
1410 32464 assert(o != -1);
1411 32464 res[z] = (rot_edge_ne[o >> 2] << 2) + (o & 2) + !(z & 1);
1412 }
1413 8116 return res;
1414 };
1415
1416 {
1417 17992 int off = 2 * ne_st;
1418
6/24
None:
✗ Branch 277 → 274 not taken.
✗ Branch 277 → 278 not taken.
✗ Branch 345 → 342 not taken.
✗ Branch 345 → 346 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10990 → 10982 not taken.
✗ Branch 10990 → 10991 not taken.
✓ Branch 12538 → 12530 taken 158292 times.
✓ Branch 12538 → 12539 taken 8526 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 803 → 802 not taken.
✗ Branch 803 → 804 not taken.
✓ Branch 931 → 930 taken 3644514 times.
✓ Branch 931 → 932 taken 940 times.
✗ Branch 2466 → 2463 not taken.
✗ Branch 2466 → 2467 not taken.
✗ Branch 2834 → 2831 not taken.
✗ Branch 2834 → 2835 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23536 → 23528 not taken.
✗ Branch 23536 → 23537 not taken.
✓ Branch 25348 → 25340 taken 158292 times.
✓ Branch 25348 → 25349 taken 8526 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5247 → 5244 not taken.
✗ Branch 5247 → 5248 not taken.
✗ Branch 5715 → 5712 not taken.
✗ Branch 5715 → 5716 not taken.
3979090 for (int i = 2 * nv_st + 1; i <= 2 * nv_en; i++) {
1419 3961098 off += std::exchange(node_adj.bounds[i], off);
1420 }
1421 17992 assert(off == 2 * ne_en);
1422 }
1423
1424 // Fill in node_edges and node_adj.
1425 // Reverse order to get the adj in bracket ordering.
1426 {
1427 // Handle cap as special: it's first in the node_edges, which means it's in the wrong place for the left endpoint.
1428 17992 node_adj.bounds[2 * nv_st + 2]++;
1429
1430 17992 int nxt_ne = ne_en;
1431
6/24
None:
✗ Branch 309 → 282 not taken.
✗ Branch 309 → 310 not taken.
✗ Branch 393 → 350 not taken.
✗ Branch 393 → 394 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 11147 → 11004 not taken.
✗ Branch 11147 → 11148 not taken.
✓ Branch 12695 → 12552 taken 295178 times.
✓ Branch 12695 → 12696 taken 8526 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 813 → 807 not taken.
✗ Branch 813 → 814 not taken.
✓ Branch 941 → 935 taken 6090517 times.
✓ Branch 941 → 942 taken 940 times.
✗ Branch 2498 → 2471 not taken.
✗ Branch 2498 → 2499 not taken.
✗ Branch 2866 → 2839 not taken.
✗ Branch 2866 → 2867 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23732 → 23550 not taken.
✗ Branch 23732 → 23733 not taken.
✓ Branch 25544 → 25362 taken 295178 times.
✓ Branch 25544 → 25545 taken 8526 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5295 → 5252 not taken.
✗ Branch 5295 → 5296 not taken.
✗ Branch 5763 → 5720 not taken.
✗ Branch 5763 → 5764 not taken.
6698865 for (int i = ch_en - 1; i >= ch_st; i--) {
1432
1/4
✗ Branch 807 → 808 not taken.
✗ Branch 807 → 809 not taken.
✗ Branch 935 → 936 not taken.
✓ Branch 935 → 937 taken 6090517 times.
6680873 int item = ch.dat[i];
1433 6680873 assert(item >= 1);
1434
6/24
None:
✗ Branch 285 → 286 not taken.
✗ Branch 285 → 287 not taken.
✗ Branch 353 → 354 not taken.
✗ Branch 353 → 355 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 11018 → 11019 not taken.
✗ Branch 11018 → 11021 not taken.
✓ Branch 12566 → 12567 taken 62094 times.
✓ Branch 12566 → 12569 taken 233084 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 809 → 810 not taken.
✗ Branch 809 → 811 not taken.
✓ Branch 937 → 938 taken 1820377 times.
✓ Branch 937 → 939 taken 4270140 times.
✗ Branch 2474 → 2475 not taken.
✗ Branch 2474 → 2476 not taken.
✗ Branch 2842 → 2843 not taken.
✗ Branch 2842 → 2844 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 23564 → 23565 not taken.
✗ Branch 23564 → 23567 not taken.
✓ Branch 25376 → 25377 taken 62094 times.
✓ Branch 25376 → 25379 taken 233084 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5255 → 5256 not taken.
✗ Branch 5255 → 5257 not taken.
✗ Branch 5723 → 5724 not taken.
✗ Branch 5723 → 5725 not taken.
6680873 if (item < 1 + NV) continue;
1435 4736308 nxt_ne--;
1436 5668644 auto [v0, v1] = item_vs[item];
1437 // TODO: Reuse this from the ch pass?
1438 4736308 std::array<int, 2> nvs = {vert_pos_buf[v0], vert_pos_buf[v1]};
1439 5901728 set_ne(nxt_ne, nvs, {
1440 5202476 node_adj.bounds[2 * nvs[0] + 2]++,
1441 5202476 node_adj.bounds[2 * nvs[1] + 1]++,
1442
0/6
None:
✗ Branch 360 → 361 not taken.
✗ Branch 360 → 362 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5262 → 5263 not taken.
✗ Branch 5262 → 5264 not taken.
✗ Branch 5730 → 5731 not taken.
✗ Branch 5730 → 5732 not taken.
4736308 }, map_rot_edge(item - (1 + NV)));
1443 }
1444 17992 assert(nxt_ne == ne_st + 1);
1445
1446 // Insert the cap / bump its bound
1447
0/6
None:
✗ Branch 396 → 397 not taken.
✗ Branch 396 → 398 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5298 → 5299 not taken.
✗ Branch 5298 → 5300 not taken.
✗ Branch 5766 → 5767 not taken.
✗ Branch 5766 → 5768 not taken.
26518 set_ne(ne_st, {nv_st, nv_en - 1}, {2 * ne_st, 2 * ne_en - 1}, map_rot_edge(2 * NE));
1448 17992 node_adj.bounds[2 * nv_en - 1]++;
1449 }
1450 − } else assert(false);
1451
1452
2/2
✓ Branch 818 → 819 taken 87 times.
✓ Branch 946 → 947 taken 40973228 times.
44365819 int cur_nv = nv_st + (item_vs[cur_item][0] != -1);
1453 42669567 int cur_ne = ne_st + has_cap;
1454
2/8
None:
✗ Branch 327 → 328 not taken.
✗ Branch 427 → 428 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 818 → 819 taken 87 times.
✓ Branch 946 → 947 taken 40973228 times.
✗ Branch 2516 → 2517 not taken.
✗ Branch 2884 → 2885 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5329 → 5330 not taken.
✗ Branch 5797 → 5798 not taken.
44365819 stk.push_back({cur_idx, ch_st, ch_en, cur_nv, cur_ne});
1455 };
1456
1457 40993515 auto start_child = [&] [[gnu::always_inline]] () -> int {
1458
1/2
✗ Branch 825 → 826 not taken.
✓ Branch 825 → 827 taken 40973228 times.
42649280 auto& [cur_idx, ch_idx, ch_en, cur_nv, cur_ne] = stk.back();
1459 42649280 assert(ch_idx < ch_en);
1460
2/2
✓ Branch 827 → 828 taken 14386864 times.
✓ Branch 827 → 829 taken 26586364 times.
42649280 int nxt_item = ch.dat[ch_idx];
1461 42649280 int nxt_idx = nxt_unassigned_idx;
1462 42649280 ch.dat[ch_idx] = nxt_idx;
1463 42649280 par[nxt_idx] = cur_idx;
1464 42649280 int nxt_ne = node_nes.bounds[nxt_idx];
1465
6/12
None:
✗ Branch 9 → 10 not taken.
✗ Branch 9 → 12 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 11349 → 11350 taken 101000 times.
✓ Branch 11349 → 11363 taken 737026 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 827 → 828 taken 14386864 times.
✓ Branch 827 → 829 taken 26586364 times.
✗ Branch 2544 → 2545 not taken.
✗ Branch 2544 → 2547 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 23972 → 23973 taken 101000 times.
✓ Branch 23972 → 23986 taken 737026 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5357 → 5358 not taken.
✗ Branch 5357 → 5360 not taken.
42649280 if (nxt_item < 1 + NV) {
1466 14588864 vert_par_nv[nxt_idx] = cur_nv++;
1467
9/30
None:
✗ Branch 13 → 14 not taken.
✗ Branch 13 → 17 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 15 → 17 not taken.
✗ Branch 18 → 19 not taken.
✗ Branch 18 → 22 not taken.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 11371 → 11372 taken 737026 times.
✗ Branch 11371 → 11408 not taken.
✓ Branch 11380 → 11381 taken 670246 times.
✓ Branch 11380 → 11408 taken 66780 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 829 → 830 taken 26586364 times.
✗ Branch 829 → 832 not taken.
✓ Branch 830 → 831 taken 21365761 times.
✓ Branch 830 → 832 taken 5220603 times.
✗ Branch 2548 → 2549 not taken.
✗ Branch 2548 → 2552 not taken.
✗ Branch 2550 → 2551 not taken.
✗ Branch 2550 → 2552 not taken.
✗ Branch 2553 → 2554 not taken.
✗ Branch 2553 → 2557 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 23994 → 23995 taken 737026 times.
✗ Branch 23994 → 24031 not taken.
✓ Branch 24003 → 24004 taken 670246 times.
✓ Branch 24003 → 24031 taken 66780 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5361 → 5362 not taken.
✗ Branch 5361 → 5365 not taken.
✗ Branch 5363 → 5364 not taken.
✗ Branch 5363 → 5365 not taken.
✗ Branch 5366 → 5367 not taken.
✗ Branch 5366 → 5370 not taken.
28060416 } else if (types[cur_idx] != node_type::F && types[cur_idx] != node_type::V) {
1468 22706253 node_edges[cur_ne].twin_ne = nxt_ne;
1469 22706253 node_edges[nxt_ne].twin_ne = cur_ne;
1470 22706253 cur_ne++;
1471 }
1472
1473 42649280 ch_idx++;
1474 ✗ return nxt_item;
1475 };
1476
1477 40993602 auto pop_item = [&] [[gnu::always_inline]] () -> void {
1478
1/2
✗ Branch 822 → 823 not taken.
✓ Branch 822 → 824 taken 40973315 times.
42669567 auto [cur_idx, ch_idx, ch_en, cur_nv, cur_ne] = stk.back(); stk.pop_back();
1479 42669567 assert(ch_idx == ch_en);
1480
2/2
✓ Branch 824 → 820 taken 40973228 times.
✓ Branch 824 → 948 taken 87 times.
42669567 subtree_end[cur_idx] = nxt_unassigned_idx;
1481 };
1482
1483
1/2
✗ Branch 709 → 710 not taken.
✓ Branch 709 → 722 taken 87 times.
20287 par[nxt_unassigned_idx] = -1;
1484 20287 push_item(ROOT_ITEM);
1485 while (true) {
1486
6/10
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 11268 → 11269 taken 848126 times.
✓ Branch 11268 → 11292 taken 838026 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 821 → 822 taken 40973315 times.
✓ Branch 821 → 825 taken 40973228 times.
✗ Branch 2527 → 2528 not taken.
✗ Branch 2527 → 2537 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 23891 → 23892 taken 848126 times.
✓ Branch 23891 → 23915 taken 838026 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5340 → 5341 not taken.
✗ Branch 5340 → 5350 not taken.
85318847 if (stk.back().ch_idx == stk.back().ch_end) {
1487 42669567 pop_item();
1488
6/10
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 11291 → 11259 taken 838026 times.
✓ Branch 11291 → 12807 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 824 → 820 taken 40973228 times.
✓ Branch 824 → 948 taken 87 times.
✗ Branch 2535 → 2536 not taken.
✗ Branch 2535 → 2893 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 23914 → 23882 taken 838026 times.
✓ Branch 23914 → 25694 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5348 → 5349 not taken.
✗ Branch 5348 → 5806 not taken.
42669567 if (stk.empty()) break;
1489 } else {
1490
1/2
✗ Branch 832 → 833 not taken.
✓ Branch 832 → 835 taken 40973228 times.
85298560 push_item(start_child());
1491 }
1492 }
1493
1494 20287 assert(nxt_unassigned_idx == tot_items);
1495 20287 assert(ch.bounds.back() == int(ch.dat.size()));
1496 20287 assert(node_nvs.bounds.back() == int(node_verts.size()));
1497 20287 assert(node_nes.bounds.back() == int(node_edges.size()));
1498 20287 assert(node_adj.bounds.back() == int(node_adj.dat.size()));
1499
1500 // Rewrite node_vertices to the correct index
1501
6/10
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 12850 → 12837 taken 1457782 times.
✓ Branch 12850 → 12851 taken 10100 times.
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 960 → 959 taken 62338965 times.
✓ Branch 960 → 961 taken 87 times.
✗ Branch 2926 → 2914 not taken.
✗ Branch 2926 → 2927 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 25737 → 25724 taken 1457782 times.
✓ Branch 25737 → 25738 taken 10100 times.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5839 → 5827 not taken.
✗ Branch 5839 → 5840 not taken.
65274816 for (auto& v : node_verts) {
1502 65254529 v.vert = vert_index[v.vert];
1503 }
1504
1505
0/52
std::conditional<false, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<false>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2969 → 2970 not taken.
✗ Branch 2969 → 2971 not taken.
✗ Branch 2971 → 2972 not taken.
✗ Branch 2971 → 2973 not taken.
✗ Branch 2973 → 2974 not taken.
✗ Branch 2973 → 2975 not taken.
✗ Branch 2975 → 2976 not taken.
✗ Branch 2975 → 2977 not taken.
✗ Branch 2977 → 2978 not taken.
✗ Branch 2977 → 2979 not taken.
✗ Branch 2979 → 2980 not taken.
✗ Branch 2979 → 2981 not taken.
✗ Branch 2981 → 2982 not taken.
✗ Branch 2981 → 2983 not taken.
✗ Branch 2983 → 2984 not taken.
✗ Branch 2983 → 2985 not taken.
✗ Branch 2985 → 2986 not taken.
✗ Branch 2985 → 2987 not taken.
✗ Branch 2987 → 2988 not taken.
✗ Branch 2987 → 2989 not taken.
✗ Branch 2989 → 2990 not taken.
✗ Branch 2989 → 2991 not taken.
✗ Branch 2991 → 2992 not taken.
✗ Branch 2991 → 2993 not taken.
✗ Branch 2993 → 2994 not taken.
✗ Branch 2993 → 2995 not taken.
std::conditional<true, wala::planar_spqr_tree, wala::spqr_tree>::type wala::spqr_tree::build_impl<true>(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, bool, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5882 → 5883 not taken.
✗ Branch 5882 → 5884 not taken.
✗ Branch 5884 → 5885 not taken.
✗ Branch 5884 → 5886 not taken.
✗ Branch 5886 → 5887 not taken.
✗ Branch 5886 → 5888 not taken.
✗ Branch 5888 → 5889 not taken.
✗ Branch 5888 → 5890 not taken.
✗ Branch 5890 → 5891 not taken.
✗ Branch 5890 → 5892 not taken.
✗ Branch 5892 → 5893 not taken.
✗ Branch 5892 → 5894 not taken.
✗ Branch 5894 → 5895 not taken.
✗ Branch 5894 → 5896 not taken.
✗ Branch 5896 → 5897 not taken.
✗ Branch 5896 → 5898 not taken.
✗ Branch 5898 → 5899 not taken.
✗ Branch 5898 → 5900 not taken.
✗ Branch 5900 → 5901 not taken.
✗ Branch 5900 → 5902 not taken.
✗ Branch 5902 → 5903 not taken.
✗ Branch 5902 → 5904 not taken.
✗ Branch 5904 → 5905 not taken.
✗ Branch 5904 → 5906 not taken.
✗ Branch 5906 → 5907 not taken.
✗ Branch 5906 → 5908 not taken.
20287 spqr_tree res{
1506 ✗ std::move(vert_index),
1507 ✗ std::move(edge_index),
1508 ✗ std::move(edge_flipped),
1509 ✗ std::move(par),
1510 ✗ std::move(subtree_end),
1511 ✗ std::move(types),
1512 ✗ std::move(orig_id),
1513 ✗ std::move(ch),
1514 ✗ std::move(node_verts),
1515 ✗ std::move(node_nvs),
1516 ✗ std::move(vert_par_nv),
1517 ✗ std::move(node_edges),
1518 ✗ std::move(node_nes),
1519 ✗ std::move(node_adj),
1520 };
1521 if constexpr (with_planarity) {
1522 10100 return planar_spqr_tree{std::move(res), std::move(node_planar), {std::move(ne_rot_adj)}};
1523 } else {
1524
0/2
✗ Branch 2995 → 2996 not taken.
✗ Branch 2995 → 2997 not taken.
10187 return res;
1525 }
1526 20287 }
1527 30387 }
1528
1529 10100 inline std::optional<planar_embedding> planar_embed(const planar_spqr_tree& tree) {
1530 10100 using node_type = planar_spqr_tree::node_type;
1531
1532
2/5
✗ Branch 2 → 3 not taken.
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
✓ Branch 8 → 9 taken 7652 times.
✓ Branch 8 → 12 taken 2448 times.
10100 if (!std::ranges::all_of(tree.node_planar, std::identity{})) {
1533 7652 return std::nullopt;
1534 }
1535
1536 2448 int NE = int(tree.edge_index.size());
1537
1/2
✗ Branch 8 → 9 not taken.
✓ Branch 22 → 23 taken 2448 times.
2448 std::vector<int> rot_adj(4 * NE, -1);
1538 2448 auto link = [&] [[gnu::always_inline]] (int a, int b) -> void {
1539 ✗ assert(a != -1 && b != -1);
1540 59844 assert(rot_adj[a] == -1 && rot_adj[b] == -1);
1541 59844 assert((a & 1) != (b & 1));
1542 59844 rot_adj[a] = b;
1543 59844 rot_adj[b] = a;
1544 46416 };
1545
1546
1/2
✗ Branch 13 → 14 not taken.
✓ Branch 39 → 40 taken 2448 times.
4896 std::vector<std::array<std::array<int, 2>, 2>> outer_e(tree.size(), {{{-1, -1}, {-1, -1}}});
1547
2/4
✗ Branch 390 → 17 not taken.
✗ Branch 390 → 391 not taken.
✓ Branch 1083 → 52 taken 75843 times.
✓ Branch 1083 → 1084 taken 2448 times.
80739 for (int i = tree.size() - 1; i >= 0; i--) {
1548 75843 auto type = tree.types[i];
1549
5/8
✗ Branch 18 → 19 not taken.
✗ Branch 18 → 59 not taken.
✓ Branch 60 → 61 taken 2448 times.
✓ Branch 60 → 168 taken 24480 times.
✓ Branch 60 → 306 taken 29922 times.
✓ Branch 60 → 791 taken 9835 times.
✗ Branch 60 → 1081 not taken.
✓ Branch 60 → 1082 taken 9158 times.
75843 if (type == node_type::F) {
1550
2/4
✗ Branch 57 → 22 not taken.
✗ Branch 57 → 58 not taken.
✓ Branch 164 → 82 taken 8648 times.
✓ Branch 164 → 165 taken 2448 times.
41936 for (int j : tree.ch[i]) {
1551 8648 assert(tree.types[j] == node_type::V);
1552 34592 auto [a, b] = outer_e[j][0];
1553
2/4
✗ Branch 31 → 32 not taken.
✗ Branch 31 → 48 not taken.
✓ Branch 118 → 119 taken 3400 times.
✓ Branch 118 → 149 taken 5248 times.
8648 if (a != -1) {
1554
1/4
✗ Branch 32 → 33 not taken.
✗ Branch 32 → 35 not taken.
✗ Branch 121 → 122 not taken.
✓ Branch 121 → 123 taken 3400 times.
6800 link(a, b);
1555 }
1556 }
1557 ✗ } else if (type == node_type::V) {
1558 24480 std::array<int, 2> qes{-1, -1};
1559
2/4
✗ Branch 106 → 63 not taken.
✗ Branch 106 → 107 not taken.
✓ Branch 294 → 190 taken 11456 times.
✓ Branch 294 → 295 taken 24480 times.
119264 for (int j : tree.ch[i]) {
1560 11456 assert(tree.types[j] == node_type::Q);
1561
2/4
✗ Branch 69 → 70 not taken.
✗ Branch 69 → 73 not taken.
✓ Branch 209 → 210 taken 9074 times.
✓ Branch 209 → 219 taken 2382 times.
22912 if (qes[0] == -1) {
1562 18148 qes = outer_e[j][0];
1563 } else {
1564
1/4
✗ Branch 77 → 78 not taken.
✗ Branch 77 → 80 not taken.
✗ Branch 235 → 236 not taken.
✓ Branch 235 → 237 taken 2382 times.
9528 link(qes[1], outer_e[j][0][0]);
1565 9528 qes[1] = outer_e[j][0][1];
1566 }
1567 }
1568 48960 outer_e[i][0] = qes;
1569 ✗ } else if (type == node_type::Q) {
1570 29922 int e = tree.orig_id[i];
1571 29922 bool flip = tree.edge_flipped[e];
1572 29922 std::array<std::array<int, 2>, 2> qes = {{{4 * e + 2 * flip + 0, 4 * e + 2 * flip + 1}, {4 * e + 2 * !flip + 0, 4 * e + 2 * !flip + 1}}};
1573
2/4
✗ Branch 115 → 116 not taken.
✗ Branch 115 → 118 not taken.
✓ Branch 345 → 346 taken 18466 times.
✓ Branch 345 → 350 taken 11456 times.
89766 if (tree.ch[i].empty()) {
1574 // Just return ourselves
1575 18466 outer_e[i] = qes;
1576 } else {
1577 22912 int j = tree.ch[i][0];
1578
2/4
✗ Branch 121 → 122 not taken.
✗ Branch 121 → 148 not taken.
✓ Branch 378 → 379 taken 3224 times.
✓ Branch 378 → 453 taken 8232 times.
11456 if (tree.types[j] == node_type::O) {
1579
1/4
✗ Branch 126 → 127 not taken.
✗ Branch 126 → 129 not taken.
✗ Branch 397 → 398 not taken.
✓ Branch 397 → 399 taken 3224 times.
16120 link(qes[0][1], qes[1][0]);
1580 19344 outer_e[i][0] = {qes[0][0], qes[1][1]};
1581 } else {
1582
2/4
✗ Branch 149 → 150 not taken.
✗ Branch 149 → 201 not taken.
✓ Branch 461 → 462 taken 2298 times.
✓ Branch 461 → 601 taken 5934 times.
8232 if (tree.types[j] != node_type::I) {
1583
1/4
✗ Branch 155 → 156 not taken.
✗ Branch 155 → 158 not taken.
✗ Branch 482 → 483 not taken.
✓ Branch 482 → 484 taken 2298 times.
11490 link(qes[0][1], outer_e[j][0][0]);
1584 11490 qes[0][1] = outer_e[j][0][1];
1585
1/4
✗ Branch 180 → 181 not taken.
✗ Branch 180 → 183 not taken.
✗ Branch 552 → 553 not taken.
✓ Branch 552 → 554 taken 2298 times.
11490 link(qes[1][0], outer_e[j][1][1]);
1586 11490 qes[1][0] = outer_e[j][1][0];
1587 }
1588 8232 {
1589 16464 int k = tree.ch[i][1];
1590
2/4
✗ Branch 206 → 207 not taken.
✗ Branch 206 → 248 not taken.
✓ Branch 632 → 633 taken 3420 times.
✓ Branch 632 → 730 taken 4812 times.
24696 if (outer_e[k][0][0] != -1) {
1591
1/4
✗ Branch 212 → 213 not taken.
✗ Branch 212 → 215 not taken.
✗ Branch 654 → 655 not taken.
✓ Branch 654 → 656 taken 3420 times.
17100 link(qes[1][1], outer_e[k][0][0]);
1592
1/4
✗ Branch 232 → 233 not taken.
✗ Branch 232 → 235 not taken.
✗ Branch 702 → 703 not taken.
✓ Branch 702 → 704 taken 3420 times.
20520 link(qes[1][0], outer_e[k][0][1]);
1593 } else {
1594
1/4
✗ Branch 252 → 253 not taken.
✗ Branch 252 → 255 not taken.
✗ Branch 749 → 750 not taken.
✓ Branch 749 → 751 taken 4812 times.
28872 link(qes[1][1], qes[1][0]);
1595 }
1596 }
1597 24696 outer_e[i][0] = qes[0];
1598 }
1599 }
1600 ✗ } else if (type == node_type::O || type == node_type::I) {
1601 // Do nothing, the Q node handles it
1602 ✗ } else if (type == node_type::P || type == node_type::S || type == node_type::R) {
1603 // Just merge things according to the ne_embedding
1604
2/4
✗ Branch 386 → 280 not taken.
✗ Branch 386 → 387 not taken.
✓ Branch 1080 → 800 taken 143352 times.
✓ Branch 1080 → 1082 taken 9835 times.
153187 for (int ta = 4 * tree.node_nes.bounds[i]; ta < 4 * tree.node_nes.bounds[i+1]; ta++) {
1605 143352 int tb = tree.ne_embedding.rot_adj[ta];
1606
2/4
✗ Branch 281 → 282 not taken.
✗ Branch 281 → 283 not taken.
✓ Branch 808 → 809 taken 71676 times.
✓ Branch 808 → 810 taken 71676 times.
143352 if (tb < ta) continue;
1607
1608 71676 auto tree_qe_to_qe = [&] [[gnu::always_inline]] (int t) -> int {
1609 104012 return outer_e[tree.node_edges[tree.node_edges[t>>2].twin_ne].node][(t >> 1) & 1][t & 1];
1610 71676 };
1611 71676 int qb = tree_qe_to_qe(tb);
1612
2/4
✗ Branch 291 → 292 not taken.
✗ Branch 291 → 296 not taken.
✓ Branch 853 → 854 taken 39340 times.
✓ Branch 853 → 862 taken 32336 times.
71676 if (ta < 4 * (tree.node_nes.bounds[i] + 1)) {
1613 39340 outer_e[i][(ta >> 1) & 1][!(ta & 1)] = qb;
1614 } else {
1615 32336 int qa = tree_qe_to_qe(ta);
1616
4/8
✗ Branch 303 → 304 not taken.
✗ Branch 303 → 366 not taken.
✗ Branch 304 → 305 not taken.
✗ Branch 304 → 366 not taken.
✓ Branch 896 → 897 taken 14522 times.
✓ Branch 896 → 1042 taken 17814 times.
✓ Branch 897 → 898 taken 7600 times.
✓ Branch 897 → 1042 taken 6922 times.
32336 if ((ta & 3) == 2 && (tb & 3) == 1) {
1617 // We're the transition between left and right of a vertex, splice it in here.
1618 15200 int v = tree.node_verts[tree.node_edges[ta >> 2].nvs[1]].vert;
1619
2/4
✗ Branch 311 → 312 not taken.
✗ Branch 311 → 349 not taken.
✓ Branch 935 → 936 taken 2254 times.
✓ Branch 935 → 1014 taken 5346 times.
22800 if (outer_e[v][0][0] != -1) {
1620
1/4
✗ Branch 315 → 316 not taken.
✗ Branch 315 → 318 not taken.
✗ Branch 948 → 949 not taken.
✓ Branch 948 → 950 taken 2254 times.
6762 link(qa, outer_e[v][0][1]);
1621
1/4
✗ Branch 333 → 334 not taken.
✗ Branch 333 → 336 not taken.
✗ Branch 986 → 987 not taken.
✓ Branch 986 → 988 taken 2254 times.
9016 link(qb, outer_e[v][0][0]);
1622 } else {
1623
1/2
✗ Branch 1014 → 1015 not taken.
✓ Branch 1014 → 1016 taken 5346 times.
10692 link(qa, qb);
1624 }
1625 ✗ } else {
1626
1/2
✗ Branch 1042 → 1043 not taken.
✓ Branch 1042 → 1044 taken 24736 times.
49472 link(qa, qb);
1627 }
1628 }
1629 }
1630 − } else assert(false);
1631 }
1632
1633 7344 return planar_embedding{std::move(rot_adj)};
1634 4896 }
1635
1636 10100 inline std::optional<planar_embedding> planar_embed(
1637 int NV,
1638 const std::vector<std::array<int, 2>>& edges,
1639 std::span<const int> vert_order,
1640 std::span<const int> edge_order
1641 ) {
1642 // std::min is by reference, which breaks some optimizations
1643
2/4
auto wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(auto:1&, auto:2)#1}::operator()<int, int>(int&, int) const:
✓ Branch 4 → 5 taken 95168 times.
✓ Branch 4 → 8 taken 379142 times.
auto wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(auto:1&, auto:2)#1}::operator()<int, int>(int&, int) const:
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
484410 auto setmin = [](auto& a, auto b) { if (b < a) a = b; };
1644
1645 10100 int NE = int(edges.size());
1646
1/2
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 11 → 12 taken 10100 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 3 → 4 not taken.
10100 auto [roots, outedges] = lowval_storted_skeleton_t::build(NV, edges, vert_order, edge_order);
1647
1648 // Phase 2: do the big ear-decomposition-like walk
1649
1650 // We're going to build a tree of all SPQR *nodes* + all original *vertices* (collectively *items*).
1651 // Vertices will hang off the first SPQR node containing them, and blocks will be rooted at a topmost Q node for the top edge.
1652
1653 // Quarter edges for planar embedding building.
1654 // Each edge has 4 entries by 4 * edge_id + 2 * source_vert + is_cw (is_cw is arbitrary)
1655
1/2
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 16 → 17 taken 10100 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 6 → 7 not taken.
10100 std::vector<int> quarter_edge_matches(4 * NE, -1);
1656
1657 10100 {
1658 10100 int nxt_edge_idx = 0; // Counts backedges only
1659
1/2
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 21 → 22 taken 10100 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 8 → 9 not taken.
10100 std::vector<int> postorder_edges; postorder_edges.reserve(NE);
1660
1/2
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 25 → 26 taken 10100 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 11 → 12 not taken.
10100 std::vector<bool> postorder_flip(NE+1, false);
1661
1662
1/2
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 30 → 31 taken 10100 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 15 → 16 not taken.
10100 std::vector<int> first_occurrence(NV); // First backedge to this depth
1663
1664
1/2
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 36 → 37 taken 10100 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 19 → 20 not taken.
10100 std::vector<int> edge_top_depths(NE, -1);
1665
1666 10100 struct tstack_planarity_side_t {
1667 // For each side, store pointers to the "linked lists" of the edges inside.
1668 // v[0] is the outer / longer edges and v[1] is the inner / shorter edges, matching the outside-in sort order.
1669
1670 // bot_ends are the outer/innermost exposed pieces of the walk down the ear in the tree (they're connected to the bottommost/topmost vertices of the tree path)
1671 std::array<int, 2> bot_ends{-1, -1};
1672 struct top_t {
1673 int end = -1;
1674 int depth = -1;
1675 };
1676 // top_ends are the outer/innermost exposed backedges
1677 // depths should be increasing going inwards
1678 std::array<top_t, 2> tops{top_t{-1, -1}, top_t{-1, -1}};
1679 };
1680 10100 struct tstack_planarity_t {
1681 // The convention is that sides[0].tops[0].depth == top_depth, i.e. at least one minimal return lives on side 0
1682 std::array<tstack_planarity_side_t, 2> sides;
1683 };
1684 10100 struct tstack_nonplanarity_t {
1685 // TODO: What's the nonplanarity certificate look like?
1686 };
1687 10100 auto merge_planarity = [&] [[gnu::always_inline]] (tstack_planarity_t& a, const tstack_planarity_t& b) -> void {
1688
26/114
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 973 → 743 taken 4728 times.
✓ Branch 973 → 974 taken 2364 times.
✓ Branch 1436 → 1206 taken 17016 times.
✓ Branch 1436 → 1437 taken 8508 times.
✓ Branch 2173 → 1943 taken 17016 times.
✓ Branch 2173 → 2174 taken 8508 times.
✓ Branch 2573 → 2343 taken 2860 times.
✓ Branch 2573 → 2574 taken 1430 times.
✓ Branch 2876 → 2646 taken 29304 times.
✓ Branch 2876 → 2877 taken 14652 times.
✓ Branch 3693 → 3463 taken 56184 times.
✓ Branch 3693 → 3694 taken 28092 times.
✓ Branch 4205 → 3975 taken 12800 times.
✓ Branch 4205 → 4206 taken 6400 times.
✓ Branch 5011 → 4781 taken 58400 times.
✓ Branch 5011 → 5012 taken 29200 times.
✓ Branch 5329 → 5099 taken 28400 times.
✓ Branch 5329 → 5330 taken 14200 times.
✓ Branch 5631 → 5401 taken 28400 times.
✓ Branch 5631 → 5632 taken 14200 times.
✓ Branch 6270 → 6040 taken 476 times.
✓ Branch 6270 → 6271 taken 238 times.
✗ Branch 7318 → 7088 not taken.
✗ Branch 7318 → 7319 not taken.
✗ Branch 7781 → 7551 not taken.
✗ Branch 7781 → 7782 not taken.
✓ Branch 8518 → 8288 taken 77980 times.
✓ Branch 8518 → 8519 taken 38990 times.
✗ Branch 8918 → 8688 not taken.
✗ Branch 8918 → 8919 not taken.
✗ Branch 9221 → 8991 not taken.
✗ Branch 9221 → 9222 not taken.
✗ Branch 10038 → 9808 not taken.
✗ Branch 10038 → 10039 not taken.
✗ Branch 10550 → 10320 not taken.
✗ Branch 10550 → 10551 not taken.
✗ Branch 11356 → 11126 not taken.
✗ Branch 11356 → 11357 not taken.
✗ Branch 11674 → 11444 not taken.
✗ Branch 11674 → 11675 not taken.
✗ Branch 11976 → 11746 not taken.
✗ Branch 11976 → 11977 not taken.
✓ Branch 12615 → 12385 taken 177540 times.
✓ Branch 12615 → 12616 taken 88770 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t&, wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t const&)#1}::operator()(wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t&, wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t const&) const:
✗ Branch 37 → 3 not taken.
✗ Branch 37 → 38 not taken.
✗ Branch 50 → 16 not taken.
✗ Branch 50 → 51 not taken.
✗ Branch 75 → 41 not taken.
✗ Branch 75 → 76 not taken.
✗ Branch 161 → 127 not taken.
✗ Branch 161 → 162 not taken.
✗ Branch 192 → 158 not taken.
✗ Branch 192 → 193 not taken.
✗ Branch 278 → 244 not taken.
✗ Branch 278 → 279 not taken.
✗ Branch 302 → 268 not taken.
✗ Branch 302 → 303 not taken.
✗ Branch 387 → 353 not taken.
✗ Branch 387 → 388 not taken.
✗ Branch 419 → 385 not taken.
✗ Branch 419 → 420 not taken.
✗ Branch 440 → 406 not taken.
✗ Branch 440 → 441 not taken.
✗ Branch 504 → 470 not taken.
✗ Branch 504 → 505 not taken.
✗ Branch 557 → 523 not taken.
✗ Branch 557 → 558 not taken.
✗ Branch 635 → 601 not taken.
✗ Branch 635 → 636 not taken.
✗ Branch 749 → 715 not taken.
✗ Branch 749 → 750 not taken.
✗ Branch 752 → 718 not taken.
✗ Branch 752 → 753 not taken.
✗ Branch 866 → 832 not taken.
✗ Branch 866 → 867 not taken.
✗ Branch 943 → 909 not taken.
✗ Branch 943 → 944 not taken.
✗ Branch 1001 → 967 not taken.
✗ Branch 1001 → 1002 not taken.
✗ Branch 1053 → 1019 not taken.
✗ Branch 1053 → 1054 not taken.
✗ Branch 1060 → 1026 not taken.
✗ Branch 1060 → 1061 not taken.
✗ Branch 1118 → 1084 not taken.
✗ Branch 1118 → 1119 not taken.
✗ Branch 1170 → 1136 not taken.
✗ Branch 1170 → 1171 not taken.
✗ Branch 1183 → 1149 not taken.
✗ Branch 1183 → 1184 not taken.
✗ Branch 1300 → 1266 not taken.
✗ Branch 1300 → 1301 not taken.
✗ Branch 1500 → 1466 not taken.
✗ Branch 1500 → 1501 not taken.
✗ Branch 1586 → 1552 not taken.
✗ Branch 1586 → 1587 not taken.
✗ Branch 1727 → 1693 not taken.
✗ Branch 1727 → 1728 not taken.
✗ Branch 1812 → 1778 not taken.
✗ Branch 1812 → 1813 not taken.
✗ Branch 1865 → 1831 not taken.
✗ Branch 1865 → 1866 not taken.
✗ Branch 2060 → 2026 not taken.
✗ Branch 2060 → 2061 not taken.
✗ Branch 2174 → 2140 not taken.
✗ Branch 2174 → 2175 not taken.
✗ Branch 2368 → 2334 not taken.
✗ Branch 2368 → 2369 not taken.
✗ Branch 2426 → 2392 not taken.
✗ Branch 2426 → 2427 not taken.
✗ Branch 2478 → 2444 not taken.
✗ Branch 2478 → 2479 not taken.
✗ Branch 2608 → 2574 not taken.
✗ Branch 2608 → 2609 not taken.
766656 for (int z = 0; z < 2; z++) {
1689 511104 auto& as = a.sides[z];
1690 511104 const auto& bs = b.sides[z];
1691 // If there's no bottom edges, then we must be an isolated vertex, so we can end early.
1692
17/114
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 761 → 762 taken 4728 times.
✗ Branch 761 → 972 not taken.
✓ Branch 1224 → 1225 taken 17016 times.
✗ Branch 1224 → 1435 not taken.
✓ Branch 1961 → 1962 taken 8508 times.
✓ Branch 1961 → 2172 taken 8508 times.
✓ Branch 2361 → 2362 taken 2860 times.
✗ Branch 2361 → 2572 not taken.
✓ Branch 2664 → 2665 taken 29304 times.
✗ Branch 2664 → 2875 not taken.
✓ Branch 3481 → 3482 taken 56184 times.
✗ Branch 3481 → 3692 not taken.
✓ Branch 3993 → 3994 taken 12800 times.
✗ Branch 3993 → 4204 not taken.
✓ Branch 4799 → 4800 taken 58400 times.
✗ Branch 4799 → 5010 not taken.
✓ Branch 5117 → 5118 taken 28400 times.
✗ Branch 5117 → 5328 not taken.
✓ Branch 5419 → 5420 taken 28400 times.
✗ Branch 5419 → 5630 not taken.
✓ Branch 6058 → 6059 taken 238 times.
✓ Branch 6058 → 6269 taken 238 times.
✗ Branch 7106 → 7107 not taken.
✗ Branch 7106 → 7317 not taken.
✗ Branch 7569 → 7570 not taken.
✗ Branch 7569 → 7780 not taken.
✓ Branch 8306 → 8307 taken 38990 times.
✓ Branch 8306 → 8517 taken 38990 times.
✗ Branch 8706 → 8707 not taken.
✗ Branch 8706 → 8917 not taken.
✗ Branch 9009 → 9010 not taken.
✗ Branch 9009 → 9220 not taken.
✗ Branch 9826 → 9827 not taken.
✗ Branch 9826 → 10037 not taken.
✗ Branch 10338 → 10339 not taken.
✗ Branch 10338 → 10549 not taken.
✗ Branch 11144 → 11145 not taken.
✗ Branch 11144 → 11355 not taken.
✗ Branch 11462 → 11463 not taken.
✗ Branch 11462 → 11673 not taken.
✗ Branch 11764 → 11765 not taken.
✗ Branch 11764 → 11975 not taken.
✓ Branch 12403 → 12404 taken 88770 times.
✓ Branch 12403 → 12614 taken 88770 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t&, wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t const&)#1}::operator()(wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t&, wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t const&) const:
✗ Branch 6 → 7 not taken.
✗ Branch 6 → 36 not taken.
✗ Branch 19 → 20 not taken.
✗ Branch 19 → 49 not taken.
✗ Branch 44 → 45 not taken.
✗ Branch 44 → 74 not taken.
✗ Branch 130 → 131 not taken.
✗ Branch 130 → 160 not taken.
✗ Branch 161 → 162 not taken.
✗ Branch 161 → 191 not taken.
✗ Branch 247 → 248 not taken.
✗ Branch 247 → 277 not taken.
✗ Branch 271 → 272 not taken.
✗ Branch 271 → 301 not taken.
✗ Branch 356 → 357 not taken.
✗ Branch 356 → 386 not taken.
✗ Branch 388 → 389 not taken.
✗ Branch 388 → 418 not taken.
✗ Branch 409 → 410 not taken.
✗ Branch 409 → 439 not taken.
✗ Branch 473 → 474 not taken.
✗ Branch 473 → 503 not taken.
✗ Branch 526 → 527 not taken.
✗ Branch 526 → 556 not taken.
✗ Branch 604 → 605 not taken.
✗ Branch 604 → 634 not taken.
✗ Branch 718 → 719 not taken.
✗ Branch 718 → 748 not taken.
✗ Branch 721 → 722 not taken.
✗ Branch 721 → 751 not taken.
✗ Branch 835 → 836 not taken.
✗ Branch 835 → 865 not taken.
✗ Branch 912 → 913 not taken.
✗ Branch 912 → 942 not taken.
✗ Branch 970 → 971 not taken.
✗ Branch 970 → 1000 not taken.
✗ Branch 1022 → 1023 not taken.
✗ Branch 1022 → 1052 not taken.
✗ Branch 1029 → 1030 not taken.
✗ Branch 1029 → 1059 not taken.
✗ Branch 1087 → 1088 not taken.
✗ Branch 1087 → 1117 not taken.
✗ Branch 1139 → 1140 not taken.
✗ Branch 1139 → 1169 not taken.
✗ Branch 1152 → 1153 not taken.
✗ Branch 1152 → 1182 not taken.
✗ Branch 1269 → 1270 not taken.
✗ Branch 1269 → 1299 not taken.
✗ Branch 1469 → 1470 not taken.
✗ Branch 1469 → 1499 not taken.
✗ Branch 1555 → 1556 not taken.
✗ Branch 1555 → 1585 not taken.
✗ Branch 1696 → 1697 not taken.
✗ Branch 1696 → 1726 not taken.
✗ Branch 1781 → 1782 not taken.
✗ Branch 1781 → 1811 not taken.
✗ Branch 1834 → 1835 not taken.
✗ Branch 1834 → 1864 not taken.
✗ Branch 2029 → 2030 not taken.
✗ Branch 2029 → 2059 not taken.
✗ Branch 2143 → 2144 not taken.
✗ Branch 2143 → 2173 not taken.
✗ Branch 2337 → 2338 not taken.
✗ Branch 2337 → 2367 not taken.
✗ Branch 2395 → 2396 not taken.
✗ Branch 2395 → 2425 not taken.
✗ Branch 2447 → 2448 not taken.
✗ Branch 2447 → 2477 not taken.
✗ Branch 2577 → 2578 not taken.
✗ Branch 2577 → 2607 not taken.
1022208 if (bs.bot_ends[0] == -1) {
1693 // Do nothing
1694
24/114
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 769 → 770 taken 2364 times.
✓ Branch 769 → 775 taken 2364 times.
✓ Branch 1232 → 1233 taken 13524 times.
✓ Branch 1232 → 1238 taken 3492 times.
✓ Branch 1969 → 1970 taken 7154 times.
✓ Branch 1969 → 1975 taken 1354 times.
✓ Branch 2369 → 2370 taken 2482 times.
✓ Branch 2369 → 2375 taken 378 times.
✓ Branch 2672 → 2673 taken 13222 times.
✓ Branch 2672 → 2678 taken 16082 times.
✓ Branch 3489 → 3490 taken 28118 times.
✓ Branch 3489 → 3495 taken 28066 times.
✓ Branch 4001 → 4002 taken 5906 times.
✓ Branch 4001 → 4007 taken 6894 times.
✓ Branch 4807 → 4808 taken 29132 times.
✓ Branch 4807 → 4813 taken 29268 times.
✓ Branch 5125 → 5126 taken 14200 times.
✓ Branch 5125 → 5131 taken 14200 times.
✓ Branch 5427 → 5428 taken 22882 times.
✓ Branch 5427 → 5433 taken 5518 times.
✗ Branch 6066 → 6067 not taken.
✓ Branch 6066 → 6072 taken 238 times.
✗ Branch 7114 → 7115 not taken.
✗ Branch 7114 → 7120 not taken.
✗ Branch 7577 → 7578 not taken.
✗ Branch 7577 → 7583 not taken.
✓ Branch 8314 → 8315 taken 28004 times.
✓ Branch 8314 → 8320 taken 10986 times.
✗ Branch 8714 → 8715 not taken.
✗ Branch 8714 → 8720 not taken.
✗ Branch 9017 → 9018 not taken.
✗ Branch 9017 → 9023 not taken.
✗ Branch 9834 → 9835 not taken.
✗ Branch 9834 → 9840 not taken.
✗ Branch 10346 → 10347 not taken.
✗ Branch 10346 → 10352 not taken.
✗ Branch 11152 → 11153 not taken.
✗ Branch 11152 → 11158 not taken.
✗ Branch 11470 → 11471 not taken.
✗ Branch 11470 → 11476 not taken.
✗ Branch 11772 → 11773 not taken.
✗ Branch 11772 → 11778 not taken.
✗ Branch 12411 → 12412 not taken.
✓ Branch 12411 → 12417 taken 88770 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t&, wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t const&)#1}::operator()(wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t&, wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t const&) const:
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 10 not taken.
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
✗ Branch 46 → 47 not taken.
✗ Branch 46 → 48 not taken.
✗ Branch 132 → 133 not taken.
✗ Branch 132 → 134 not taken.
✗ Branch 163 → 164 not taken.
✗ Branch 163 → 165 not taken.
✗ Branch 249 → 250 not taken.
✗ Branch 249 → 251 not taken.
✗ Branch 273 → 274 not taken.
✗ Branch 273 → 275 not taken.
✗ Branch 358 → 359 not taken.
✗ Branch 358 → 360 not taken.
✗ Branch 390 → 391 not taken.
✗ Branch 390 → 392 not taken.
✗ Branch 411 → 412 not taken.
✗ Branch 411 → 413 not taken.
✗ Branch 475 → 476 not taken.
✗ Branch 475 → 477 not taken.
✗ Branch 528 → 529 not taken.
✗ Branch 528 → 530 not taken.
✗ Branch 606 → 607 not taken.
✗ Branch 606 → 608 not taken.
✗ Branch 720 → 721 not taken.
✗ Branch 720 → 722 not taken.
✗ Branch 723 → 724 not taken.
✗ Branch 723 → 725 not taken.
✗ Branch 837 → 838 not taken.
✗ Branch 837 → 839 not taken.
✗ Branch 914 → 915 not taken.
✗ Branch 914 → 916 not taken.
✗ Branch 972 → 973 not taken.
✗ Branch 972 → 974 not taken.
✗ Branch 1024 → 1025 not taken.
✗ Branch 1024 → 1026 not taken.
✗ Branch 1031 → 1032 not taken.
✗ Branch 1031 → 1033 not taken.
✗ Branch 1089 → 1090 not taken.
✗ Branch 1089 → 1091 not taken.
✗ Branch 1141 → 1142 not taken.
✗ Branch 1141 → 1143 not taken.
✗ Branch 1154 → 1155 not taken.
✗ Branch 1154 → 1156 not taken.
✗ Branch 1271 → 1272 not taken.
✗ Branch 1271 → 1273 not taken.
✗ Branch 1471 → 1472 not taken.
✗ Branch 1471 → 1473 not taken.
✗ Branch 1557 → 1558 not taken.
✗ Branch 1557 → 1559 not taken.
✗ Branch 1698 → 1699 not taken.
✗ Branch 1698 → 1700 not taken.
✗ Branch 1783 → 1784 not taken.
✗ Branch 1783 → 1785 not taken.
✗ Branch 1836 → 1837 not taken.
✗ Branch 1836 → 1838 not taken.
✗ Branch 2031 → 2032 not taken.
✗ Branch 2031 → 2033 not taken.
✗ Branch 2145 → 2146 not taken.
✗ Branch 2145 → 2147 not taken.
✗ Branch 2339 → 2340 not taken.
✗ Branch 2339 → 2341 not taken.
✗ Branch 2397 → 2398 not taken.
✗ Branch 2397 → 2399 not taken.
✗ Branch 2449 → 2450 not taken.
✗ Branch 2449 → 2451 not taken.
✗ Branch 2579 → 2580 not taken.
✗ Branch 2579 → 2581 not taken.
749196 } else if (as.bot_ends[0] == -1) {
1695 166988 as = bs;
1696 } else {
1697 622830 quarter_edge_matches[as.bot_ends[1]] = bs.bot_ends[0];
1698 622830 quarter_edge_matches[bs.bot_ends[0]] = as.bot_ends[1];
1699 622830 as.bot_ends[1] = bs.bot_ends[1];
1700
1701
17/114
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 851 → 852 not taken.
✓ Branch 851 → 972 taken 2364 times.
✗ Branch 1314 → 1315 not taken.
✓ Branch 1314 → 1435 taken 3492 times.
✗ Branch 2051 → 2052 not taken.
✓ Branch 2051 → 2172 taken 1354 times.
✗ Branch 2451 → 2452 not taken.
✓ Branch 2451 → 2572 taken 378 times.
✗ Branch 2754 → 2755 not taken.
✓ Branch 2754 → 2875 taken 16082 times.
✓ Branch 3571 → 3572 taken 17912 times.
✓ Branch 3571 → 3692 taken 10154 times.
✓ Branch 4083 → 4084 taken 342 times.
✓ Branch 4083 → 4204 taken 6552 times.
✓ Branch 4889 → 4890 taken 20330 times.
✓ Branch 4889 → 5010 taken 8938 times.
✓ Branch 5207 → 5208 taken 9814 times.
✓ Branch 5207 → 5328 taken 4386 times.
✓ Branch 5509 → 5510 taken 5518 times.
✗ Branch 5509 → 5630 not taken.
✓ Branch 6148 → 6149 taken 238 times.
✗ Branch 6148 → 6269 not taken.
✗ Branch 7196 → 7197 not taken.
✗ Branch 7196 → 7317 not taken.
✗ Branch 7659 → 7660 not taken.
✗ Branch 7659 → 7780 not taken.
✗ Branch 8396 → 8397 not taken.
✓ Branch 8396 → 8517 taken 10986 times.
✗ Branch 8796 → 8797 not taken.
✗ Branch 8796 → 8917 not taken.
✗ Branch 9099 → 9100 not taken.
✗ Branch 9099 → 9220 not taken.
✗ Branch 9916 → 9917 not taken.
✗ Branch 9916 → 10037 not taken.
✗ Branch 10428 → 10429 not taken.
✗ Branch 10428 → 10549 not taken.
✗ Branch 11234 → 11235 not taken.
✗ Branch 11234 → 11355 not taken.
✗ Branch 11552 → 11553 not taken.
✗ Branch 11552 → 11673 not taken.
✗ Branch 11854 → 11855 not taken.
✗ Branch 11854 → 11975 not taken.
✓ Branch 12493 → 12494 taken 88770 times.
✗ Branch 12493 → 12614 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t&, wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t const&)#1}::operator()(wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t&, wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t const&) const:
✗ Branch 19 → 20 not taken.
✗ Branch 19 → 36 not taken.
✗ Branch 32 → 33 not taken.
✗ Branch 32 → 49 not taken.
✗ Branch 57 → 58 not taken.
✗ Branch 57 → 74 not taken.
✗ Branch 143 → 144 not taken.
✗ Branch 143 → 160 not taken.
✗ Branch 174 → 175 not taken.
✗ Branch 174 → 191 not taken.
✗ Branch 260 → 261 not taken.
✗ Branch 260 → 277 not taken.
✗ Branch 284 → 285 not taken.
✗ Branch 284 → 301 not taken.
✗ Branch 369 → 370 not taken.
✗ Branch 369 → 386 not taken.
✗ Branch 401 → 402 not taken.
✗ Branch 401 → 418 not taken.
✗ Branch 422 → 423 not taken.
✗ Branch 422 → 439 not taken.
✗ Branch 486 → 487 not taken.
✗ Branch 486 → 503 not taken.
✗ Branch 539 → 540 not taken.
✗ Branch 539 → 556 not taken.
✗ Branch 617 → 618 not taken.
✗ Branch 617 → 634 not taken.
✗ Branch 731 → 732 not taken.
✗ Branch 731 → 748 not taken.
✗ Branch 734 → 735 not taken.
✗ Branch 734 → 751 not taken.
✗ Branch 848 → 849 not taken.
✗ Branch 848 → 865 not taken.
✗ Branch 925 → 926 not taken.
✗ Branch 925 → 942 not taken.
✗ Branch 983 → 984 not taken.
✗ Branch 983 → 1000 not taken.
✗ Branch 1035 → 1036 not taken.
✗ Branch 1035 → 1052 not taken.
✗ Branch 1042 → 1043 not taken.
✗ Branch 1042 → 1059 not taken.
✗ Branch 1100 → 1101 not taken.
✗ Branch 1100 → 1117 not taken.
✗ Branch 1152 → 1153 not taken.
✗ Branch 1152 → 1169 not taken.
✗ Branch 1165 → 1166 not taken.
✗ Branch 1165 → 1182 not taken.
✗ Branch 1282 → 1283 not taken.
✗ Branch 1282 → 1299 not taken.
✗ Branch 1482 → 1483 not taken.
✗ Branch 1482 → 1499 not taken.
✗ Branch 1568 → 1569 not taken.
✗ Branch 1568 → 1585 not taken.
✗ Branch 1709 → 1710 not taken.
✗ Branch 1709 → 1726 not taken.
✗ Branch 1794 → 1795 not taken.
✗ Branch 1794 → 1811 not taken.
✗ Branch 1847 → 1848 not taken.
✗ Branch 1847 → 1864 not taken.
✗ Branch 2042 → 2043 not taken.
✗ Branch 2042 → 2059 not taken.
✗ Branch 2156 → 2157 not taken.
✗ Branch 2156 → 2173 not taken.
✗ Branch 2350 → 2351 not taken.
✗ Branch 2350 → 2367 not taken.
✗ Branch 2408 → 2409 not taken.
✗ Branch 2408 → 2425 not taken.
✗ Branch 2460 → 2461 not taken.
✗ Branch 2460 → 2477 not taken.
✗ Branch 2590 → 2591 not taken.
✗ Branch 2590 → 2607 not taken.
415220 if (bs.tops[0].end == -1) {
1702 // Do nothing
1703
10/114
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 860 → 861 not taken.
✗ Branch 860 → 872 not taken.
✗ Branch 1323 → 1324 not taken.
✗ Branch 1323 → 1335 not taken.
✗ Branch 2060 → 2061 not taken.
✗ Branch 2060 → 2072 not taken.
✗ Branch 2460 → 2461 not taken.
✗ Branch 2460 → 2472 not taken.
✗ Branch 2763 → 2764 not taken.
✗ Branch 2763 → 2775 not taken.
✓ Branch 3580 → 3581 taken 3570 times.
✓ Branch 3580 → 3592 taken 14342 times.
✓ Branch 4092 → 4093 taken 158 times.
✓ Branch 4092 → 4104 taken 184 times.
✓ Branch 4898 → 4899 taken 234 times.
✓ Branch 4898 → 4910 taken 20096 times.
✗ Branch 5216 → 5217 not taken.
✓ Branch 5216 → 5228 taken 9814 times.
✓ Branch 5518 → 5519 taken 5518 times.
✗ Branch 5518 → 5530 not taken.
✗ Branch 6157 → 6158 not taken.
✓ Branch 6157 → 6169 taken 238 times.
✗ Branch 7205 → 7206 not taken.
✗ Branch 7205 → 7217 not taken.
✗ Branch 7668 → 7669 not taken.
✗ Branch 7668 → 7680 not taken.
✗ Branch 8405 → 8406 not taken.
✗ Branch 8405 → 8417 not taken.
✗ Branch 8805 → 8806 not taken.
✗ Branch 8805 → 8817 not taken.
✗ Branch 9108 → 9109 not taken.
✗ Branch 9108 → 9120 not taken.
✗ Branch 9925 → 9926 not taken.
✗ Branch 9925 → 9937 not taken.
✗ Branch 10437 → 10438 not taken.
✗ Branch 10437 → 10449 not taken.
✗ Branch 11243 → 11244 not taken.
✗ Branch 11243 → 11255 not taken.
✗ Branch 11561 → 11562 not taken.
✗ Branch 11561 → 11573 not taken.
✗ Branch 11863 → 11864 not taken.
✗ Branch 11863 → 11875 not taken.
✗ Branch 12502 → 12503 not taken.
✓ Branch 12502 → 12514 taken 88770 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t&, wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t const&)#1}::operator()(wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t&, wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t const&) const:
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
✗ Branch 34 → 35 not taken.
✗ Branch 34 → 36 not taken.
✗ Branch 59 → 60 not taken.
✗ Branch 59 → 61 not taken.
✗ Branch 145 → 146 not taken.
✗ Branch 145 → 147 not taken.
✗ Branch 176 → 177 not taken.
✗ Branch 176 → 178 not taken.
✗ Branch 262 → 263 not taken.
✗ Branch 262 → 264 not taken.
✗ Branch 286 → 287 not taken.
✗ Branch 286 → 288 not taken.
✗ Branch 371 → 372 not taken.
✗ Branch 371 → 373 not taken.
✗ Branch 403 → 404 not taken.
✗ Branch 403 → 405 not taken.
✗ Branch 424 → 425 not taken.
✗ Branch 424 → 426 not taken.
✗ Branch 488 → 489 not taken.
✗ Branch 488 → 490 not taken.
✗ Branch 541 → 542 not taken.
✗ Branch 541 → 543 not taken.
✗ Branch 619 → 620 not taken.
✗ Branch 619 → 621 not taken.
✗ Branch 733 → 734 not taken.
✗ Branch 733 → 735 not taken.
✗ Branch 736 → 737 not taken.
✗ Branch 736 → 738 not taken.
✗ Branch 850 → 851 not taken.
✗ Branch 850 → 852 not taken.
✗ Branch 927 → 928 not taken.
✗ Branch 927 → 929 not taken.
✗ Branch 985 → 986 not taken.
✗ Branch 985 → 987 not taken.
✗ Branch 1037 → 1038 not taken.
✗ Branch 1037 → 1039 not taken.
✗ Branch 1044 → 1045 not taken.
✗ Branch 1044 → 1046 not taken.
✗ Branch 1102 → 1103 not taken.
✗ Branch 1102 → 1104 not taken.
✗ Branch 1154 → 1155 not taken.
✗ Branch 1154 → 1156 not taken.
✗ Branch 1167 → 1168 not taken.
✗ Branch 1167 → 1169 not taken.
✗ Branch 1284 → 1285 not taken.
✗ Branch 1284 → 1286 not taken.
✗ Branch 1484 → 1485 not taken.
✗ Branch 1484 → 1486 not taken.
✗ Branch 1570 → 1571 not taken.
✗ Branch 1570 → 1572 not taken.
✗ Branch 1711 → 1712 not taken.
✗ Branch 1711 → 1713 not taken.
✗ Branch 1796 → 1797 not taken.
✗ Branch 1796 → 1798 not taken.
✗ Branch 1849 → 1850 not taken.
✗ Branch 1849 → 1851 not taken.
✗ Branch 2044 → 2045 not taken.
✗ Branch 2044 → 2046 not taken.
✗ Branch 2158 → 2159 not taken.
✗ Branch 2158 → 2160 not taken.
✗ Branch 2352 → 2353 not taken.
✗ Branch 2352 → 2354 not taken.
✗ Branch 2410 → 2411 not taken.
✗ Branch 2410 → 2412 not taken.
✗ Branch 2462 → 2463 not taken.
✗ Branch 2462 → 2464 not taken.
✗ Branch 2592 → 2593 not taken.
✗ Branch 2592 → 2594 not taken.
285848 } else if (as.tops[0].end == -1) {
1704 9480 as.tops = bs.tops;
1705 } else {
1706 // Caller must check that we're planar
1707 400332 assert(as.tops[1].depth <= bs.tops[0].depth);
1708 400332 quarter_edge_matches[as.tops[1].end] = bs.tops[0].end;
1709 400332 quarter_edge_matches[bs.tops[0].end] = as.tops[1].end;
1710 400332 as.tops[1] = bs.tops[1];
1711 }
1712 }
1713 }
1714 10100 };
1715 10100 auto make_edge_planarity = [&] [[gnu::always_inline]] (int e_side, int top_depth, bool is_tree) -> tstack_planarity_t {
1716 295510 edge_top_depths[e_side >> 1] = top_depth;
1717 295510 tstack_planarity_t p;
1718
0/26
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 7 not taken.
✗ Branch 11 → 12 not taken.
✗ Branch 11 → 15 not taken.
✗ Branch 128 → 129 not taken.
✗ Branch 128 → 132 not taken.
✗ Branch 203 → 204 not taken.
✗ Branch 203 → 207 not taken.
✗ Branch 311 → 312 not taken.
✗ Branch 311 → 315 not taken.
✗ Branch 320 → 321 not taken.
✗ Branch 320 → 324 not taken.
✗ Branch 428 → 429 not taken.
✗ Branch 428 → 432 not taken.
✗ Branch 1105 → 1106 not taken.
✗ Branch 1105 → 1109 not taken.
✗ Branch 1222 → 1223 not taken.
✗ Branch 1222 → 1226 not taken.
✗ Branch 1436 → 1437 not taken.
✗ Branch 1436 → 1440 not taken.
✗ Branch 1628 → 1629 not taken.
✗ Branch 1628 → 1632 not taken.
✗ Branch 1736 → 1737 not taken.
✗ Branch 1736 → 1740 not taken.
✗ Branch 2530 → 2531 not taken.
✗ Branch 2530 → 2534 not taken.
295510 if (is_tree) {
1719 75524 p.sides[0].bot_ends = {2 * (e_side ^ 1) + 0, 2 * e_side + 1};
1720 75524 p.sides[1].bot_ends = {2 * (e_side ^ 1) + 1, 2 * e_side + 0};
1721 } else {
1722 515496 p.sides[0].bot_ends = {2 * e_side + 0, 2 * e_side + 1};
1723 515496 p.sides[0].tops = {{{2 * (e_side ^ 1) + 1, top_depth}, {2 * (e_side ^ 1) + 0, top_depth}}};
1724 }
1725 295510 return p;
1726 10100 };
1727 10100 struct tstack_t {
1728 int top_depth = -1;
1729 int first_idx = -1;
1730 tstack_planarity_t planarity;
1731 };
1732
1/2
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 42 → 43 taken 10100 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 21 → 22 not taken.
10100 std::vector<tstack_t> tstack; tstack.reserve(NV + NE);
1733 790848 auto cur_tstack = [&] [[gnu::always_inline]] () -> tstack_t& { return tstack.end()[-1]; };
1734 1372088 auto nxt_tstack = [&] [[gnu::always_inline]] () -> tstack_t& { return tstack.end()[-2]; };
1735
1736 10100 auto push_tstack = [&] [[gnu::always_inline]] (int top_depth, tstack_planarity_t planarity) -> void {
1737
7/29
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 432 → 433 taken 16302 times.
✓ Branch 657 → 658 taken 8508 times.
✗ Branch 1692 → 1693 not taken.
✓ Branch 2223 → 2224 taken 29254 times.
✗ Branch 5914 → 5915 not taken.
✓ Branch 6311 → 6312 taken 7402 times.
✓ Branch 6809 → 6810 taken 65470 times.
✗ Branch 7002 → 7003 not taken.
✓ Branch 8037 → 8038 taken 38990 times.
✗ Branch 8568 → 8569 not taken.
✓ Branch 12259 → 12260 taken 218758 times.
✗ Branch 12656 → 12657 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t)#1}::operator()(int, wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t) const:
✗ Branch 20 → 21 not taken.
✗ Branch 93 → 94 not taken.
✗ Branch 137 → 138 not taken.
✗ Branch 212 → 213 not taken.
✗ Branch 320 → 321 not taken.
✗ Branch 329 → 330 not taken.
✗ Branch 437 → 438 not taken.
✗ Branch 1114 → 1115 not taken.
✗ Branch 1194 → 1195 not taken.
✗ Branch 1231 → 1232 not taken.
✗ Branch 1311 → 1312 not taken.
✗ Branch 1414 → 1415 not taken.
✗ Branch 1445 → 1446 not taken.
✗ Branch 1637 → 1638 not taken.
✗ Branch 1745 → 1746 not taken.
✗ Branch 2539 → 2540 not taken.
✗ Branch 2619 → 2620 not taken.
384684 tstack.emplace_back(top_depth, nxt_edge_idx, planarity);
1738 10100 };
1739 10100 auto push_vert_tstack = [&] [[gnu::always_inline]] (int top_depth) -> void {
1740
6/22
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 424 → 425 taken 16302 times.
✓ Branch 424 → 426 taken 16302 times.
✓ Branch 6303 → 6304 taken 7402 times.
✓ Branch 6303 → 6305 taken 7402 times.
✓ Branch 6801 → 6802 taken 65470 times.
✓ Branch 6801 → 6803 taken 65470 times.
✗ Branch 12648 → 12649 not taken.
✗ Branch 12648 → 12650 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}::operator()(int) const:
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
✗ Branch 66 → 67 not taken.
✗ Branch 66 → 68 not taken.
✗ Branch 91 → 92 not taken.
✗ Branch 91 → 93 not taken.
✗ Branch 1192 → 1193 not taken.
✗ Branch 1192 → 1194 not taken.
✗ Branch 1309 → 1310 not taken.
✗ Branch 1309 → 1311 not taken.
✗ Branch 1412 → 1413 not taken.
✗ Branch 1412 → 1414 not taken.
✗ Branch 2617 → 2618 not taken.
✗ Branch 2617 → 2619 not taken.
178348 push_tstack(top_depth, {});
1741 7402 };
1742 10100 auto push_edge_tstack = [&] [[gnu::always_inline]] (int top_depth, int e_side, bool is_tree) -> int {
1743 591020 push_tstack(top_depth, make_edge_planarity(e_side, top_depth, is_tree));
1744
0/13
✗ Branch 14 → 15 not taken.
✗ Branch 22 → 23 not taken.
✗ Branch 139 → 140 not taken.
✗ Branch 214 → 215 not taken.
✗ Branch 322 → 323 not taken.
✗ Branch 331 → 332 not taken.
✗ Branch 439 → 440 not taken.
✗ Branch 1116 → 1117 not taken.
✗ Branch 1233 → 1234 not taken.
✗ Branch 1447 → 1448 not taken.
✗ Branch 1639 → 1640 not taken.
✗ Branch 1747 → 1748 not taken.
✗ Branch 2541 → 2542 not taken.
591020 postorder_edges.push_back(e_side >> 1);
1745 295510 return nxt_edge_idx++;
1746 10100 };
1747 10100 auto flip_tstack_planarity = [&] [[gnu::always_inline]] (int i) -> void {
1748 6952 tstack_t& a = tstack[i];
1749 6952 postorder_flip[a.first_idx].flip();
1750
7/42
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 3238 → 3239 not taken.
✓ Branch 3238 → 3245 taken 434 times.
✓ Branch 3873 → 3874 taken 4690 times.
✓ Branch 3873 → 3880 taken 1564 times.
✓ Branch 4477 → 4478 taken 70 times.
✓ Branch 4477 → 4484 taken 14 times.
✓ Branch 4602 → 4603 taken 100 times.
✓ Branch 4602 → 4609 taken 80 times.
✗ Branch 9583 → 9584 not taken.
✗ Branch 9583 → 9590 not taken.
✗ Branch 10218 → 10219 not taken.
✗ Branch 10218 → 10225 not taken.
✗ Branch 10822 → 10823 not taken.
✗ Branch 10822 → 10829 not taken.
✗ Branch 10947 → 10948 not taken.
✗ Branch 10947 → 10954 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}::operator()(int) const:
✗ Branch 6 → 7 not taken.
✗ Branch 6 → 8 not taken.
✗ Branch 533 → 534 not taken.
✗ Branch 533 → 535 not taken.
✗ Branch 650 → 651 not taken.
✗ Branch 650 → 652 not taken.
✗ Branch 690 → 691 not taken.
✗ Branch 690 → 692 not taken.
✗ Branch 807 → 808 not taken.
✗ Branch 807 → 809 not taken.
✗ Branch 818 → 819 not taken.
✗ Branch 818 → 820 not taken.
✗ Branch 854 → 855 not taken.
✗ Branch 854 → 856 not taken.
✗ Branch 935 → 936 not taken.
✗ Branch 935 → 937 not taken.
✗ Branch 971 → 972 not taken.
✗ Branch 971 → 973 not taken.
✗ Branch 1958 → 1959 not taken.
✗ Branch 1958 → 1960 not taken.
✗ Branch 2115 → 2116 not taken.
✗ Branch 2115 → 2117 not taken.
✗ Branch 2243 → 2244 not taken.
✗ Branch 2243 → 2245 not taken.
✗ Branch 2279 → 2280 not taken.
✗ Branch 2279 → 2281 not taken.
6952 postorder_flip[(i+1==int(tstack.size())) ? nxt_edge_idx : tstack[i+1].first_idx].flip();
1751 20856 std::swap(a.planarity.sides[0], a.planarity.sides[1]);
1752 6952 };
1753 10100 auto merge_tstack_tops = [&] [[gnu::always_inline]] () -> void {
1754 255552 tstack_t& a = nxt_tstack();
1755 511104 const tstack_t& b = cur_tstack();
1756 255552 setmin(a.top_depth, b.top_depth);
1757 255552 merge_planarity(a.planarity, b.planarity);
1758 255552 tstack.pop_back();
1759 147730 };
1760
1761 10100 struct dfs_stack_t {
1762 bool has_vert_tstack;
1763 int ch_idx;
1764 int ch_end;
1765 int orig_tstack;
1766 };
1767
1/2
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 51 → 52 taken 10100 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 22 → 23 not taken.
10100 std::vector<dfs_stack_t> stk; stk.reserve(NV);
1768
2/4
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 12709 → 56 taken 16302 times.
✓ Branch 12709 → 12710 taken 2448 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2655 → 25 not taken.
✗ Branch 2655 → 2656 not taken.
18750 for (auto rt : roots) {
1769 16302 auto push_vert = [&] [[gnu::always_inline]] (int cur) -> void {
1770 99724 int cur_depth = int(stk.size());
1771
1772 99724 int lo = outedges.bounds[cur];
1773 99724 int hi = outedges.bounds[cur+1];
1774 99724 bool has_vert_tstack;
1775 99724 {
1776 // Find the first same-BCC edge, and check it's type 2 (has lowval2), if so it's the ear tstack and we defer pushing ourselves.
1777 99724 int first_edge = lo;
1778
7/26
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 83 → 84 taken 17022 times.
✓ Branch 83 → 97 taken 16302 times.
✓ Branch 95 → 96 taken 17022 times.
✗ Branch 95 → 97 not taken.
✓ Branch 6460 → 6461 taken 126448 times.
✓ Branch 6460 → 6474 taken 6184 times.
✓ Branch 6472 → 6473 taken 49210 times.
✓ Branch 6472 → 6474 taken 77238 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#3}::operator()(int) const:
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 12 not taken.
✗ Branch 10 → 11 not taken.
✗ Branch 10 → 12 not taken.
✗ Branch 13 → 6 not taken.
✗ Branch 13 → 14 not taken.
✗ Branch 32 → 33 not taken.
✗ Branch 32 → 37 not taken.
✗ Branch 35 → 36 not taken.
✗ Branch 35 → 37 not taken.
✗ Branch 38 → 31 not taken.
✗ Branch 38 → 39 not taken.
✗ Branch 1353 → 1354 not taken.
✗ Branch 1353 → 1358 not taken.
✗ Branch 1356 → 1357 not taken.
✗ Branch 1356 → 1358 not taken.
✗ Branch 1359 → 1352 not taken.
✗ Branch 1359 → 1360 not taken.
243194 while (first_edge < hi && outedges.dat[first_edge].key.is_new_block()) first_edge++;
1779
5/26
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 97 → 98 not taken.
✓ Branch 97 → 109 taken 16302 times.
✗ Branch 108 → 109 not taken.
✗ Branch 108 → 115 not taken.
✓ Branch 6474 → 6475 taken 77238 times.
✓ Branch 6474 → 6486 taken 6184 times.
✓ Branch 6485 → 6486 taken 59286 times.
✓ Branch 6485 → 6492 taken 17952 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#3}::operator()(int) const:
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 19 not taken.
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 65 not taken.
✗ Branch 39 → 40 not taken.
✗ Branch 39 → 44 not taken.
✗ Branch 42 → 43 not taken.
✗ Branch 42 → 44 not taken.
✗ Branch 45 → 46 not taken.
✗ Branch 45 → 90 not taken.
✗ Branch 1360 → 1361 not taken.
✗ Branch 1360 → 1365 not taken.
✗ Branch 1363 → 1364 not taken.
✗ Branch 1363 → 1365 not taken.
✗ Branch 1366 → 1367 not taken.
✗ Branch 1366 → 1411 not taken.
99724 if (first_edge < hi && outedges.dat[first_edge].key.is_type_2()) {
1780 // Move first_edge to the beginning
1781 17952 auto e = outedges.dat[first_edge];
1782 179520 std::move_backward(outedges.dat.begin() + lo, outedges.dat.begin() + first_edge, outedges.dat.begin() + first_edge + 1);
1783 17952 outedges.dat[lo] = e;
1784 17952 has_vert_tstack = false;
1785 } else {
1786 81772 push_vert_tstack(cur_depth);
1787 ✗ has_vert_tstack = true;
1788 }
1789 }
1790
0/3
✗ Branch 72 → 73 not taken.
✗ Branch 97 → 98 not taken.
✗ Branch 1418 → 1419 not taken.
99724 stk.push_back({has_vert_tstack, lo, hi, -1});
1791 99724 };
1792 // return true means jump to start_edge, return false means jump to finish_edge
1793 16302 auto start_edge = [&] [[gnu::always_inline]] () -> std::optional<int> {
1794 341170 int cur_depth = int(stk.size()) - 1;
1795 341170 auto& s = stk.back();
1796 341170 assert(s.ch_idx < s.ch_end);
1797 341170 auto [_, nxt, e_side, key] = outedges.dat[s.ch_idx];
1798 341170 auto [lowval, is_tree, is_type_1] = key.unpack(cur_depth);
1799
1800 341170 if (lowval >= cur_depth || is_type_1) assert(s.has_vert_tstack);
1801
1802 341170 s.orig_tstack = int(tstack.size());
1803
3/8
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 6410 → 6411 not taken.
✓ Branch 6410 → 6412 taken 341170 times.
✓ Branch 6412 → 6413 taken 83422 times.
✓ Branch 6412 → 6433 taken 257748 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 13 → 14 not taken.
✗ Branch 13 → 18 not taken.
✗ Branch 1336 → 1337 not taken.
✗ Branch 1336 → 1341 not taken.
341170 if (is_tree) {
1804 83422 first_occurrence[cur_depth] = NE;
1805 166844 return nxt;
1806 } else {
1807 257748 return std::nullopt;
1808 }
1809 16302 };
1810 16302 auto finish_edge = [&] [[gnu::always_inline]] [[nodiscard]] () -> std::optional<tstack_nonplanarity_t> {
1811 295510 int cur_depth = int(stk.size()) - 1;
1812 295510 auto& s = stk.back();
1813 295510 assert(s.ch_idx < s.ch_end);
1814
1815 295510 auto [_, nxt, e_side, key] = outedges.dat[s.ch_idx];
1816 295510 s.ch_idx++;
1817
1818 295510 auto [lowval, is_tree, is_type_1] = key.unpack(cur_depth);
1819
1820 295510 const int orig_tstack = s.orig_tstack;
1821
1822 295510 auto join_backedges_to_top = [&] [[gnu::always_inline]] () -> void {
1823 // Merge all backedges into the component
1824
6/32
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1139 → 1009 taken 4728 times.
✓ Branch 1139 → 1140 taken 2364 times.
✗ Branch 1871 → 1741 not taken.
✗ Branch 1871 → 1872 not taken.
✓ Branch 3042 → 2912 taken 29304 times.
✓ Branch 3042 → 3043 taken 14652 times.
✗ Branch 7484 → 7354 not taken.
✗ Branch 7484 → 7485 not taken.
✓ Branch 8216 → 8086 taken 77980 times.
✓ Branch 8216 → 8217 taken 38990 times.
✗ Branch 9387 → 9257 not taken.
✗ Branch 9387 → 9388 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const::{lambda()#1}::operator()() const:
✗ Branch 33 → 9 not taken.
✗ Branch 33 → 34 not taken.
✗ Branch 110 → 86 not taken.
✗ Branch 110 → 111 not taken.
✗ Branch 227 → 203 not taken.
✗ Branch 227 → 228 not taken.
✗ Branch 249 → 225 not taken.
✗ Branch 249 → 250 not taken.
✗ Branch 366 → 342 not taken.
✗ Branch 366 → 367 not taken.
✗ Branch 475 → 451 not taken.
✗ Branch 475 → 476 not taken.
✗ Branch 592 → 568 not taken.
✗ Branch 592 → 593 not taken.
✗ Branch 1535 → 1511 not taken.
✗ Branch 1535 → 1536 not taken.
✗ Branch 1674 → 1650 not taken.
✗ Branch 1674 → 1675 not taken.
✗ Branch 1900 → 1876 not taken.
✗ Branch 1900 → 1901 not taken.
336036 for (auto& side : cur_tstack().planarity.sides) {
1825 // in the self-loop case, sides[1].bot_ends[1] == -1; otherwise, it should never be -1
1826
6/32
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1019 → 1020 taken 2364 times.
✓ Branch 1019 → 1021 taken 2364 times.
✗ Branch 1751 → 1752 not taken.
✗ Branch 1751 → 1753 not taken.
✓ Branch 2922 → 2923 taken 15818 times.
✓ Branch 2922 → 2924 taken 13486 times.
✗ Branch 7364 → 7365 not taken.
✗ Branch 7364 → 7366 not taken.
✓ Branch 8096 → 8097 taken 38990 times.
✓ Branch 8096 → 8098 taken 38990 times.
✗ Branch 9267 → 9268 not taken.
✗ Branch 9267 → 9269 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const::{lambda()#1}::operator()() const:
✗ Branch 10 → 11 not taken.
✗ Branch 10 → 12 not taken.
✗ Branch 87 → 88 not taken.
✗ Branch 87 → 89 not taken.
✗ Branch 204 → 205 not taken.
✗ Branch 204 → 206 not taken.
✗ Branch 226 → 227 not taken.
✗ Branch 226 → 228 not taken.
✗ Branch 343 → 344 not taken.
✗ Branch 343 → 345 not taken.
✗ Branch 452 → 453 not taken.
✗ Branch 452 → 454 not taken.
✗ Branch 569 → 570 not taken.
✗ Branch 569 → 571 not taken.
✗ Branch 1512 → 1513 not taken.
✗ Branch 1512 → 1514 not taken.
✗ Branch 1651 → 1652 not taken.
✗ Branch 1651 → 1653 not taken.
✗ Branch 1877 → 1878 not taken.
✗ Branch 1877 → 1879 not taken.
224024 if (side.tops[1].end == -1) continue;
1827 109680 assert(side.bot_ends[1] != -1);
1828 109680 assert(side.tops[0].depth == cur_depth);
1829 109680 assert(side.tops[1].depth == cur_depth);
1830 164520 quarter_edge_matches[side.bot_ends[1]] = side.tops[1].end;
1831 164520 quarter_edge_matches[side.tops[1].end] = side.bot_ends[1];
1832 164520 side.bot_ends[1] = side.tops[0].end;
1833
6/32
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1129 → 1130 taken 2364 times.
✓ Branch 1129 → 1131 taken 2364 times.
✗ Branch 1861 → 1862 not taken.
✗ Branch 1861 → 1863 not taken.
✓ Branch 3032 → 3033 taken 13486 times.
✓ Branch 3032 → 3034 taken 13486 times.
✗ Branch 7474 → 7475 not taken.
✗ Branch 7474 → 7476 not taken.
✓ Branch 8206 → 8207 taken 38990 times.
✓ Branch 8206 → 8208 taken 38990 times.
✗ Branch 9377 → 9378 not taken.
✗ Branch 9377 → 9379 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const::{lambda()#1}::operator()() const:
✗ Branch 30 → 31 not taken.
✗ Branch 30 → 32 not taken.
✗ Branch 107 → 108 not taken.
✗ Branch 107 → 109 not taken.
✗ Branch 224 → 225 not taken.
✗ Branch 224 → 226 not taken.
✗ Branch 246 → 247 not taken.
✗ Branch 246 → 248 not taken.
✗ Branch 363 → 364 not taken.
✗ Branch 363 → 365 not taken.
✗ Branch 472 → 473 not taken.
✗ Branch 472 → 474 not taken.
✗ Branch 589 → 590 not taken.
✗ Branch 589 → 591 not taken.
✗ Branch 1532 → 1533 not taken.
✗ Branch 1532 → 1534 not taken.
✗ Branch 1671 → 1672 not taken.
✗ Branch 1671 → 1673 not taken.
✗ Branch 1897 → 1898 not taken.
✗ Branch 1897 → 1899 not taken.
109680 side.tops = {};
1834 }
1835 295510 };
1836
1837 295510 auto join_bottoms_to_empty = [&] [[gnu::always_inline]] () -> void {
1838 // precondition: side 1 should be the lowval only side
1839 45416 auto& sides = cur_tstack().planarity.sides;
1840 45416 auto& s0 = sides[0];
1841 45416 auto& s1 = sides[1];
1842 68124 quarter_edge_matches[s0.bot_ends[0]] = s1.bot_ends[0];
1843 68124 quarter_edge_matches[s1.bot_ends[0]] = s0.bot_ends[0];
1844 68124 s0.bot_ends[0] = s1.bot_ends[1];
1845
3/22
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1538 → 1539 not taken.
✓ Branch 1538 → 1646 taken 8508 times.
✓ Branch 5757 → 5758 taken 124 times.
✓ Branch 5757 → 5865 taken 14076 times.
✗ Branch 7883 → 7884 not taken.
✗ Branch 7883 → 7991 not taken.
✗ Branch 12102 → 12103 not taken.
✗ Branch 12102 → 12210 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const::{lambda()#2}::operator()() const:
✗ Branch 19 → 20 not taken.
✗ Branch 19 → 37 not taken.
✗ Branch 182 → 183 not taken.
✗ Branch 182 → 200 not taken.
✗ Branch 299 → 300 not taken.
✗ Branch 299 → 317 not taken.
✗ Branch 1082 → 1083 not taken.
✗ Branch 1082 → 1100 not taken.
✗ Branch 1199 → 1200 not taken.
✗ Branch 1199 → 1217 not taken.
✗ Branch 1607 → 1608 not taken.
✗ Branch 1607 → 1625 not taken.
✗ Branch 2507 → 2508 not taken.
✗ Branch 2507 → 2525 not taken.
45416 if (s1.tops[0].end != -1) {
1846 // Caller must have checked that we're planar
1847 248 assert(s1.tops[1].depth == lowval);
1848
1849 // This is always true
1850 248 assert(s1.tops[0].depth == lowval);
1851 372 quarter_edge_matches[s0.tops[0].end] = s1.tops[0].end;
1852 372 quarter_edge_matches[s1.tops[0].end] = s0.tops[0].end;
1853 372 s0.tops[0].end = s1.tops[1].end;
1854 // Already true since the backedge was on side 0
1855 248 assert(s0.tops[0].depth == lowval);
1856 }
1857 22708 s1 = tstack_planarity_side_t{};
1858 318218 };
1859
1860
4/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 614 → 615 taken 8508 times.
✓ Branch 614 → 2181 taken 29254 times.
✓ Branch 6959 → 6960 taken 38990 times.
✓ Branch 6959 → 8526 taken 218758 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 309 not taken.
✗ Branch 125 → 126 not taken.
✗ Branch 125 → 426 not taken.
✗ Branch 1433 → 1434 not taken.
✗ Branch 1433 → 1734 not taken.
295510 if (lowval >= cur_depth) {
1861
4/14
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 615 → 616 not taken.
✓ Branch 615 → 617 taken 8508 times.
✓ Branch 617 → 618 taken 8508 times.
✗ Branch 617 → 1653 not taken.
✗ Branch 6960 → 6961 not taken.
✓ Branch 6960 → 6962 taken 38990 times.
✗ Branch 6962 → 6963 not taken.
✓ Branch 6962 → 7998 taken 38990 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 9 → 10 not taken.
✗ Branch 9 → 202 not taken.
✗ Branch 126 → 127 not taken.
✗ Branch 126 → 319 not taken.
✗ Branch 1434 → 1435 not taken.
✗ Branch 1434 → 1627 not taken.
47498 if (is_tree) {
1862 8508 push_edge_tstack(cur_depth, e_side, true);
1863
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 674 → 677 taken 2364 times.
✓ Branch 674 → 1140 taken 6144 times.
✗ Branch 7019 → 7022 not taken.
✗ Branch 7019 → 7485 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 26 → 27 not taken.
✗ Branch 26 → 113 not taken.
✗ Branch 143 → 144 not taken.
✗ Branch 143 → 230 not taken.
✗ Branch 1451 → 1452 not taken.
✗ Branch 1451 → 1538 not taken.
8508 if (lowval == cur_depth) {
1864 // Merge the backedge
1865 2364 merge_tstack_tops();
1866 2364 join_backedges_to_top();
1867 }
1868 // Merge the vertex
1869 8508 merge_tstack_tops();
1870 17016 join_bottoms_to_empty();
1871 } else {
1872 38990 push_edge_tstack(lowval, e_side, false);
1873 38990 join_backedges_to_top();
1874 }
1875 47498 assert(s.has_vert_tstack);
1876 // Merge into the vertex tstack
1877 47498 merge_tstack_tops();
1878 47498 return std::nullopt;
1879 }
1880
1881
4/14
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2181 → 2182 not taken.
✓ Branch 2181 → 2183 taken 29254 times.
✓ Branch 2183 → 2184 taken 29254 times.
✗ Branch 2183 → 5871 not taken.
✗ Branch 8526 → 8527 not taken.
✓ Branch 8526 → 8528 taken 218758 times.
✗ Branch 8528 → 8529 not taken.
✓ Branch 8528 → 12216 taken 218758 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 309 → 310 not taken.
✗ Branch 309 → 1102 not taken.
✗ Branch 426 → 427 not taken.
✗ Branch 426 → 1219 not taken.
✗ Branch 1734 → 1735 not taken.
✗ Branch 1734 → 2527 not taken.
248012 if (is_tree) {
1882 58508 push_edge_tstack(cur_depth, e_side, true);
1883
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3065 → 2243 taken 15112 times.
✓ Branch 3065 → 3066 taken 28794 times.
✗ Branch 9410 → 8588 not taken.
✗ Branch 9410 → 9411 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 484 → 327 not taken.
✗ Branch 484 → 485 not taken.
✗ Branch 601 → 444 not taken.
✗ Branch 601 → 602 not taken.
✗ Branch 1909 → 1752 not taken.
✗ Branch 1909 → 1910 not taken.
87812 while (nxt_tstack().top_depth >= cur_depth) {
1884
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2265 → 2266 taken 1890 times.
✓ Branch 2265 → 2580 taken 13222 times.
✗ Branch 8610 → 8611 not taken.
✗ Branch 8610 → 8925 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 333 → 334 not taken.
✗ Branch 333 → 392 not taken.
✗ Branch 450 → 451 not taken.
✗ Branch 450 → 509 not taken.
✗ Branch 1758 → 1759 not taken.
✗ Branch 1758 → 1817 not taken.
30224 if (nxt_tstack().top_depth > cur_depth) {
1885
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2276 → 2277 taken 1430 times.
✓ Branch 2276 → 3066 taken 460 times.
✗ Branch 8621 → 8622 not taken.
✗ Branch 8621 → 9411 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 337 → 338 not taken.
✗ Branch 337 → 339 not taken.
✗ Branch 454 → 455 not taken.
✗ Branch 454 → 456 not taken.
✗ Branch 1762 → 1763 not taken.
✗ Branch 1762 → 1764 not taken.
1890 if (tstack.end()[-3].top_depth < cur_depth) {
1886 ✗ break;
1887 }
1888 // Merge the vertex in
1889 2860 merge_tstack_tops();
1890 }
1891
1892 14652 merge_tstack_tops();
1893 58558 join_backedges_to_top();
1894 }
1895
1896
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3095 → 3096 taken 8630 times.
✓ Branch 3095 → 4378 taken 20624 times.
✗ Branch 9440 → 9441 not taken.
✗ Branch 9440 → 10723 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 492 → 493 not taken.
✗ Branch 492 → 794 not taken.
✗ Branch 609 → 610 not taken.
✗ Branch 609 → 911 not taken.
✗ Branch 1917 → 1918 not taken.
✗ Branch 1917 → 2219 not taken.
58508 if (cur_tstack().first_idx > first_occurrence[cur_depth]) {
1897 8630 int source = int(tstack.size()) - 2;
1898
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3117 → 3103 taken 32194 times.
✓ Branch 3117 → 3118 taken 8630 times.
✗ Branch 9462 → 9448 not taken.
✗ Branch 9462 → 9463 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 498 → 495 not taken.
✗ Branch 498 → 499 not taken.
✗ Branch 615 → 612 not taken.
✗ Branch 615 → 616 not taken.
✗ Branch 1923 → 1920 not taken.
✗ Branch 1923 → 1924 not taken.
40824 while (tstack[source].first_idx > first_occurrence[cur_depth]) --source;
1899
1900 // last_top == cur_tstack().top_depth
1901 8630 int last_top = cur_depth;
1902
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3706 → 3119 taken 29690 times.
✓ Branch 3706 → 3707 taken 7032 times.
✗ Branch 10051 → 9464 not taken.
✗ Branch 10051 → 10052 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 641 → 500 not taken.
✗ Branch 641 → 642 not taken.
✗ Branch 758 → 617 not taken.
✗ Branch 758 → 759 not taken.
✗ Branch 2066 → 1925 not taken.
✗ Branch 2066 → 2067 not taken.
36722 while (int(tstack.size()) > source + 2) {
1903
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3141 → 3142 taken 23776 times.
✓ Branch 3141 → 3397 taken 5914 times.
✗ Branch 9486 → 9487 not taken.
✗ Branch 9486 → 9742 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 506 → 507 not taken.
✗ Branch 506 → 587 not taken.
✗ Branch 623 → 624 not taken.
✗ Branch 623 → 704 not taken.
✗ Branch 1931 → 1932 not taken.
✗ Branch 1931 → 2012 not taken.
59380 if (nxt_tstack().top_depth > cur_depth) {
1904 // Vertex or tree edge, no conditions
1905
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3164 → 3165 taken 434 times.
✓ Branch 3164 → 3274 taken 23342 times.
✗ Branch 9509 → 9510 not taken.
✗ Branch 9509 → 9619 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 513 → 514 not taken.
✗ Branch 513 → 544 not taken.
✗ Branch 630 → 631 not taken.
✗ Branch 630 → 661 not taken.
✗ Branch 1938 → 1939 not taken.
✗ Branch 1938 → 1969 not taken.
47552 } else if (nxt_tstack().top_depth == cur_depth) {
1906
1/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 3196 → 3197 not taken.
✓ Branch 3196 → 3201 taken 434 times.
✗ Branch 9541 → 9542 not taken.
✗ Branch 9541 → 9546 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 522 → 523 not taken.
✗ Branch 522 → 528 not taken.
✗ Branch 639 → 640 not taken.
✗ Branch 639 → 645 not taken.
✗ Branch 1947 → 1948 not taken.
✗ Branch 1947 → 1953 not taken.
868 if (nxt_tstack().planarity.sides[1].tops[0].depth != -1) {
1907 // Double-sided to cur_depth, conflicts with cur_tstack()
1908 ✗ assert(last_top < cur_depth);
1909 ✗ return tstack_nonplanarity_t{};
1910 }
1911 // We will put cur_depth on side 1 until the bottom
1912 868 flip_tstack_planarity(int(tstack.size()) - 2);
1913 } else {
1914
4/26
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3305 → 3306 taken 98 times.
✓ Branch 3305 → 3340 taken 23244 times.
✓ Branch 3337 → 3338 taken 76 times.
✓ Branch 3337 → 3340 taken 22 times.
✗ Branch 9650 → 9651 not taken.
✗ Branch 9650 → 9685 not taken.
✗ Branch 9682 → 9683 not taken.
✗ Branch 9682 → 9685 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 552 → 553 not taken.
✗ Branch 552 → 563 not taken.
✗ Branch 561 → 562 not taken.
✗ Branch 561 → 563 not taken.
✗ Branch 564 → 565 not taken.
✗ Branch 564 → 568 not taken.
✗ Branch 669 → 670 not taken.
✗ Branch 669 → 680 not taken.
✗ Branch 678 → 679 not taken.
✗ Branch 678 → 680 not taken.
✗ Branch 681 → 682 not taken.
✗ Branch 681 → 685 not taken.
✗ Branch 1977 → 1978 not taken.
✗ Branch 1977 → 1988 not taken.
✗ Branch 1986 → 1987 not taken.
✗ Branch 1986 → 1988 not taken.
✗ Branch 1989 → 1990 not taken.
✗ Branch 1989 → 1993 not taken.
46782 if (nxt_tstack().planarity.sides[1].tops[0].depth != -1 && nxt_tstack().planarity.sides[1].tops[0].depth != cur_depth) {
1915 // Non-empty on both sides, conflicts with source
1916 76 return tstack_nonplanarity_t{};
1917 }
1918
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3371 → 3372 taken 1522 times.
✓ Branch 3371 → 3374 taken 21744 times.
✗ Branch 9716 → 9717 not taken.
✗ Branch 9716 → 9719 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 576 → 577 not taken.
✗ Branch 576 → 580 not taken.
✗ Branch 693 → 694 not taken.
✗ Branch 693 → 697 not taken.
✗ Branch 2001 → 2002 not taken.
✗ Branch 2001 → 2005 not taken.
46532 if (nxt_tstack().planarity.sides[0].tops[1].depth > last_top) {
1919 // Nonlaminar with cur_tstack()
1920 1522 return tstack_nonplanarity_t{};
1921 }
1922 43488 last_top = nxt_tstack().top_depth;
1923 }
1924 56184 merge_tstack_tops();
1925 }
1926
1927 14064 int t0 = nxt_tstack().planarity.sides[0].tops[1].depth;
1928 14064 int t1 = nxt_tstack().planarity.sides[1].tops[1].depth;
1929 7032 assert(t0 == cur_depth || t1 == cur_depth);
1930
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3777 → 3778 taken 632 times.
✓ Branch 3777 → 3782 taken 6400 times.
✗ Branch 10122 → 10123 not taken.
✗ Branch 10122 → 10127 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 662 → 663 not taken.
✗ Branch 662 → 668 not taken.
✗ Branch 779 → 780 not taken.
✗ Branch 779 → 785 not taken.
✗ Branch 2087 → 2088 not taken.
✗ Branch 2087 → 2093 not taken.
7032 if (std::min(t0, t1) > last_top) {
1931 632 assert(last_top < cur_depth);
1932 632 return tstack_nonplanarity_t{};
1933 }
1934
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3782 → 3783 taken 6254 times.
✓ Branch 3782 → 3909 taken 146 times.
✗ Branch 10127 → 10128 not taken.
✗ Branch 10127 → 10254 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 668 → 669 not taken.
✗ Branch 668 → 701 not taken.
✗ Branch 785 → 786 not taken.
✗ Branch 785 → 818 not taken.
✗ Branch 2093 → 2094 not taken.
✗ Branch 2093 → 2126 not taken.
6400 if (t0 == cur_depth) {
1935 // We need to flip cur_tstack and nxt_tstack relative to each other.
1936 // Flip the one with worse top_depth.
1937
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 3830 → 3831 taken 1564 times.
✓ Branch 3830 → 3838 taken 4690 times.
✗ Branch 10175 → 10176 not taken.
✗ Branch 10175 → 10183 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 681 → 682 not taken.
✗ Branch 681 → 684 not taken.
✗ Branch 798 → 799 not taken.
✗ Branch 798 → 801 not taken.
✗ Branch 2106 → 2107 not taken.
✗ Branch 2106 → 2109 not taken.
25016 flip_tstack_planarity(cur_tstack().top_depth < nxt_tstack().top_depth ? int(tstack.size()) - 2 : int(tstack.size()) - 1);
1938 }
1939 6400 merge_tstack_tops();
1940
1941 // Prune off finished cur-side things
1942
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4373 → 4237 taken 12800 times.
✓ Branch 4373 → 4374 taken 6400 times.
✗ Branch 10718 → 10582 not taken.
✗ Branch 10718 → 10719 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 791 → 760 not taken.
✗ Branch 791 → 792 not taken.
✗ Branch 908 → 877 not taken.
✗ Branch 908 → 909 not taken.
✗ Branch 2216 → 2185 not taken.
✗ Branch 2216 → 2217 not taken.
25600 for (auto& side : cur_tstack().planarity.sides) {
1943 12800 assert(side.bot_ends[1] != -1);
1944
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4370 → 4245 taken 10388 times.
✓ Branch 4370 → 4371 taken 12800 times.
✗ Branch 10715 → 10590 not taken.
✗ Branch 10715 → 10716 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 789 → 764 not taken.
✗ Branch 789 → 790 not taken.
✗ Branch 906 → 881 not taken.
✗ Branch 906 → 907 not taken.
✗ Branch 2214 → 2189 not taken.
✗ Branch 2214 → 2215 not taken.
23188 while (side.tops[1].depth == cur_depth) {
1945 10388 {
1946 // Link these to bot_ends[1]
1947 10388 quarter_edge_matches[side.bot_ends[1]] = side.tops[1].end;
1948 10388 quarter_edge_matches[side.tops[1].end] = side.bot_ends[1];
1949 10388 side.bot_ends[1] = side.tops[1].end ^ 1;
1950 }
1951 10388 side.tops[1].end = std::exchange(quarter_edge_matches[side.bot_ends[1]], -1);
1952
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4316 → 4317 taken 8746 times.
✓ Branch 4316 → 4349 taken 1642 times.
✗ Branch 10661 → 10662 not taken.
✗ Branch 10661 → 10694 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 777 → 778 not taken.
✗ Branch 777 → 784 not taken.
✗ Branch 894 → 895 not taken.
✗ Branch 894 → 901 not taken.
✗ Branch 2202 → 2203 not taken.
✗ Branch 2202 → 2209 not taken.
10388 if (side.tops[1].end != -1) {
1953 8746 quarter_edge_matches[side.tops[1].end] = -1;
1954 8746 side.tops[1].depth = edge_top_depths[side.tops[1].end >> 2];
1955 } else {
1956
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4354 → 4355 taken 1642 times.
✓ Branch 4354 → 4356 taken 1642 times.
✗ Branch 10699 → 10700 not taken.
✗ Branch 10699 → 10701 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 785 → 786 not taken.
✗ Branch 785 → 787 not taken.
✗ Branch 902 → 903 not taken.
✗ Branch 902 → 904 not taken.
✗ Branch 2210 → 2211 not taken.
✗ Branch 2210 → 2212 not taken.
3284 side.tops = {};
1957 }
1958 }
1959 }
1960 }
1961
1962 27024 if (is_type_1) assert(s.has_vert_tstack);
1963
3/14
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4387 → 4388 not taken.
✓ Branch 4387 → 4389 taken 27024 times.
✓ Branch 4389 → 4390 taken 19622 times.
✓ Branch 4389 → 5943 taken 7402 times.
✗ Branch 10732 → 10733 not taken.
✗ Branch 10732 → 10734 not taken.
✗ Branch 10734 → 10735 not taken.
✗ Branch 10734 → 12288 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 797 → 798 not taken.
✗ Branch 797 → 1122 not taken.
✗ Branch 914 → 915 not taken.
✗ Branch 914 → 1239 not taken.
✗ Branch 2222 → 2223 not taken.
✗ Branch 2222 → 2547 not taken.
27024 if (s.has_vert_tstack) {
1964 // NB: tstack[orig_size] is the vertex and tstack[orig_size+1] is the backedge; maybe we should reverse them?
1965 19622 assert(int(tstack.size()) >= orig_tstack + 3);
1966
1967
3/14
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 4398 → 4399 not taken.
✓ Branch 4398 → 4400 taken 19622 times.
✓ Branch 4400 → 4401 taken 14624 times.
✓ Branch 4400 → 5025 taken 4998 times.
✗ Branch 10743 → 10744 not taken.
✗ Branch 10743 → 10745 not taken.
✗ Branch 10745 → 10746 not taken.
✗ Branch 10745 → 11370 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 801 → 802 not taken.
✗ Branch 801 → 950 not taken.
✗ Branch 918 → 919 not taken.
✗ Branch 918 → 1067 not taken.
✗ Branch 2226 → 2227 not taken.
✗ Branch 2226 → 2375 not taken.
19622 if (!is_type_1) {
1968 // The lowval side should be side 1, everything else goes on side 0.
1969 // The exception is tstack[orig_tstack + 2], which could be == lowval on one/both sides,
1970 // but is guaranteed to have *something* > lowval by non-type-1-ness
1971 14624 auto& t = tstack[orig_tstack + 2];
1972 14624 {
1973 14624 assert(t.planarity.sides[0].tops[0].depth == t.top_depth);
1974 14624 assert(t.planarity.sides[0].tops[1].depth != -1);
1975
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4445 → 4446 taken 84 times.
✓ Branch 4445 → 4512 taken 14540 times.
✗ Branch 10790 → 10791 not taken.
✗ Branch 10790 → 10857 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 813 → 814 not taken.
✗ Branch 813 → 829 not taken.
✗ Branch 930 → 931 not taken.
✗ Branch 930 → 946 not taken.
✗ Branch 2238 → 2239 not taken.
✗ Branch 2238 → 2254 not taken.
14624 if (t.planarity.sides[0].tops[1].depth == lowval) {
1976 168 flip_tstack_planarity(orig_tstack + 2);
1977
4/26
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4523 → 4524 taken 1872 times.
✓ Branch 4523 → 4539 taken 12668 times.
✓ Branch 4535 → 4536 taken 1868 times.
✓ Branch 4535 → 4539 taken 4 times.
✗ Branch 10868 → 10869 not taken.
✗ Branch 10868 → 10884 not taken.
✗ Branch 10880 → 10881 not taken.
✗ Branch 10880 → 10884 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 831 → 832 not taken.
✗ Branch 831 → 836 not taken.
✗ Branch 834 → 835 not taken.
✗ Branch 834 → 836 not taken.
✗ Branch 837 → 838 not taken.
✗ Branch 837 → 841 not taken.
✗ Branch 948 → 949 not taken.
✗ Branch 948 → 953 not taken.
✗ Branch 951 → 952 not taken.
✗ Branch 951 → 953 not taken.
✗ Branch 954 → 955 not taken.
✗ Branch 954 → 958 not taken.
✗ Branch 2256 → 2257 not taken.
✗ Branch 2256 → 2261 not taken.
✗ Branch 2259 → 2260 not taken.
✗ Branch 2259 → 2261 not taken.
✗ Branch 2262 → 2263 not taken.
✗ Branch 2262 → 2266 not taken.
14540 } else if (t.planarity.sides[1].tops[1].depth != -1 && t.planarity.sides[1].tops[1].depth != lowval) {
1978 1868 return tstack_nonplanarity_t{};
1979 }
1980 12756 assert(t.planarity.sides[0].tops[1].depth > lowval);
1981 }
1982 12756 int last_top = t.planarity.sides[0].tops[1].depth;
1983
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4714 → 4564 taken 38104 times.
✓ Branch 4714 → 5018 taken 9202 times.
✗ Branch 11059 → 10909 not taken.
✗ Branch 11059 → 11363 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 893 → 848 not taken.
✗ Branch 893 → 894 not taken.
✗ Branch 1010 → 965 not taken.
✗ Branch 1010 → 1011 not taken.
✗ Branch 2318 → 2273 not taken.
✗ Branch 2318 → 2319 not taken.
47306 for (int i = orig_tstack + 3; i < int(tstack.size()); i++) {
1984
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4570 → 4571 taken 180 times.
✓ Branch 4570 → 4638 taken 37924 times.
✗ Branch 10915 → 10916 not taken.
✗ Branch 10915 → 10983 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 849 → 850 not taken.
✗ Branch 849 → 865 not taken.
✗ Branch 966 → 967 not taken.
✗ Branch 966 → 982 not taken.
✗ Branch 2274 → 2275 not taken.
✗ Branch 2274 → 2290 not taken.
38104 if (tstack[i].top_depth == lowval) {
1985 360 flip_tstack_planarity(i);
1986 }
1987
4/26
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4653 → 4654 taken 650 times.
✓ Branch 4653 → 4670 taken 37454 times.
✓ Branch 4669 → 4670 taken 14 times.
✓ Branch 4669 → 4686 taken 636 times.
✗ Branch 10998 → 10999 not taken.
✗ Branch 10998 → 11015 not taken.
✗ Branch 11014 → 11015 not taken.
✗ Branch 11014 → 11031 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 868 → 869 not taken.
✗ Branch 868 → 874 not taken.
✗ Branch 872 → 873 not taken.
✗ Branch 872 → 874 not taken.
✗ Branch 875 → 876 not taken.
✗ Branch 875 → 879 not taken.
✗ Branch 985 → 986 not taken.
✗ Branch 985 → 991 not taken.
✗ Branch 989 → 990 not taken.
✗ Branch 989 → 991 not taken.
✗ Branch 992 → 993 not taken.
✗ Branch 992 → 996 not taken.
✗ Branch 2293 → 2294 not taken.
✗ Branch 2293 → 2299 not taken.
✗ Branch 2297 → 2298 not taken.
✗ Branch 2297 → 2299 not taken.
✗ Branch 2300 → 2301 not taken.
✗ Branch 2300 → 2304 not taken.
38104 if (tstack[i].planarity.sides[1].tops[1].depth != -1 && tstack[i].planarity.sides[1].tops[1].depth != lowval) {
1988 636 return tstack_nonplanarity_t{};
1989 }
1990 37468 int next_top = tstack[i].planarity.sides[0].tops[0].depth;
1991
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4685 → 4688 taken 26614 times.
✓ Branch 4685 → 4707 taken 10854 times.
✗ Branch 11030 → 11033 not taken.
✗ Branch 11030 → 11052 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 882 → 883 not taken.
✗ Branch 882 → 891 not taken.
✗ Branch 999 → 1000 not taken.
✗ Branch 999 → 1008 not taken.
✗ Branch 2307 → 2308 not taken.
✗ Branch 2307 → 2316 not taken.
37468 if (next_top != -1) {
1992
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4688 → 4689 taken 2918 times.
✓ Branch 4688 → 4691 taken 23696 times.
✗ Branch 11033 → 11034 not taken.
✗ Branch 11033 → 11036 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 883 → 884 not taken.
✗ Branch 883 → 887 not taken.
✗ Branch 1000 → 1001 not taken.
✗ Branch 1000 → 1004 not taken.
✗ Branch 2308 → 2309 not taken.
✗ Branch 2308 → 2312 not taken.
26614 if (last_top > next_top) return tstack_nonplanarity_t{};
1993 23696 last_top = tstack[i].planarity.sides[0].tops[1].depth;
1994 }
1995 }
1996
2/10
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 5024 → 4715 taken 29200 times.
✓ Branch 5024 → 5025 taken 9202 times.
✗ Branch 11369 → 11060 not taken.
✗ Branch 11369 → 11370 not taken.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 949 → 895 not taken.
✗ Branch 949 → 950 not taken.
✗ Branch 1066 → 1012 not taken.
✗ Branch 1066 → 1067 not taken.
✗ Branch 2374 → 2320 not taken.
✗ Branch 2374 → 2375 not taken.
38402 while (int(tstack.size()) > orig_tstack + 3) {
1997 58400 merge_tstack_tops();
1998 }
1999 }
2000
2001 14200 assert(int(tstack.size()) == orig_tstack + 3);
2002
2003 // Merge with the backedge
2004 14200 merge_tstack_tops();
2005 // Merge with the vertex
2006 14200 merge_tstack_tops();
2007
2008 28400 assert(cur_tstack().top_depth == lowval);
2009
2010 28400 join_bottoms_to_empty();
2011 }
2012 } else {
2013 218758 assert(is_type_1);
2014 218758 int idx = push_edge_tstack(lowval, e_side, false);
2015 218758 setmin(first_occurrence[lowval], idx);
2016 }
2017
2018
9/30
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 5943 → 5944 not taken.
✓ Branch 5943 → 5945 taken 21602 times.
✓ Branch 5945 → 5946 taken 4998 times.
✓ Branch 5945 → 6277 taken 16604 times.
✓ Branch 5968 → 5969 taken 238 times.
✓ Branch 5968 → 6277 taken 4760 times.
✗ Branch 12288 → 12289 not taken.
✓ Branch 12288 → 12290 taken 218758 times.
✓ Branch 12290 → 12291 taken 218758 times.
✗ Branch 12290 → 12622 not taken.
✓ Branch 12313 → 12314 taken 88770 times.
✓ Branch 12313 → 12622 taken 129988 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 1122 → 1123 not taken.
✗ Branch 1122 → 1131 not taken.
✗ Branch 1129 → 1130 not taken.
✗ Branch 1129 → 1131 not taken.
✗ Branch 1132 → 1133 not taken.
✗ Branch 1132 → 1188 not taken.
✗ Branch 1239 → 1240 not taken.
✗ Branch 1239 → 1248 not taken.
✗ Branch 1246 → 1247 not taken.
✗ Branch 1246 → 1248 not taken.
✗ Branch 1249 → 1250 not taken.
✗ Branch 1249 → 1305 not taken.
✗ Branch 2547 → 2548 not taken.
✗ Branch 2547 → 2556 not taken.
✗ Branch 2554 → 2555 not taken.
✗ Branch 2554 → 2556 not taken.
✗ Branch 2557 → 2558 not taken.
✗ Branch 2557 → 2613 not taken.
464116 if (is_type_1 && nxt_tstack().top_depth == lowval) {
2019 89008 assert(s.has_vert_tstack);
2020 178016 merge_tstack_tops();
2021 }
2022
2023
5/14
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 6278 → 6279 not taken.
✓ Branch 6278 → 6280 taken 21602 times.
✓ Branch 6280 → 6281 taken 7402 times.
✓ Branch 6280 → 6316 taken 14200 times.
✗ Branch 12623 → 12624 not taken.
✓ Branch 12623 → 12625 taken 218758 times.
✗ Branch 12625 → 12626 not taken.
✓ Branch 12625 → 12661 taken 218758 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#5}::operator()() const:
✗ Branch 1188 → 1189 not taken.
✗ Branch 1188 → 1198 not taken.
✗ Branch 1305 → 1306 not taken.
✗ Branch 1305 → 1315 not taken.
✗ Branch 2613 → 2614 not taken.
✗ Branch 2613 → 2623 not taken.
240360 if (!s.has_vert_tstack) {
2024 7402 assert(!is_type_1);
2025 // Throw cur_vert_node onto the tstack so it'll get interleaved correctly
2026 7402 push_vert_tstack(cur_depth);
2027 7402 s.has_vert_tstack = true;
2028 }
2029 240360 return std::nullopt;
2030 16302 };
2031 16302 auto pop_vert = [&] [[gnu::always_inline]] () -> void {
2032 46412 auto& s = stk.back();
2033 46412 assert(s.ch_idx == s.ch_end);
2034 46412 assert(s.has_vert_tstack);
2035 46412 stk.pop_back();
2036 16302 };
2037
2038 32604 push_vert(rt);
2039 387582 while (true) {
2040
2/4
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 540 → 541 taken 46412 times.
✓ Branch 540 → 6362 taken 341170 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 108 → 109 not taken.
✗ Branch 108 → 1325 not taken.
387582 if (stk.back().ch_idx == stk.back().ch_end) {
2041 46412 pop_vert();
2042
2/4
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 562 → 563 taken 37762 times.
✓ Branch 562 → 12675 taken 8650 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 117 → 118 not taken.
✗ Branch 117 → 119 not taken.
46412 if (stk.empty()) break;
2043
2/4
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 6322 → 6327 taken 7652 times.
✓ Branch 6322 → 6361 taken 30110 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1320 → 1322 not taken.
✗ Branch 1320 → 1323 not taken.
75524 if (auto res = finish_edge(); res) return std::nullopt;
2044
2/4
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 6436 → 6437 taken 83422 times.
✓ Branch 6436 → 6908 taken 257748 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1346 → 1347 not taken.
✗ Branch 1346 → 1427 not taken.
682340 } else if (std::optional<int> nxt = start_edge(); nxt) {
2045 166844 push_vert(*nxt);
2046 } else {
2047 − if (auto res = finish_edge(); res) assert(false);
2048 }
2049 }
2050 8650 assert(int(tstack.size()) == 1);
2051 8650 auto s0 = tstack.back().planarity.sides[0];
2052 // Fold the root
2053 8650 int a = s0.bot_ends[0];
2054 8650 int b = s0.bot_ends[1];
2055
2/4
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 12693 → 12694 taken 3402 times.
✓ Branch 12693 → 12701 taken 5248 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2641 → 2642 not taken.
✗ Branch 2641 → 2645 not taken.
8650 if (a != -1) {
2056 3402 quarter_edge_matches[a] = b;
2057 3402 quarter_edge_matches[b] = a;
2058 }
2059 8650 tstack.pop_back();
2060 10100 }
2061 2448 assert(nxt_edge_idx == NE);
2062 2448 {
2063
1/2
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 12718 → 12719 taken 2448 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2660 → 2661 not taken.
2448 std::vector<bool> edge_flip(NE);
2064 2448 {
2065 2448 bool planarity_flip = false;
2066
2/4
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 12735 → 12721 taken 29922 times.
✓ Branch 12735 → 12736 taken 2448 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2669 → 2663 not taken.
✗ Branch 2669 → 2670 not taken.
32370 for (int e = 0; e < NE; e++) {
2067 29922 planarity_flip ^= postorder_flip[e];
2068 29922 edge_flip[postorder_edges[e]] = planarity_flip;
2069 }
2070 2448 planarity_flip ^= postorder_flip[NE];
2071 2448 assert(!planarity_flip);
2072 }
2073
2/4
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 12769 → 12743 taken 29922 times.
✓ Branch 12769 → 12770 taken 2448 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2690 → 2675 not taken.
✗ Branch 2690 → 2691 not taken.
32370 for (int e = 0; e < NE; e++) {
2074
2/4
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 12748 → 12749 taken 3816 times.
✓ Branch 12748 → 12766 taken 26106 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2677 → 2678 not taken.
✗ Branch 2677 → 2684 not taken.
29922 if (edge_flip[e]) {
2075 3816 std::swap(quarter_edge_matches[4*e + 0], quarter_edge_matches[4*e + 1]);
2076 3816 std::swap(quarter_edge_matches[4*e + 2], quarter_edge_matches[4*e + 3]);
2077 }
2078
2/4
wala::planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 12767 → 12759 taken 119688 times.
✓ Branch 12767 → 12768 taken 29922 times.
wala::planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2688 → 2685 not taken.
✗ Branch 2688 → 2689 not taken.
149610 for (int z = 0; z < 4; z++) {
2079 119688 quarter_edge_matches[4*e + z] = (quarter_edge_matches[4*e+z] >> 1 << 1) | !(z & 1);
2080 }
2081 }
2082 2448 }
2083 10100 }
2084 2448 return planar_embedding{std::move(quarter_edge_matches)};
2085 10100 }
2086
2087 10100 inline bool can_planar_embed(
2088 int NV,
2089 const std::vector<std::array<int, 2>>& edges,
2090 std::span<const int> vert_order,
2091 std::span<const int> edge_order
2092 ) {
2093 // std::min is by reference, which breaks some optimizations
2094
2/4
auto wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(auto:1&, auto:2)#1}::operator()<int, int>(int&, int) const:
✓ Branch 4 → 5 taken 61528 times.
✓ Branch 4 → 8 taken 157230 times.
auto wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(auto:1&, auto:2)#1}::operator()<int, int>(int&, int) const:
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
228858 auto setmin = [](auto& a, auto b) { if (b < a) a = b; };
2095
2096 10100 int NE = int(edges.size());
2097
2098
1/2
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 11 → 12 taken 10100 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 3 → 4 not taken.
10100 auto [roots, outedges] = lowval_storted_skeleton_t::build(NV, edges, vert_order, edge_order);
2099
2100 // Phase 2: do the big ear-decomposition-like walk
2101
2102 // We're going to build a tree of all SPQR *nodes* + all original *vertices* (collectively *items*).
2103 // Vertices will hang off the first SPQR node containing them, and blocks will be rooted at a topmost Q node for the top edge.
2104
2105 10100 {
2106 10100 int nxt_edge_idx = 0; // Counts backedges only
2107
2108
1/2
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 15 → 16 taken 10100 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 6 → 7 not taken.
10100 std::vector<int> first_occurrence(NV); // First backedge to this depth
2109
2110 10100 struct tstack_planarity_side_t {
2111 // For each side, store pointers to the "linked lists" of the edges inside.
2112 // v[0] is the outer / longer edges and v[1] is the inner / shorter edges, matching the outside-in sort order.
2113
2114 struct top_t {
2115 int end = -1;
2116 int depth = -1;
2117 };
2118 // top_ends are the outer/innermost exposed backedges
2119 // depths should be increasing going inwards
2120 std::array<top_t, 2> tops{top_t{-1, -1}, top_t{-1, -1}};
2121 };
2122 10100 struct tstack_planarity_t {
2123 // The convention is that sides[0].tops[0].depth == top_depth, i.e. at least one minimal return lives on side 0
2124 std::array<tstack_planarity_side_t, 2> sides;
2125 };
2126
1/2
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 21 → 22 taken 10100 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 10 → 11 not taken.
10100 std::vector<tstack_planarity_side_t::top_t> prev_edge(NE, {-1, -1});
2127 10100 auto merge_planarity_side = [&] [[gnu::always_inline]] (tstack_planarity_side_t& as, const tstack_planarity_side_t& bs) -> void {
2128 // If there's no bottom edges, then we must be an isolated vertex, so we can end early.
2129 // Caller must check that we're planar
2130 98874 assert(as.tops[1].depth <= bs.tops[0].depth);
2131 98874 prev_edge[bs.tops[0].end] = as.tops[1];
2132 98874 as.tops[1] = bs.tops[1];
2133 33856 };
2134 10100 auto make_edge_planarity = [&] [[gnu::always_inline]] (int e, int top_depth, bool is_tree) -> tstack_planarity_t {
2135 248012 tstack_planarity_t p;
2136
0/2
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 5 not taken.
248012 if (!is_tree) {
2137 437516 p.sides[0].tops = {{{e, top_depth}, {e, top_depth}}};
2138 }
2139 248012 return p;
2140 };
2141 10100 struct tstack_t {
2142 int top_depth = -1;
2143 int first_idx = -1;
2144 tstack_planarity_t planarity;
2145 };
2146
1/2
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 27 → 28 taken 10100 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 12 → 13 not taken.
10100 std::vector<tstack_t> tstack; tstack.reserve(NV + NE);
2147 168316 auto cur_tstack = [&] [[gnu::always_inline]] () -> tstack_t& { return tstack.end()[-1]; };
2148 922012 auto nxt_tstack = [&] [[gnu::always_inline]] () -> tstack_t& { return tstack.end()[-2]; };
2149
2150 10100 auto push_tstack = [&] [[gnu::always_inline]] (int top_depth, tstack_planarity_t planarity) -> void {
2151
5/19
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 411 → 412 taken 16302 times.
✓ Branch 626 → 627 taken 29254 times.
✗ Branch 2133 → 2134 not taken.
✓ Branch 2213 → 2214 taken 7402 times.
✓ Branch 2684 → 2685 taken 65470 times.
✗ Branch 2866 → 2867 not taken.
✓ Branch 4373 → 4374 taken 218758 times.
✗ Branch 4453 → 4454 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int, wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t)#1}::operator()(int, wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::tstack_planarity_t) const:
✗ Branch 25 → 26 not taken.
✗ Branch 84 → 85 not taken.
✗ Branch 133 → 134 not taken.
✗ Branch 409 → 410 not taken.
✗ Branch 435 → 436 not taken.
✗ Branch 517 → 518 not taken.
✗ Branch 543 → 544 not taken.
✗ Branch 641 → 642 not taken.
✗ Branch 677 → 678 not taken.
✗ Branch 1061 → 1062 not taken.
✗ Branch 1087 → 1088 not taken.
337186 tstack.emplace_back(top_depth, nxt_edge_idx, planarity);
2152 10100 };
2153 10100 auto push_vert_tstack = [&] [[gnu::always_inline]] (int top_depth) -> void {
2154
6/22
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 403 → 404 taken 16302 times.
✓ Branch 403 → 405 taken 16302 times.
✓ Branch 2205 → 2206 taken 7402 times.
✓ Branch 2205 → 2207 taken 7402 times.
✓ Branch 2676 → 2677 taken 65470 times.
✓ Branch 2676 → 2678 taken 65470 times.
✗ Branch 4445 → 4446 not taken.
✗ Branch 4445 → 4447 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#1}::operator()(int) const:
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
✗ Branch 66 → 67 not taken.
✗ Branch 66 → 68 not taken.
✗ Branch 82 → 83 not taken.
✗ Branch 82 → 84 not taken.
✗ Branch 433 → 434 not taken.
✗ Branch 433 → 435 not taken.
✗ Branch 541 → 542 not taken.
✗ Branch 541 → 543 not taken.
✗ Branch 639 → 640 not taken.
✗ Branch 639 → 641 not taken.
✗ Branch 1085 → 1086 not taken.
✗ Branch 1085 → 1087 not taken.
178348 push_tstack(top_depth, {});
2155 10100 };
2156 10100 auto push_edge_tstack = [&] [[gnu::always_inline]] (int top_depth, int e, bool is_tree) -> int {
2157
0/2
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 5 not taken.
466770 push_tstack(top_depth, make_edge_planarity(e, top_depth, is_tree));
2158 248012 return nxt_edge_idx++;
2159 10100 };
2160
2161 10100 struct dfs_stack_t {
2162 bool has_vert_tstack;
2163 int ch_idx;
2164 int ch_end;
2165 int orig_tstack;
2166 };
2167
1/2
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 34 → 35 taken 10100 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 13 → 14 not taken.
10100 std::vector<dfs_stack_t> stk; stk.reserve(NV);
2168
2/4
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 4470 → 39 taken 16302 times.
✓ Branch 4470 → 4471 taken 2448 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1113 → 16 not taken.
✗ Branch 1113 → 1114 not taken.
18750 for (auto rt : roots) {
2169 16302 auto push_vert = [&] [[gnu::always_inline]] (int cur) -> void {
2170 99724 int cur_depth = int(stk.size());
2171
2172 99724 int lo = outedges.bounds[cur];
2173 99724 int hi = outedges.bounds[cur+1];
2174 99724 bool has_vert_tstack;
2175 99724 {
2176 // Find the first same-BCC edge, and check it's type 2 (has lowval2), if so it's the ear tstack and we defer pushing ourselves.
2177 99724 int first_edge = lo;
2178
7/26
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 66 → 67 taken 17022 times.
✓ Branch 66 → 80 taken 16302 times.
✓ Branch 78 → 79 taken 17022 times.
✗ Branch 78 → 80 not taken.
✓ Branch 2339 → 2340 taken 126448 times.
✓ Branch 2339 → 2353 taken 6184 times.
✓ Branch 2351 → 2352 taken 49210 times.
✓ Branch 2351 → 2353 taken 77238 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}::operator()(int) const:
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 12 not taken.
✗ Branch 10 → 11 not taken.
✗ Branch 10 → 12 not taken.
✗ Branch 13 → 6 not taken.
✗ Branch 13 → 14 not taken.
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 28 not taken.
✗ Branch 26 → 27 not taken.
✗ Branch 26 → 28 not taken.
✗ Branch 29 → 22 not taken.
✗ Branch 29 → 30 not taken.
✗ Branch 580 → 581 not taken.
✗ Branch 580 → 585 not taken.
✗ Branch 583 → 584 not taken.
✗ Branch 583 → 585 not taken.
✗ Branch 586 → 579 not taken.
✗ Branch 586 → 587 not taken.
243194 while (first_edge < hi && outedges.dat[first_edge].key.is_new_block()) first_edge++;
2179
5/26
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 80 → 81 not taken.
✓ Branch 80 → 92 taken 16302 times.
✗ Branch 91 → 92 not taken.
✗ Branch 91 → 98 not taken.
✓ Branch 2353 → 2354 taken 77238 times.
✓ Branch 2353 → 2365 taken 6184 times.
✓ Branch 2364 → 2365 taken 59286 times.
✓ Branch 2364 → 2371 taken 17952 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda(int)#2}::operator()(int) const:
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 19 not taken.
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 19 not taken.
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 65 not taken.
✗ Branch 30 → 31 not taken.
✗ Branch 30 → 35 not taken.
✗ Branch 33 → 34 not taken.
✗ Branch 33 → 35 not taken.
✗ Branch 36 → 37 not taken.
✗ Branch 36 → 81 not taken.
✗ Branch 587 → 588 not taken.
✗ Branch 587 → 592 not taken.
✗ Branch 590 → 591 not taken.
✗ Branch 590 → 592 not taken.
✗ Branch 593 → 594 not taken.
✗ Branch 593 → 638 not taken.
99724 if (first_edge < hi && outedges.dat[first_edge].key.is_type_2()) {
2180 // Move first_edge to the beginning
2181 17952 auto e = outedges.dat[first_edge];
2182 179520 std::move_backward(outedges.dat.begin() + lo, outedges.dat.begin() + first_edge, outedges.dat.begin() + first_edge + 1);
2183 17952 outedges.dat[lo] = e;
2184 17952 has_vert_tstack = false;
2185 } else {
2186 81772 push_vert_tstack(cur_depth);
2187 ✗ has_vert_tstack = true;
2188 }
2189 }
2190
0/3
✗ Branch 72 → 73 not taken.
✗ Branch 88 → 89 not taken.
✗ Branch 645 → 646 not taken.
99724 stk.push_back({has_vert_tstack, lo, hi, -1});
2191 99724 };
2192 // return true means jump to start_edge, return false means jump to finish_edge
2193 16302 auto start_edge = [&] [[gnu::always_inline]] () -> std::optional<int> {
2194 341170 int cur_depth = int(stk.size()) - 1;
2195 341170 auto& s = stk.back();
2196 341170 assert(s.ch_idx < s.ch_end);
2197 341170 auto [_, nxt, e_side, key] = outedges.dat[s.ch_idx];
2198 341170 auto [lowval, is_tree, is_type_1] = key.unpack(cur_depth);
2199
2200 341170 if (lowval >= cur_depth || is_type_1) assert(s.has_vert_tstack);
2201
2202 341170 s.orig_tstack = int(tstack.size());
2203
3/8
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2289 → 2290 not taken.
✓ Branch 2289 → 2291 taken 341170 times.
✓ Branch 2291 → 2292 taken 83422 times.
✓ Branch 2291 → 2312 taken 257748 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#3}::operator()() const:
✗ Branch 13 → 14 not taken.
✗ Branch 13 → 18 not taken.
✗ Branch 563 → 564 not taken.
✗ Branch 563 → 568 not taken.
341170 if (is_tree) {
2204 83422 first_occurrence[cur_depth] = NE;
2205 166844 return nxt;
2206 } else {
2207 257748 return std::nullopt;
2208 }
2209 16302 };
2210 16302 auto finish_edge = [&] [[gnu::always_inline]] [[nodiscard]] () -> bool {
2211 295510 int cur_depth = int(stk.size()) - 1;
2212 295510 auto& s = stk.back();
2213 295510 assert(s.ch_idx < s.ch_end);
2214
2215 295510 auto [_, nxt, e_side, key] = outedges.dat[s.ch_idx];
2216 295510 int e = e_side >> 1;
2217 295510 s.ch_idx++;
2218
2219 295510 auto [lowval, is_tree, is_type_1] = key.unpack(cur_depth);
2220
2221 295510 const int orig_tstack = s.orig_tstack;
2222
2223
4/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 581 → 582 taken 8508 times.
✓ Branch 581 → 607 taken 29254 times.
✓ Branch 2821 → 2822 taken 38990 times.
✓ Branch 2821 → 2847 taken 218758 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 19 not taken.
✗ Branch 116 → 117 not taken.
✗ Branch 116 → 127 not taken.
✗ Branch 660 → 661 not taken.
✗ Branch 660 → 671 not taken.
295510 if (lowval >= cur_depth) {
2224
4/14
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 582 → 583 not taken.
✓ Branch 582 → 584 taken 8508 times.
✓ Branch 584 → 585 taken 8508 times.
✗ Branch 584 → 594 not taken.
✗ Branch 2822 → 2823 not taken.
✓ Branch 2822 → 2824 taken 38990 times.
✗ Branch 2824 → 2825 not taken.
✓ Branch 2824 → 2834 taken 38990 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 9 → 10 not taken.
✗ Branch 9 → 13 not taken.
✗ Branch 117 → 118 not taken.
✗ Branch 117 → 121 not taken.
✗ Branch 661 → 662 not taken.
✗ Branch 661 → 665 not taken.
47498 if (is_tree) {
2225
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 585 → 586 taken 2364 times.
✓ Branch 585 → 590 taken 6144 times.
✗ Branch 2825 → 2826 not taken.
✗ Branch 2825 → 2830 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 10 → 11 not taken.
✗ Branch 10 → 12 not taken.
✗ Branch 118 → 119 not taken.
✗ Branch 118 → 120 not taken.
✗ Branch 662 → 663 not taken.
✗ Branch 662 → 664 not taken.
8508 if (lowval == cur_depth) {
2226 // Delete the backedge
2227 2364 tstack.pop_back();
2228 }
2229 // Delete the vertex
2230 8508 tstack.pop_back();
2231 } else {
2232 }
2233 47498 assert(s.has_vert_tstack);
2234 47498 assert(int(tstack.size()) == orig_tstack);
2235 ✗ return true;
2236 }
2237
2238
4/14
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 607 → 608 not taken.
✓ Branch 607 → 609 taken 29254 times.
✓ Branch 609 → 610 taken 29254 times.
✗ Branch 609 → 2105 not taken.
✗ Branch 2847 → 2848 not taken.
✓ Branch 2847 → 2849 taken 218758 times.
✗ Branch 2849 → 2850 not taken.
✓ Branch 2849 → 4345 taken 218758 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 19 → 20 not taken.
✗ Branch 19 → 402 not taken.
✗ Branch 127 → 128 not taken.
✗ Branch 127 → 510 not taken.
✗ Branch 671 → 672 not taken.
✗ Branch 671 → 1054 not taken.
248012 if (is_tree) {
2239
0/6
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 23 not taken.
✗ Branch 128 → 129 not taken.
✗ Branch 128 → 131 not taken.
✗ Branch 672 → 673 not taken.
✗ Branch 672 → 675 not taken.
29254 push_edge_tstack(cur_depth, e, true);
2240
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 707 → 635 taken 15112 times.
✓ Branch 707 → 708 taken 28794 times.
✗ Branch 2947 → 2875 not taken.
✗ Branch 2947 → 2948 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 50 → 30 not taken.
✗ Branch 50 → 51 not taken.
✗ Branch 158 → 138 not taken.
✗ Branch 158 → 159 not taken.
✗ Branch 702 → 682 not taken.
✗ Branch 702 → 703 not taken.
87812 while (nxt_tstack().top_depth >= cur_depth) {
2241
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 657 → 658 taken 1890 times.
✓ Branch 657 → 681 taken 13222 times.
✗ Branch 2897 → 2898 not taken.
✗ Branch 2897 → 2921 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 36 → 37 not taken.
✗ Branch 36 → 43 not taken.
✗ Branch 144 → 145 not taken.
✗ Branch 144 → 151 not taken.
✗ Branch 688 → 689 not taken.
✗ Branch 688 → 695 not taken.
30224 if (nxt_tstack().top_depth > cur_depth) {
2242
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 676 → 677 taken 1430 times.
✓ Branch 676 → 708 taken 460 times.
✗ Branch 2916 → 2917 not taken.
✗ Branch 2916 → 2948 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 40 → 41 not taken.
✗ Branch 40 → 42 not taken.
✗ Branch 148 → 149 not taken.
✗ Branch 148 → 150 not taken.
✗ Branch 692 → 693 not taken.
✗ Branch 692 → 694 not taken.
3780 if (tstack.end()[-3].top_depth < cur_depth) {
2243 ✗ break;
2244 }
2245 // Merge the vertex in
2246 1430 tstack.pop_back();
2247 }
2248
2249 14652 tstack.pop_back();
2250 }
2251
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 717 → 718 taken 29254 times.
✓ Branch 717 → 719 taken 29254 times.
✗ Branch 2957 → 2958 not taken.
✗ Branch 2957 → 2959 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 58 → 59 not taken.
✗ Branch 58 → 60 not taken.
✗ Branch 166 → 167 not taken.
✗ Branch 166 → 168 not taken.
✗ Branch 710 → 711 not taken.
✗ Branch 710 → 712 not taken.
87762 cur_tstack().planarity = tstack_planarity_t{};
2252
2253
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 774 → 775 taken 8630 times.
✓ Branch 774 → 1619 taken 20624 times.
✗ Branch 3014 → 3015 not taken.
✗ Branch 3014 → 3859 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 67 → 68 not taken.
✗ Branch 67 → 291 not taken.
✗ Branch 175 → 176 not taken.
✗ Branch 175 → 399 not taken.
✗ Branch 719 → 720 not taken.
✗ Branch 719 → 943 not taken.
58508 if (cur_tstack().first_idx > first_occurrence[cur_depth]) {
2254 8630 int source = int(tstack.size()) - 2;
2255
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 796 → 782 taken 32194 times.
✓ Branch 796 → 797 taken 8630 times.
✗ Branch 3036 → 3022 not taken.
✗ Branch 3036 → 3037 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 73 → 70 not taken.
✗ Branch 73 → 74 not taken.
✗ Branch 181 → 178 not taken.
✗ Branch 181 → 182 not taken.
✗ Branch 725 → 722 not taken.
✗ Branch 725 → 726 not taken.
40824 while (tstack[source].first_idx > first_occurrence[cur_depth]) --source;
2256
2257 // last_top == cur_tstack().top_depth
2258 8630 int last_top = cur_depth;
2259 8630 tstack_planarity_side_t cur_planarity = {};
2260
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1111 → 799 taken 29690 times.
✓ Branch 1111 → 1112 taken 7032 times.
✗ Branch 3351 → 3039 not taken.
✗ Branch 3351 → 3352 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 164 → 75 not taken.
✗ Branch 164 → 165 not taken.
✗ Branch 272 → 183 not taken.
✗ Branch 272 → 273 not taken.
✗ Branch 816 → 727 not taken.
✗ Branch 816 → 817 not taken.
36722 while (int(tstack.size()) > source + 2) {
2261
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 821 → 822 taken 23776 times.
✓ Branch 821 → 1101 taken 5914 times.
✗ Branch 3061 → 3062 not taken.
✗ Branch 3061 → 3341 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 81 → 82 not taken.
✗ Branch 81 → 162 not taken.
✗ Branch 189 → 190 not taken.
✗ Branch 189 → 270 not taken.
✗ Branch 733 → 734 not taken.
✗ Branch 733 → 814 not taken.
59380 if (nxt_tstack().top_depth > cur_depth) {
2262 // Vertex or tree edge, no conditions
2263
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 844 → 845 taken 434 times.
✓ Branch 844 → 883 taken 23342 times.
✗ Branch 3084 → 3085 not taken.
✗ Branch 3084 → 3123 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 88 → 89 not taken.
✗ Branch 88 → 101 not taken.
✗ Branch 196 → 197 not taken.
✗ Branch 196 → 209 not taken.
✗ Branch 740 → 741 not taken.
✗ Branch 740 → 753 not taken.
47552 } else if (nxt_tstack().top_depth == cur_depth) {
2264
1/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 880 → 881 not taken.
✓ Branch 880 → 1101 taken 434 times.
✗ Branch 3120 → 3121 not taken.
✗ Branch 3120 → 3341 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 97 → 98 not taken.
✗ Branch 97 → 162 not taken.
✗ Branch 205 → 206 not taken.
✗ Branch 205 → 270 not taken.
✗ Branch 749 → 750 not taken.
✗ Branch 749 → 814 not taken.
1736 if (nxt_tstack().planarity.sides[1].tops[0].depth != -1) {
2265 // Double-sided to cur_depth, conflicts with cur_tstack()
2266 ✗ assert(last_top < cur_depth);
2267 2230 return false;
2268 }
2269 // Throw away the inner edge
2270 } else {
2271
4/26
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 918 → 919 taken 98 times.
✓ Branch 918 → 955 taken 23244 times.
✓ Branch 954 → 955 taken 22 times.
✓ Branch 954 → 1616 taken 76 times.
✗ Branch 3158 → 3159 not taken.
✗ Branch 3158 → 3195 not taken.
✗ Branch 3194 → 3195 not taken.
✗ Branch 3194 → 3856 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 109 → 110 not taken.
✗ Branch 109 → 120 not taken.
✗ Branch 118 → 119 not taken.
✗ Branch 118 → 120 not taken.
✗ Branch 121 → 122 not taken.
✗ Branch 121 → 123 not taken.
✗ Branch 217 → 218 not taken.
✗ Branch 217 → 228 not taken.
✗ Branch 226 → 227 not taken.
✗ Branch 226 → 228 not taken.
✗ Branch 229 → 230 not taken.
✗ Branch 229 → 231 not taken.
✗ Branch 761 → 762 not taken.
✗ Branch 761 → 772 not taken.
✗ Branch 770 → 771 not taken.
✗ Branch 770 → 772 not taken.
✗ Branch 773 → 774 not taken.
✗ Branch 773 → 775 not taken.
93662 if (nxt_tstack().planarity.sides[1].tops[0].depth != -1 && nxt_tstack().planarity.sides[1].tops[0].depth != cur_depth) {
2272 // Non-empty on both sides, conflicts with source
2273 ✗ return false;
2274 }
2275
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 990 → 991 taken 21744 times.
✓ Branch 990 → 1616 taken 1522 times.
✗ Branch 3230 → 3231 not taken.
✗ Branch 3230 → 3856 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 131 → 132 not taken.
✗ Branch 131 → 133 not taken.
✗ Branch 239 → 240 not taken.
✗ Branch 239 → 241 not taken.
✗ Branch 783 → 784 not taken.
✗ Branch 783 → 785 not taken.
93064 if (nxt_tstack().planarity.sides[0].tops[1].depth > last_top) {
2276 // Nonlaminar with cur_tstack()
2277 ✗ return false;
2278 }
2279
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 991 → 992 taken 14326 times.
✓ Branch 991 → 1048 taken 7418 times.
✗ Branch 3231 → 3232 not taken.
✗ Branch 3231 → 3288 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 133 → 134 not taken.
✗ Branch 133 → 147 not taken.
✗ Branch 241 → 242 not taken.
✗ Branch 241 → 255 not taken.
✗ Branch 785 → 786 not taken.
✗ Branch 785 → 799 not taken.
21744 if (last_top < cur_depth) {
2280 42978 auto nxt_planarity = nxt_tstack().planarity.sides[0];
2281 42978 prev_edge[cur_planarity.tops[0].end] = nxt_planarity.tops[1];
2282 42978 cur_planarity.tops[0] = nxt_planarity.tops[0];
2283 } else {
2284 22254 cur_planarity = nxt_tstack().planarity.sides[0];
2285 }
2286 43488 last_top = nxt_tstack().top_depth;
2287 }
2288 28092 tstack.pop_back();
2289 }
2290
2291 28128 int t0 = nxt_tstack().planarity.sides[0].tops[1].depth;
2292 28128 int t1 = nxt_tstack().planarity.sides[1].tops[1].depth;
2293 7032 assert(t0 == cur_depth || t1 == cur_depth);
2294 // Handles -1 correctly
2295
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1191 → 1192 taken 632 times.
✓ Branch 1191 → 1194 taken 6400 times.
✗ Branch 3431 → 3432 not taken.
✗ Branch 3431 → 3434 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 185 → 186 not taken.
✗ Branch 185 → 189 not taken.
✗ Branch 293 → 294 not taken.
✗ Branch 293 → 297 not taken.
✗ Branch 837 → 838 not taken.
✗ Branch 837 → 841 not taken.
7032 if (std::min(t0, t1) > last_top) {
2296 632 assert(last_top < cur_depth);
2297 ✗ return false;
2298 }
2299
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1194 → 1195 taken 5192 times.
✓ Branch 1194 → 1519 taken 1208 times.
✗ Branch 3434 → 3435 not taken.
✗ Branch 3434 → 3759 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 189 → 190 not taken.
✗ Branch 189 → 268 not taken.
✗ Branch 297 → 298 not taken.
✗ Branch 297 → 376 not taken.
✗ Branch 841 → 842 not taken.
✗ Branch 841 → 920 not taken.
6400 if (last_top < cur_depth) {
2300
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1195 → 1196 taken 5140 times.
✓ Branch 1195 → 1422 taken 52 times.
✗ Branch 3435 → 3436 not taken.
✗ Branch 3435 → 3662 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 190 → 191 not taken.
✗ Branch 190 → 246 not taken.
✗ Branch 298 → 299 not taken.
✗ Branch 298 → 354 not taken.
✗ Branch 842 → 843 not taken.
✗ Branch 842 → 898 not taken.
5192 if (t0 == cur_depth) {
2301 // We need to flip cur_tstack and nxt_tstack relative to each other.
2302 // Flip the one with worse top_depth.
2303
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1196 → 1197 taken 8 times.
✓ Branch 1196 → 1291 taken 5132 times.
✗ Branch 3436 → 3437 not taken.
✗ Branch 3436 → 3531 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 191 → 192 not taken.
✗ Branch 191 → 210 not taken.
✗ Branch 299 → 300 not taken.
✗ Branch 299 → 318 not taken.
✗ Branch 843 → 844 not taken.
✗ Branch 843 → 862 not taken.
5140 if (t1 != -1) {
2304 // merge into side 1
2305 32 merge_planarity_side(nxt_tstack().planarity.sides[1], cur_planarity);
2306 } else {
2307 15396 nxt_tstack().planarity.sides[1] = cur_planarity;
2308 }
2309
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1343 → 1344 taken 1564 times.
✓ Branch 1343 → 1519 taken 3576 times.
✗ Branch 3583 → 3584 not taken.
✗ Branch 3583 → 3759 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 224 → 225 not taken.
✗ Branch 224 → 268 not taken.
✗ Branch 332 → 333 not taken.
✗ Branch 332 → 376 not taken.
✗ Branch 876 → 877 not taken.
✗ Branch 876 → 920 not taken.
10280 if (last_top < nxt_tstack().top_depth) {
2310 3128 nxt_tstack().top_depth = last_top;
2311 7820 std::swap(nxt_tstack().planarity.sides[0], nxt_tstack().planarity.sides[1]);
2312 }
2313 } else {
2314 52 assert(t0 < cur_depth);
2315 52 assert(t0 <= last_top);
2316 // merge into side 0
2317 208 merge_planarity_side(nxt_tstack().planarity.sides[0], cur_planarity);
2318 }
2319 }
2320 6400 tstack.pop_back();
2321
2322 // Prune off finished cur-side things
2323
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1612 → 1554 taken 12800 times.
✓ Branch 1612 → 1613 taken 6400 times.
✗ Branch 3852 → 3794 not taken.
✗ Branch 3852 → 3853 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 288 → 276 not taken.
✗ Branch 288 → 289 not taken.
✗ Branch 396 → 384 not taken.
✗ Branch 396 → 397 not taken.
✗ Branch 940 → 928 not taken.
✗ Branch 940 → 941 not taken.
38400 for (auto& side : cur_tstack().planarity.sides) {
2324
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1609 → 1556 taken 7016 times.
✓ Branch 1609 → 1610 taken 12800 times.
✗ Branch 3849 → 3796 not taken.
✗ Branch 3849 → 3850 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 286 → 277 not taken.
✗ Branch 286 → 287 not taken.
✗ Branch 394 → 385 not taken.
✗ Branch 394 → 395 not taken.
✗ Branch 938 → 929 not taken.
✗ Branch 938 → 939 not taken.
52432 while (side.tops[1].depth == cur_depth) {
2325 21048 side.tops[1] = prev_edge[side.tops[1].end];
2326
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1587 → 1588 taken 1642 times.
✓ Branch 1587 → 1600 taken 5374 times.
✗ Branch 3827 → 3828 not taken.
✗ Branch 3827 → 3840 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 281 → 282 not taken.
✗ Branch 281 → 285 not taken.
✗ Branch 389 → 390 not taken.
✗ Branch 389 → 393 not taken.
✗ Branch 933 → 934 not taken.
✗ Branch 933 → 937 not taken.
14032 if (side.tops[1].end == -1) {
2327 3284 side.tops[0] = {};
2328 }
2329 }
2330 }
2331 }
2332
2333 27024 if (is_type_1) assert(s.has_vert_tstack);
2334
3/14
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 1628 → 1629 not taken.
✓ Branch 1628 → 1630 taken 27024 times.
✓ Branch 1630 → 1631 taken 19622 times.
✓ Branch 1630 → 2150 taken 7402 times.
✗ Branch 3868 → 3869 not taken.
✗ Branch 3868 → 3870 not taken.
✗ Branch 3870 → 3871 not taken.
✗ Branch 3870 → 4390 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 294 → 295 not taken.
✗ Branch 294 → 415 not taken.
✗ Branch 402 → 403 not taken.
✗ Branch 402 → 523 not taken.
✗ Branch 946 → 947 not taken.
✗ Branch 946 → 1067 not taken.
27024 if (s.has_vert_tstack) {
2335 // NB: tstack[orig_size] is the vertex and tstack[orig_size+1] is the backedge; maybe we should reverse them?
2336 19622 assert(int(tstack.size()) >= orig_tstack + 3);
2337
2338
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1639 → 1640 taken 14624 times.
✓ Branch 1639 → 2056 taken 4998 times.
✗ Branch 3879 → 3880 not taken.
✗ Branch 3879 → 4296 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 298 → 299 not taken.
✗ Branch 298 → 388 not taken.
✗ Branch 406 → 407 not taken.
✗ Branch 406 → 496 not taken.
✗ Branch 950 → 951 not taken.
✗ Branch 950 → 1040 not taken.
19622 if (!is_type_1) {
2339 // The lowval side should be side 1, everything else goes on side 0.
2340 // The exception is tstack[orig_tstack + 2], which could be == lowval on one/both sides,
2341 // but is guaranteed to have *something* > lowval by non-type-1-ness
2342 14624 auto& t = tstack[orig_tstack + 2];
2343 14624 {
2344 43872 assert(t.planarity.sides[0].tops[0].depth == t.top_depth);
2345 43872 assert(t.planarity.sides[0].tops[1].depth != -1);
2346
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1695 → 1696 taken 84 times.
✓ Branch 1695 → 1715 taken 14540 times.
✗ Branch 3935 → 3936 not taken.
✗ Branch 3935 → 3955 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 310 → 311 not taken.
✗ Branch 310 → 314 not taken.
✗ Branch 418 → 419 not taken.
✗ Branch 418 → 422 not taken.
✗ Branch 962 → 963 not taken.
✗ Branch 962 → 966 not taken.
43872 if (t.planarity.sides[0].tops[1].depth == lowval) {
2347 252 t.planarity.sides[0] = t.planarity.sides[1];
2348
4/26
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1731 → 1732 taken 1872 times.
✓ Branch 1731 → 1749 taken 12668 times.
✓ Branch 1748 → 1749 taken 4 times.
✓ Branch 1748 → 2055 taken 1868 times.
✗ Branch 3971 → 3972 not taken.
✗ Branch 3971 → 3989 not taken.
✗ Branch 3988 → 3989 not taken.
✗ Branch 3988 → 4295 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 316 → 317 not taken.
✗ Branch 316 → 321 not taken.
✗ Branch 319 → 320 not taken.
✗ Branch 319 → 321 not taken.
✗ Branch 322 → 323 not taken.
✗ Branch 322 → 324 not taken.
✗ Branch 424 → 425 not taken.
✗ Branch 424 → 429 not taken.
✗ Branch 427 → 428 not taken.
✗ Branch 427 → 429 not taken.
✗ Branch 430 → 431 not taken.
✗ Branch 430 → 432 not taken.
✗ Branch 968 → 969 not taken.
✗ Branch 968 → 973 not taken.
✗ Branch 971 → 972 not taken.
✗ Branch 971 → 973 not taken.
✗ Branch 974 → 975 not taken.
✗ Branch 974 → 976 not taken.
47364 } else if (t.planarity.sides[1].tops[1].depth != -1 && t.planarity.sides[1].tops[1].depth != lowval) {
2349 5422 return false;
2350 }
2351 38268 assert(t.planarity.sides[0].tops[1].depth > lowval);
2352 }
2353 25512 tstack_planarity_side_t cur_planarity = t.planarity.sides[0];
2354
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1960 → 1777 taken 38104 times.
✓ Branch 1960 → 1961 taken 9202 times.
✗ Branch 4200 → 4017 not taken.
✗ Branch 4200 → 4201 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 371 → 330 not taken.
✗ Branch 371 → 372 not taken.
✗ Branch 479 → 438 not taken.
✗ Branch 479 → 480 not taken.
✗ Branch 1023 → 982 not taken.
✗ Branch 1023 → 1024 not taken.
47306 for (int i = orig_tstack + 3; i < int(tstack.size()); i++) {
2355
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1783 → 1784 taken 180 times.
✓ Branch 1783 → 1808 taken 37924 times.
✗ Branch 4023 → 4024 not taken.
✗ Branch 4023 → 4048 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 331 → 332 not taken.
✗ Branch 331 → 337 not taken.
✗ Branch 439 → 440 not taken.
✗ Branch 439 → 445 not taken.
✗ Branch 983 → 984 not taken.
✗ Branch 983 → 989 not taken.
38104 if (tstack[i].top_depth == lowval) {
2356 540 std::swap(tstack[i].planarity.sides[0], tstack[i].planarity.sides[1]);
2357 }
2358
4/26
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1828 → 1829 taken 650 times.
✓ Branch 1828 → 1850 taken 37454 times.
✓ Branch 1849 → 1850 taken 14 times.
✓ Branch 1849 → 2055 taken 636 times.
✗ Branch 4068 → 4069 not taken.
✗ Branch 4068 → 4090 not taken.
✗ Branch 4089 → 4090 not taken.
✗ Branch 4089 → 4295 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 340 → 341 not taken.
✗ Branch 340 → 346 not taken.
✗ Branch 344 → 345 not taken.
✗ Branch 344 → 346 not taken.
✗ Branch 347 → 348 not taken.
✗ Branch 347 → 349 not taken.
✗ Branch 448 → 449 not taken.
✗ Branch 448 → 454 not taken.
✗ Branch 452 → 453 not taken.
✗ Branch 452 → 454 not taken.
✗ Branch 455 → 456 not taken.
✗ Branch 455 → 457 not taken.
✗ Branch 992 → 993 not taken.
✗ Branch 992 → 998 not taken.
✗ Branch 996 → 997 not taken.
✗ Branch 996 → 998 not taken.
✗ Branch 999 → 1000 not taken.
✗ Branch 999 → 1001 not taken.
115612 if (tstack[i].planarity.sides[1].tops[1].depth != -1 && tstack[i].planarity.sides[1].tops[1].depth != lowval) {
2359 ✗ return false;
2360 }
2361 112404 int next_top = tstack[i].planarity.sides[0].tops[0].depth;
2362
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1868 → 1869 taken 26614 times.
✓ Branch 1868 → 1953 taken 10854 times.
✗ Branch 4108 → 4109 not taken.
✗ Branch 4108 → 4193 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 352 → 353 not taken.
✗ Branch 352 → 369 not taken.
✗ Branch 460 → 461 not taken.
✗ Branch 460 → 477 not taken.
✗ Branch 1004 → 1005 not taken.
✗ Branch 1004 → 1021 not taken.
37468 if (next_top != -1) {
2363
2/10
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 1875 → 1876 taken 23696 times.
✓ Branch 1875 → 2055 taken 2918 times.
✗ Branch 4115 → 4116 not taken.
✗ Branch 4115 → 4295 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 354 → 355 not taken.
✗ Branch 354 → 356 not taken.
✗ Branch 462 → 463 not taken.
✗ Branch 462 → 464 not taken.
✗ Branch 1006 → 1007 not taken.
✗ Branch 1006 → 1008 not taken.
53228 if (cur_planarity.tops[1].depth > next_top) return false;
2364 71088 merge_planarity_side(cur_planarity, tstack[i].planarity.sides[0]);
2365 }
2366 }
2367 18404 merge_planarity_side(tstack[orig_tstack+1].planarity.sides[0], cur_planarity);
2368 18404 tstack[orig_tstack+1].planarity.sides[1] = tstack_planarity_side_t{};
2369 } else {
2370 4998 assert(int(tstack.size()) == orig_tstack + 3);
2371 }
2372 14200 tstack[orig_tstack] = tstack[orig_tstack+1];
2373
1/5
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2080 → 2081 taken 14200 times.
✗ Branch 4320 → 4321 not taken.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 393 → 394 not taken.
✗ Branch 501 → 502 not taken.
✗ Branch 1045 → 1046 not taken.
14200 tstack.resize(orig_tstack + 1);
2374 28400 assert(cur_tstack().top_depth == lowval);
2375 }
2376 } else {
2377 218758 assert(is_type_1);
2378
0/6
✗ Branch 404 → 405 not taken.
✗ Branch 404 → 407 not taken.
✗ Branch 512 → 513 not taken.
✗ Branch 512 → 515 not taken.
✗ Branch 1056 → 1057 not taken.
✗ Branch 1056 → 1059 not taken.
218758 int idx = push_edge_tstack(lowval, e, false);
2379 218758 setmin(first_occurrence[lowval], idx);
2380 }
2381
2382
9/30
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2150 → 2151 not taken.
✓ Branch 2150 → 2152 taken 21602 times.
✓ Branch 2152 → 2153 taken 4998 times.
✓ Branch 2152 → 2185 taken 16604 times.
✓ Branch 2175 → 2176 taken 238 times.
✓ Branch 2175 → 2185 taken 4760 times.
✗ Branch 4390 → 4391 not taken.
✓ Branch 4390 → 4392 taken 218758 times.
✓ Branch 4392 → 4393 taken 218758 times.
✗ Branch 4392 → 4425 not taken.
✓ Branch 4415 → 4416 taken 88770 times.
✓ Branch 4415 → 4425 taken 129988 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 415 → 416 not taken.
✗ Branch 415 → 424 not taken.
✗ Branch 422 → 423 not taken.
✗ Branch 422 → 424 not taken.
✗ Branch 425 → 426 not taken.
✗ Branch 425 → 429 not taken.
✗ Branch 523 → 524 not taken.
✗ Branch 523 → 532 not taken.
✗ Branch 530 → 531 not taken.
✗ Branch 530 → 532 not taken.
✗ Branch 533 → 534 not taken.
✗ Branch 533 → 537 not taken.
✗ Branch 1067 → 1068 not taken.
✗ Branch 1067 → 1076 not taken.
✗ Branch 1074 → 1075 not taken.
✗ Branch 1074 → 1076 not taken.
✗ Branch 1077 → 1078 not taken.
✗ Branch 1077 → 1081 not taken.
464116 if (is_type_1 && nxt_tstack().top_depth == lowval) {
2383 89008 assert(s.has_vert_tstack);
2384 89008 tstack.pop_back();
2385 }
2386
2387
5/14
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 2186 → 2187 not taken.
✓ Branch 2186 → 2188 taken 21602 times.
✓ Branch 2188 → 510 taken 14200 times.
✓ Branch 2188 → 2189 taken 7402 times.
✗ Branch 4426 → 4427 not taken.
✓ Branch 4426 → 4428 taken 218758 times.
✗ Branch 4428 → 4429 not taken.
✓ Branch 4428 → 4459 taken 218758 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>)::{lambda()#4}::operator()() const:
✗ Branch 429 → 430 not taken.
✗ Branch 429 → 439 not taken.
✗ Branch 537 → 538 not taken.
✗ Branch 537 → 547 not taken.
✗ Branch 1081 → 1082 not taken.
✗ Branch 1081 → 1091 not taken.
240360 if (!s.has_vert_tstack) {
2388 7402 assert(!is_type_1);
2389 // Throw cur_vert_node onto the tstack so it'll get interleaved correctly
2390 7402 push_vert_tstack(cur_depth);
2391 7402 s.has_vert_tstack = true;
2392 }
2393 ✗ return true;
2394 16302 };
2395 16302 auto pop_vert = [&] [[gnu::always_inline]] () -> void {
2396 46412 auto& s = stk.back();
2397 46412 assert(s.ch_idx == s.ch_end);
2398 46412 assert(s.has_vert_tstack);
2399 46412 stk.pop_back();
2400 16302 };
2401
2402 32604 push_vert(rt);
2403 387582 while (true) {
2404
2/4
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 519 → 520 taken 46412 times.
✓ Branch 519 → 2241 taken 341170 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 99 → 100 not taken.
✗ Branch 99 → 552 not taken.
387582 if (stk.back().ch_idx == stk.back().ch_end) {
2405 46412 pop_vert();
2406
2/4
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 541 → 542 taken 37762 times.
✓ Branch 541 → 4460 taken 8650 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 108 → 109 not taken.
✗ Branch 108 → 110 not taken.
46412 if (stk.empty()) break;
2407
0/2
✗ Branch 549 → 551 not taken.
✗ Branch 549 → 1097 not taken.
432996 if (auto res = finish_edge(); !res) return false;
2408
2/4
wala::can_planar_embed(int, std::__debug::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✓ Branch 2315 → 2316 taken 83422 times.
✓ Branch 2315 → 2782 taken 257748 times.
wala::can_planar_embed(int, std::vector<std::array<int, 2ul>, std::allocator<std::array<int, 2ul> > > const&, std::span<int const, 18446744073709551615ul>, std::span<int const, 18446744073709551615ul>):
✗ Branch 573 → 574 not taken.
✗ Branch 573 → 654 not taken.
682340 } else if (std::optional<int> nxt = start_edge(); nxt) {
2409 166844 push_vert(*nxt);
2410 } else {
2411 − if (auto res = finish_edge(); !res) assert(false);
2412 }
2413 }
2414 8650 assert(int(tstack.size()) == 1);
2415 8650 tstack.pop_back();
2416 10100 }
2417 10100 }
2418 2448 return true;
2419 10100 }
2420
2421 } // namespace wala
2422