netcrab/petri_net/
net_iter.rs1use 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 pub fn places_iter(&self) -> Iter<PlaceRef, Place> {
12 self.places.iter()
13 }
14
15 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}