mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 11:07:42 +00:00

And fix the new errors in the handful of crates that didn't have a `#![warn(unreachable_pub)]`.
60 lines
1.6 KiB
Rust
60 lines
1.6 KiB
Rust
use std::cmp::max;
|
|
|
|
use super::*;
|
|
use crate::fx::FxHashMap;
|
|
|
|
pub(super) struct TestGraph {
|
|
num_nodes: usize,
|
|
start_node: usize,
|
|
successors: FxHashMap<usize, Vec<usize>>,
|
|
predecessors: FxHashMap<usize, Vec<usize>>,
|
|
}
|
|
|
|
impl TestGraph {
|
|
pub(super) fn new(start_node: usize, edges: &[(usize, usize)]) -> Self {
|
|
let mut graph = TestGraph {
|
|
num_nodes: start_node + 1,
|
|
start_node,
|
|
successors: FxHashMap::default(),
|
|
predecessors: FxHashMap::default(),
|
|
};
|
|
for &(source, target) in edges {
|
|
graph.num_nodes = max(graph.num_nodes, source + 1);
|
|
graph.num_nodes = max(graph.num_nodes, target + 1);
|
|
graph.successors.entry(source).or_default().push(target);
|
|
graph.predecessors.entry(target).or_default().push(source);
|
|
}
|
|
for node in 0..graph.num_nodes {
|
|
graph.successors.entry(node).or_default();
|
|
graph.predecessors.entry(node).or_default();
|
|
}
|
|
graph
|
|
}
|
|
}
|
|
|
|
impl DirectedGraph for TestGraph {
|
|
type Node = usize;
|
|
|
|
fn num_nodes(&self) -> usize {
|
|
self.num_nodes
|
|
}
|
|
}
|
|
|
|
impl StartNode for TestGraph {
|
|
fn start_node(&self) -> usize {
|
|
self.start_node
|
|
}
|
|
}
|
|
|
|
impl Predecessors for TestGraph {
|
|
fn predecessors(&self, node: usize) -> impl Iterator<Item = Self::Node> {
|
|
self.predecessors[&node].iter().cloned()
|
|
}
|
|
}
|
|
|
|
impl Successors for TestGraph {
|
|
fn successors(&self, node: usize) -> impl Iterator<Item = Self::Node> {
|
|
self.successors[&node].iter().cloned()
|
|
}
|
|
}
|