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/16wala::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/6wala::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/4wala::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/16wala::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/16wala::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/16wala::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/16wala::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/16wala::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/16wala::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/16wala::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/8wala::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/16wala::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/16wala::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/16wala::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/3wala::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/4wala::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/3wala::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/8wala::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/6wala::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/3wala::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/34wala::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/3wala::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/3wala::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/24wala::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/72wala::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/64wala::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/28wala::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/72wala::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/72wala::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/92wala::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/36wala::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/34wala::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/14wala::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/26wala::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/34wala::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/3wala::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/6wala::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/3wala::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/6wala::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/3wala::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/6wala::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/3wala::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/6wala::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/12std::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/4std::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/46None:
✓ 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/10std::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/430None:
✗ 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/494None:
✗ 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/10std::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/10std::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/5std::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/5std::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/5std::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/5std::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/6std::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/2std::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/91None:
✗ 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/91None:
✗ 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/125None:
✗ 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/91None:
✗ 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/53None:
✗ 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/5std::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/5std::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/40std::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/5std::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/6std::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/98None:
✗ 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/98None:
✗ 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/98None:
✗ 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/98None:
✗ 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/98None:
✗ 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/98None:
✗ 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/98None:
✗ 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/5std::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/85None:
✗ 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/14None:
✗ 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/50None:
✗ 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/71None:
✗ 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/112None:
✗ 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/36std::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/76None:
✗ 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/36std::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/24None:
✗ 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/32None:
✗ 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/10None:
✗ 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/10None:
✗ 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/48std::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/36std::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/20None:
✗ 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/5std::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/10std::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/54None:
✗ 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/54None:
✗ 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/8None:
✗ 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/26None:
✗ 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/16None:
✗ 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/23None:
✗ 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/31None:
✗ 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/23None:
✗ 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/32None:
✗ 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/24None:
✗ 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/24None:
✗ 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/24None:
✗ 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/24None:
✗ 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/24None:
✗ 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/10None:
✗ 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/10None:
✗ 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/10None:
✗ 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/10None:
✗ 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/24None:
✗ 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/12None:
✗ 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/12None:
✗ 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/12None:
✗ 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/12None:
✗ 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/12None:
✗ 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/12None:
✗ 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/32None:
✗ 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/12None:
✗ 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/4None:
✗ 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/4None:
✗ 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/12None:
✗ 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/4None:
✗ 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/12None:
✗ 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/4None:
✗ 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/12None:
✗ 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/12None:
✗ 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/12None:
✗ 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/12None:
✗ 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/12None:
✗ 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/12None:
✗ 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/24None:
✗ 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/32None:
✗ 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/28None:
✗ 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/12None:
✗ 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/12None:
✗ 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/32None:
✗ 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/4None:
✗ 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/12None:
✗ 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/12None:
✗ 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/12None:
✗ 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/32None:
✗ 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/4None:
✗ 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/12None:
✗ 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/12None:
✗ 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/4None:
✗ 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/28None:
✗ 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/28None:
✗ 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/24None:
✗ 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/10None:
✗ 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/10None:
✗ 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/28None:
✗ 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/68None:
✗ 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/32None:
✗ 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/8std::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/10std::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/10std::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/6std::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/6std::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/5std::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/6std::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/6std::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/6std::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/6std::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/5std::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/5std::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/5std::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/5std::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/6std::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/5std::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/5std::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/5std::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/5std::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/5std::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/6std::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/6std::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/6std::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/5std::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/5std::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/5std::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/22None:
✗ 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/22None:
✗ 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/22None:
✗ 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/16None:
✗ 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/26None:
✗ 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/10None:
✗ 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/10None:
✗ 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/24None:
✗ 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/24None:
✗ 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/24None:
✗ 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/10None:
✗ 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/10None:
✗ 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/24None:
✗ 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/24None:
✗ 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/24None:
✗ 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/72None:
✗ 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/12None:
✗ 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/72None:
✗ 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/24None:
✗ 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/24None:
✗ 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/24None:
✗ 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/24None:
✗ 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/24None:
✗ 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/20None:
✗ 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/20None:
✗ 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/24None:
✗ 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/24None:
✗ 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/20None:
✗ 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/20None:
✗ 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/24None:
✗ 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/12None:
✗ 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/24None:
✗ 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/24None:
✗ 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/12None:
✗ 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/24None:
✗ 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/42None:
✗ 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/10None:
✗ 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/10None:
✗ 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/18None:
✗ 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/22None:
✗ 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/24None:
✗ 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/24None:
✗ 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/24None:
✗ 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/6None:
✗ 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/6None:
✗ 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/8None:
✗ 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/12None:
✗ 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/30None:
✗ 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/10std::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/10std::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/10std::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/52std::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/4auto 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/2wala::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/2wala::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/2wala::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/2wala::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/2wala::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/2wala::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/114wala::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/114wala::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/114wala::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/114wala::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/114wala::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/2wala::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/29wala::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/22wala::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/42wala::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/2wala::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/4wala::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/26wala::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/26wala::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/8wala::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/32wala::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/32wala::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/32wala::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/22wala::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/10wala::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/14wala::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/10wala::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/14wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/26wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/14wala::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/14wala::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/10wala::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/26wala::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/10wala::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/10wala::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/26wala::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/10wala::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/10wala::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/10wala::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/30wala::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/14wala::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/4wala::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/4wala::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/4wala::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/4wala::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/4wala::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/2wala::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/4wala::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/4wala::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/4wala::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/4wala::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/4auto 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/2wala::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/2wala::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/2wala::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/2wala::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/19wala::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/22wala::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/2wala::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/4wala::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/26wala::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/26wala::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/8wala::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/10wala::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/14wala::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/10wala::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/14wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/26wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/10wala::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/14wala::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/10wala::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/10wala::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/26wala::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/10wala::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/10wala::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/26wala::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/10wala::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/10wala::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/5wala::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/30wala::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/14wala::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/4wala::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/4wala::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/4wala::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 |