]>
git.proxmox.com Git - rustc.git/blob - compiler/rustc_data_structures/src/graph/tests.rs
1 use crate::fx
::FxHashMap
;
11 successors
: FxHashMap
<usize, Vec
<usize>>,
12 predecessors
: FxHashMap
<usize, Vec
<usize>>,
16 pub fn new(start_node
: usize, edges
: &[(usize, usize)]) -> Self {
17 let mut graph
= TestGraph
{
18 num_nodes
: start_node
+ 1,
20 successors
: FxHashMap
::default(),
21 predecessors
: FxHashMap
::default(),
23 for &(source
, target
) in edges
{
24 graph
.num_nodes
= max(graph
.num_nodes
, source
+ 1);
25 graph
.num_nodes
= max(graph
.num_nodes
, target
+ 1);
26 graph
.successors
.entry(source
).or_default().push(target
);
27 graph
.predecessors
.entry(target
).or_default().push(source
);
29 for node
in 0..graph
.num_nodes
{
30 graph
.successors
.entry(node
).or_default();
31 graph
.predecessors
.entry(node
).or_default();
37 impl DirectedGraph
for TestGraph
{
41 impl WithStartNode
for TestGraph
{
42 fn start_node(&self) -> usize {
47 impl WithNumNodes
for TestGraph
{
48 fn num_nodes(&self) -> usize {
53 impl WithPredecessors
for TestGraph
{
54 fn predecessors(&self, node
: usize) -> <Self as GraphPredecessors
<'_
>>::Iter
{
55 self.predecessors
[&node
].iter().cloned()
59 impl WithSuccessors
for TestGraph
{
60 fn successors(&self, node
: usize) -> <Self as GraphSuccessors
<'_
>>::Iter
{
61 self.successors
[&node
].iter().cloned()
65 impl<'graph
> GraphPredecessors
<'graph
> for TestGraph
{
67 type Iter
= iter
::Cloned
<slice
::Iter
<'graph
, usize>>;
70 impl<'graph
> GraphSuccessors
<'graph
> for TestGraph
{
72 type Iter
= iter
::Cloned
<slice
::Iter
<'graph
, usize>>;