Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/snarl_distance_index.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ void fill_in_distance_index(SnarlDistanceIndex* distance_index, const HandleGrap
SnarlDistanceIndex::TemporaryDistanceIndex temp_index = make_temporary_distance_index(graph, snarl_finder, size_limit, only_top_level_chain_distances);

if (!silence_warnings && temp_index.use_oversized_snarls) {
cerr << "warning: distance index uses oversized snarls, which may make mapping slow" << endl;
cerr << "warning: distance index uses oversized snarls, (the biggest has "
<< temp_index.most_oversized_snarl_size << " nodes), which may make mapping slow" << endl;
cerr << "\ttry increasing --snarl-limit when building the distance index" << endl;
}

Expand Down Expand Up @@ -1110,6 +1111,7 @@ void populate_snarl_index(
}

if (size_limit != 0 && temp_snarl_record.node_count > size_limit) {
temp_index.most_oversized_snarl_size = std::max(temp_index.most_oversized_snarl_size, temp_snarl_record.node_count);
temp_index.use_oversized_snarls = true;
}

Expand Down
21 changes: 21 additions & 0 deletions src/unittest/snarl_distance_index.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6583,6 +6583,27 @@ namespace vg {
REQUIRE(distance_index.minimum_distance(n1->id(), false, 0, n8->id(), false, 0, false, &graph) == 8);
REQUIRE(distance_index.minimum_distance(n8->id(), false, 0, n2->id(), true, 0, false, &graph) == 1);
}
SECTION( "Is oversized" ) {
net_handle_t node_1 = distance_index.get_node_net_handle(n1->id());
net_handle_t snarl;
distance_index.follow_net_edges(node_1, &graph, false, [&](const net_handle_t& other) {
snarl=other;
return false;
});
REQUIRE(distance_index.is_oversized_snarl(snarl));
}
SECTION( "Is not oversized with size limit equal to snarl size " ) {
SnarlDistanceIndex distance_index2;
// Exactly equal to the snarl size
fill_in_distance_index(&distance_index2, &graph, &snarl_finder, 7);
net_handle_t node_1 = distance_index2.get_node_net_handle(n1->id());
net_handle_t snarl;
distance_index2.follow_net_edges(node_1, &graph, false, [&](const net_handle_t& other) {
snarl=other;
return false;
});
REQUIRE(!distance_index2.is_oversized_snarl(snarl));
}
}
TEST_CASE( "Nested oversized snarl","[snarl_distance]" ) {
VG graph;
Expand Down