Skip to content

Commit

Permalink
graph: enable tests in bazel
Browse files Browse the repository at this point in the history
  • Loading branch information
Mizux committed Sep 23, 2024
1 parent 14f1c7f commit 601830f
Show file tree
Hide file tree
Showing 10 changed files with 296 additions and 16 deletions.
11 changes: 8 additions & 3 deletions .bazelrc
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,15 @@ build --apple_platform_type=macos
# platform.
build --enable_platform_specific_config

build:linux --cxxopt="-std=c++17" --cxxopt=-Wno-sign-compare --host_cxxopt="-std=c++17" --host_cxxopt=-Wno-sign-compare
build:macos --cxxopt="-std=c++17" --cxxopt=-Wno-sign-compare --cxxopt=-mmacos-version-min=10.15 --cxxopt=-Wno-dangling-field --features=-supports_dynamic_linker
build:linux --cxxopt="-std=c++17" --cxxopt=-Wno-sign-compare
build:linux --host_cxxopt="-std=c++17" --host_cxxopt=-Wno-sign-compare

build:macos --features=-supports_dynamic_linker
build:macos --cxxopt="-std=c++17" --cxxopt=-Wno-sign-compare --cxxopt=-mmacos-version-min=10.15 --cxxopt=-Wno-dangling-field
build:macos --host_cxxopt="-std=c++17" --host_cxxopt=-Wno-sign-compare --host_cxxopt=-mmacos-version-min=10.15 --host_cxxopt=-Wno-dangling-field
build:windows --cxxopt="/std:c++20" --host_cxxopt="/std:c++20"

build:windows --cxxopt="/std:c++20"
build:windows --host_cxxopt="/std:c++20"

# Enable the runfiles symlink tree on Windows. This makes it possible to build
# the pip package on Windows without an intermediate data-file archive, as the
Expand Down
16 changes: 16 additions & 0 deletions ortools/base/top_n.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,9 @@ class TopN {
}
// Peeks the bottom result without calling Extract()
const T& peek_bottom();
// Destructively extract the elements as a vector, sorted in descending order.
// Leaves TopN in an empty state.
std::vector<T> Take();
// Extract the elements as a vector sorted in descending order. The caller
// assumes ownership of the vector and must delete it when done. This is a
// destructive operation. The only method that can be called immediately
Expand Down Expand Up @@ -250,6 +253,19 @@ const T& TopN<T, Cmp>::peek_bottom() {
}
return elements_.front();
}
template <class T, class Cmp>
std::vector<T> TopN<T, Cmp>::Take() {
std::vector<T> out = std::move(elements_);
if (state_ != State::HEAP_SORTED) {
std::sort(out.begin(), out.end(), cmp_);
} else {
out.pop_back();
std::sort_heap(out.begin(), out.end(), cmp_);
}
Reset();
return out;
}

template <class T, class Cmp>
std::vector<T>* TopN<T, Cmp>::Extract() {
auto out = new std::vector<T>;
Expand Down
242 changes: 242 additions & 0 deletions ortools/graph/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ cc_library(
":graph",
"//ortools/base:iterator_adaptors",
"//ortools/base:threadpool",
"//ortools/base:top_n",
"@com_google_absl//absl/algorithm:container",
"@com_google_absl//absl/base:core_headers",
"@com_google_absl//absl/log:check",
Expand All @@ -85,6 +86,25 @@ cc_library(
],
)

cc_test(
name = "multi_dijkstra_test",
size = "small",
srcs = ["multi_dijkstra_test.cc"],
deps = [
":connected_components",
":graph",
":multi_dijkstra",
":random_graph",
":util",
"//ortools/base:gmock_main",
"//ortools/base:map_util",
"//ortools/base:types",
"@com_google_absl//absl/container:flat_hash_map",
"@com_google_absl//absl/container:flat_hash_set",
"@com_google_absl//absl/random:distributions",
],
)

cc_library(
name = "bidirectional_dijkstra",
hdrs = ["bidirectional_dijkstra.h"],
Expand All @@ -99,6 +119,23 @@ cc_library(
],
)

cc_test(
name = "bidirectional_dijkstra_test",
size = "small",
srcs = ["bidirectional_dijkstra_test.cc"],
deps = [
":bidirectional_dijkstra",
":bounded_dijkstra",
":graph",
"//ortools/base:gmock_main",
"//ortools/base:iterator_adaptors",
"@com_google_absl//absl/base:log_severity",
"@com_google_absl//absl/random:distributions",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/types:span",
],
)

cc_library(
name = "cliques",
srcs = ["cliques.cc"],
Expand Down Expand Up @@ -126,6 +163,21 @@ cc_library(
],
)

cc_test(
name = "hamiltonian_path_test",
size = "medium",
timeout = "long",
srcs = ["hamiltonian_path_test.cc"],
deps = [
":hamiltonian_path",
"//ortools/base",
"//ortools/base:gmock_main",
"@com_google_absl//absl/random:distributions",
"@com_google_absl//absl/strings:str_format",
"@com_google_absl//absl/types:span",
],
)

cc_library(
name = "christofides",
hdrs = ["christofides.h"],
Expand All @@ -144,6 +196,20 @@ cc_library(
],
)

cc_test(
name = "christofides_test",
srcs = ["christofides_test.cc"],
deps = [
":christofides",
"//ortools/base",
"//ortools/base:gmock_main",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/strings:str_format",
"@com_google_absl//absl/types:span",
"@com_google_benchmark//:benchmark",
],
)

cc_library(
name = "eulerian_path",
hdrs = ["eulerian_path.h"],
Expand All @@ -152,6 +218,18 @@ cc_library(
],
)

cc_test(
name = "eulerian_path_test",
srcs = ["eulerian_path_test.cc"],
deps = [
":eulerian_path",
":graph",
"//ortools/base",
"//ortools/base:gmock_main",
"@com_google_benchmark//:benchmark",
],
)

cc_library(
name = "minimum_spanning_tree",
hdrs = ["minimum_spanning_tree.h"],
Expand All @@ -164,6 +242,21 @@ cc_library(
],
)

cc_test(
name = "minimum_spanning_tree_test",
srcs = ["minimum_spanning_tree_test.cc"],
deps = [
":graph",
":minimum_spanning_tree",
"//ortools/base:gmock_main",
"//ortools/base:types",
"@com_google_absl//absl/base:core_headers",
"@com_google_absl//absl/random:distributions",
"@com_google_absl//absl/types:span",
"@com_google_benchmark//:benchmark",
],
)

cc_library(
name = "one_tree_lower_bound",
hdrs = ["one_tree_lower_bound.h"],
Expand All @@ -185,6 +278,23 @@ cc_library(
"//ortools/util:permutation",
"//ortools/util:zvector",
"@com_google_absl//absl/strings",
"@com_google_googletest//:gtest_prod",
],
)

cc_test(
name = "ebert_graph_test",
size = "small",
srcs = ["ebert_graph_test.cc"],
deps = [
":ebert_graph",
"//ortools/base",
"//ortools/base:gmock_main",
"//ortools/util:permutation",
"@com_google_absl//absl/base:core_headers",
"@com_google_absl//absl/random:distributions",
"@com_google_absl//absl/strings",
"@com_google_benchmark//:benchmark",
],
)

Expand All @@ -209,6 +319,23 @@ cc_library(
],
)

cc_test(
name = "shortest_paths_test",
size = "medium",
srcs = ["shortest_paths_test.cc"],
tags = ["noasan"], # Times out occasionally in ASAN mode.
deps = [
":ebert_graph",
":shortest_paths",
":strongly_connected_components",
"//ortools/base:gmock_main",
"//ortools/util:zvector",
"@com_google_absl//absl/base:core_headers",
"@com_google_absl//absl/log:check",
"@com_google_absl//absl/random",
],
)

cc_library(
name = "k_shortest_paths",
hdrs = ["k_shortest_paths.h"],
Expand All @@ -226,6 +353,24 @@ cc_library(
],
)

# need C++20
#cc_test(
# name = "k_shortest_paths_test",
# srcs = ["k_shortest_paths_test.cc"],
# deps = [
# ":graph",
# ":io",
# ":k_shortest_paths",
# ":shortest_paths",
# "//ortools/base:gmock_main",
# "@com_google_absl//absl/algorithm:container",
# "@com_google_absl//absl/log:check",
# "@com_google_absl//absl/random:distributions",
# "@com_google_absl//absl/strings",
# "@com_google_benchmark//:benchmark",
# ],
#)

# Flow problem protobuf representation
proto_library(
name = "flow_problem_proto",
Expand Down Expand Up @@ -343,6 +488,16 @@ cc_library(
],
)

cc_test(
name = "assignment_test",
size = "small",
srcs = ["assignment_test.cc"],
deps = [
":assignment",
"//ortools/base:gmock_main",
],
)

# Linear Assignment with full-featured interface and efficient
# implementation.
cc_library(
Expand All @@ -357,6 +512,23 @@ cc_library(
"//ortools/util:zvector",
"@com_google_absl//absl/flags:flag",
"@com_google_absl//absl/strings:str_format",
"@com_google_googletest//:gtest_prod",
],
)

cc_test(
name = "linear_assignment_test",
size = "small",
srcs = ["linear_assignment_test.cc"],
deps = [
":ebert_graph",
":graph",
":linear_assignment",
"//ortools/base",
"//ortools/base:gmock_main",
"@com_google_absl//absl/random:distributions",
"@com_google_absl//absl/types:span",
"@com_google_benchmark//:benchmark",
],
)

Expand Down Expand Up @@ -428,6 +600,76 @@ cc_library(
],
)

cc_test(
name = "rooted_tree_test",
srcs = ["rooted_tree_test.cc"],
deps = [
":graph",
":rooted_tree",
"//ortools/base:gmock_main",
"@com_google_absl//absl/algorithm:container",
"@com_google_absl//absl/log:check",
"@com_google_absl//absl/random",
"@com_google_absl//absl/status",
"@com_google_benchmark//:benchmark",
],
)

cc_test(
name = "perfect_matching_test",
size = "small",
srcs = ["perfect_matching_test.cc"],
deps = [
":perfect_matching",
"//ortools/base:gmock_main",
"//ortools/linear_solver:linear_solver_cc_proto",
"//ortools/linear_solver:solve_mp_model",
"@com_google_absl//absl/random",
"@com_google_absl//absl/types:span",
],
)

cc_test(
name = "dag_shortest_path_test",
size = "small",
srcs = ["dag_shortest_path_test.cc"],
deps = [
":dag_shortest_path",
":graph",
":io",
"//ortools/base:dump_vars",
"//ortools/base:gmock_main",
"//ortools/util:flat_matrix",
"@com_google_absl//absl/algorithm:container",
"@com_google_absl//absl/log:check",
"@com_google_absl//absl/random",
"@com_google_absl//absl/status",
"@com_google_absl//absl/types:span",
"@com_google_benchmark//:benchmark",
],
)

cc_test(
name = "dag_constrained_shortest_path_test",
srcs = ["dag_constrained_shortest_path_test.cc"],
deps = [
":dag_constrained_shortest_path",
":dag_shortest_path",
":graph",
":io",
"//ortools/base:dump_vars",
"//ortools/base:gmock_main",
"//ortools/math_opt/cpp:math_opt",
"//ortools/math_opt/solvers:cp_sat_solver",
"@com_google_absl//absl/algorithm:container",
"@com_google_absl//absl/log:check",
"@com_google_absl//absl/random",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/types:span",
"@com_google_benchmark//:benchmark",
],
)

# From util/graph
cc_library(
name = "connected_components",
Expand Down
3 changes: 2 additions & 1 deletion ortools/graph/bidirectional_dijkstra_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "absl/types/span.h"
#include "gtest/gtest.h"
#include "ortools/base/gmock.h"
#include "ortools/base/iterator_adaptors.h"
#include "ortools/graph/bounded_dijkstra.h"
#include "ortools/graph/graph.h"

Expand Down Expand Up @@ -202,7 +203,7 @@ TEST(BidirectionalDijkstraTest, RandomizedCorrectnessTest) {
ref_dijkstra.ArcPathToNode(ref_dests[0]);
const auto path = tested_dijkstra.SetToSetShortestPath(srcs, dsts);
std::vector<int> arc_path = path.forward_arc_path;
for (const int arc : gtl::reversed_view(path.backward_arc_path)) {
for (const int arc : ::gtl::reversed_view(path.backward_arc_path)) {
arc_path.push_back(forward_arc_of_backward_arc[arc]);
}
ASSERT_THAT(arc_path, ElementsAreArray(ref_arc_path))
Expand Down
Loading

0 comments on commit 601830f

Please sign in to comment.