graph_api_test/steps/
filter.rs

1use crate::{Edge, Vertex, assert_elements_eq, populate_graph};
2use graph_api_lib::{EdgeReference, EdgeSearch, Graph, VertexReference};
3
4pub fn test_vertices_filter<T>(graph: &mut T)
5where
6    T: Graph<Vertex = Vertex, Edge = Edge>,
7{
8    let refs = populate_graph(graph);
9    let collected = graph
10        .walk()
11        .vertices_by_id(vec![refs.bryn, refs.julia])
12        .filter(|person, _| match person.weight() {
13            Vertex::Person { name, .. } => name == "Bryn",
14            _ => false,
15        })
16        .collect::<Vec<_>>();
17    assert_elements_eq!(graph, collected, vec![refs.bryn]);
18}
19
20pub fn test_edges_filter<T>(graph: &mut T)
21where
22    T: Graph<Vertex = Vertex, Edge = Edge>,
23{
24    let refs = populate_graph(graph);
25    let collected = graph
26        .walk()
27        .vertices_by_id(vec![refs.bryn])
28        .edges(EdgeSearch::scan().outgoing())
29        .filter(|edge, _| match edge.weight() {
30            Edge::Knows { since } => *since >= 1999,
31            _ => false,
32        })
33        .collect::<Vec<_>>();
34    assert_elements_eq!(graph, collected, vec![refs.bryn_knows_julia]);
35}