netcrab/petri_net/
net_iter.rs

1use crate::petri_net::place::Place;
2use crate::petri_net::place_ref::PlaceRef;
3use crate::petri_net::transition::Transition;
4use crate::petri_net::transition_ref::TransitionRef;
5use crate::petri_net::PetriNet;
6use std::collections::btree_map::Iter;
7
8impl PetriNet {
9    /// Returns an iterator over the place references and their corresponding places.
10    /// The places are visited in alphabetical order.
11    pub fn places_iter(&self) -> Iter<PlaceRef, Place> {
12        self.places.iter()
13    }
14
15    /// Returns an iterator over the transition references and their corresponding transitions.
16    /// The transitions are visited in alphabetical order.
17    pub fn transitions_iter(&self) -> Iter<TransitionRef, Transition> {
18        self.transitions.iter()
19    }
20}
21
22#[cfg(test)]
23mod net_iter_tests {
24    use super::*;
25
26    #[test]
27    fn net_places_iter_empty_net() {
28        let net = PetriNet::default();
29        assert_eq!(net.places_iter().count(), 0);
30    }
31
32    #[test]
33    fn net_places_iter_visits_all_places() {
34        let mut net = PetriNet::default();
35        net.add_place("P1");
36        net.add_place("P2");
37        net.add_place("P3");
38        net.add_place("P4");
39        assert_eq!(net.places_iter().count(), 4);
40    }
41
42    #[test]
43    fn net_transitions_iter_empty_net() {
44        let net = PetriNet::default();
45        assert_eq!(net.transitions_iter().count(), 0);
46    }
47
48    #[test]
49    fn net_transitions_iter_visits_all_transitions() {
50        let mut net = PetriNet::default();
51        net.add_transition("T1");
52        net.add_transition("T2");
53        net.add_transition("T3");
54        net.add_transition("T4");
55        assert_eq!(net.transitions_iter().count(), 4);
56    }
57}