@@ -61,14 +61,16 @@ def test_finish_service_method(self):
6161 N .accept (inds [int (current_time * 100 - 1 )], current_time )
6262 self .assertEqual ([str (obs ) for obs in N .all_individuals ],
6363 ['Individual 1' , 'Individual 2' , 'Individual 3' ])
64- self .assertEqual ([[str (obs ) for obs in pr_cls ] for pr_cls in N .individuals ],
64+ self .assertEqual (
65+ [[str (obs ) for obs in pr_cls ] for pr_cls in N .individuals ],
6566 [['Individual 1' , 'Individual 2' , 'Individual 3' ]])
6667 N .update_next_event_date (0.03 )
6768 self .assertEqual (round (N .next_event_date , 5 ), 0.03604 )
6869 N .finish_service ()
6970 self .assertEqual ([str (obs ) for obs in N .all_individuals ],
7071 ['Individual 1' , 'Individual 3' ])
71- self .assertEqual ([[str (obs ) for obs in pr_cls ] for pr_cls in N .individuals ],
72+ self .assertEqual (
73+ [[str (obs ) for obs in pr_cls ] for pr_cls in N .individuals ],
7274 [['Individual 1' , 'Individual 3' ]])
7375
7476 def test_change_customer_class_method (self ):
@@ -187,7 +189,8 @@ def test_release_method(self):
187189 N .accept (inds [int (current_time * 100 - 1 )], current_time )
188190 self .assertEqual ([str (obs ) for obs in N .all_individuals ],
189191 ['Individual 1' , 'Individual 2' , 'Individual 3' ])
190- self .assertEqual ([[str (obs ) for obs in pr_cls ] for pr_cls in N .individuals ],
192+ self .assertEqual (
193+ [[str (obs ) for obs in pr_cls ] for pr_cls in N .individuals ],
191194 [['Individual 1' , 'Individual 2' , 'Individual 3' ]])
192195 N .update_next_event_date (0.03 )
193196 self .assertEqual (round (N .next_event_date , 5 ), 0.03604 )
@@ -197,7 +200,8 @@ def test_release_method(self):
197200 N .release (1 , Q .transitive_nodes [1 ], N .next_event_date )
198201 self .assertEqual ([str (obs ) for obs in N .all_individuals ],
199202 ['Individual 1' , 'Individual 3' ])
200- self .assertEqual ([[str (obs ) for obs in pr_cls ] for pr_cls in N .individuals ],
203+ self .assertEqual (
204+ [[str (obs ) for obs in pr_cls ] for pr_cls in N .individuals ],
201205 [['Individual 1' , 'Individual 3' ]])
202206 N .update_next_event_date (N .next_event_date + 0.00001 )
203207 self .assertEqual (round (N .next_event_date , 5 ), 0.06447 )
@@ -539,46 +543,78 @@ def test_if_putting_individuals_in_correct_priority_queue(self):
539543 N1 = Q .transitive_nodes [0 ]
540544 N2 = Q .transitive_nodes [1 ]
541545
542- self .assertEqual ([[str (obs ) for obs in lst ] for lst in N1 .individuals ], [[], []])
543- self .assertEqual ([str (obs ) for obs in N1 .all_individuals ], [])
544- self .assertEqual ([[str (obs ) for obs in lst ] for lst in N2 .individuals ], [[], []])
545- self .assertEqual ([str (obs ) for obs in N2 .all_individuals ], [])
546+ self .assertEqual (
547+ [[str (obs ) for obs in lst ] for lst in N1 .individuals ], [[], []])
548+ self .assertEqual (
549+ [str (obs ) for obs in N1 .all_individuals ], [])
550+ self .assertEqual (
551+ [[str (obs ) for obs in lst ] for lst in N2 .individuals ], [[], []])
552+ self .assertEqual (
553+ [str (obs ) for obs in N2 .all_individuals ], [])
546554
547555 Q .nodes [0 ].next_node = 1
548556 Q .nodes [0 ].next_class = 0
549557 Q .nodes [0 ].have_event ()
550558
551- self .assertEqual ([[str (obs ) for obs in lst ] for lst in N1 .individuals ], [['Individual 1' ], []])
552- self .assertEqual ([str (obs ) for obs in N1 .all_individuals ], ['Individual 1' ])
553- self .assertEqual ([[str (obs ) for obs in lst ] for lst in N2 .individuals ], [[], []])
554- self .assertEqual ([str (obs ) for obs in N2 .all_individuals ], [])
559+ self .assertEqual (
560+ [[str (obs ) for obs in lst ] for lst in N1 .individuals ],
561+ [['Individual 1' ], []])
562+ self .assertEqual (
563+ [str (obs ) for obs in N1 .all_individuals ],
564+ ['Individual 1' ])
565+ self .assertEqual (
566+ [[str (obs ) for obs in lst ] for lst in N2 .individuals ], [[], []])
567+ self .assertEqual (
568+ [str (obs ) for obs in N2 .all_individuals ], [])
555569
556570 Q .nodes [0 ].next_node = 1
557571 Q .nodes [0 ].next_class = 1
558572 Q .nodes [0 ].have_event ()
559573
560- self .assertEqual ([[str (obs ) for obs in lst ] for lst in N1 .individuals ], [['Individual 1' ], ['Individual 2' ]])
561- self .assertEqual ([str (obs ) for obs in N1 .all_individuals ], ['Individual 1' , 'Individual 2' ])
562- self .assertEqual ([[str (obs ) for obs in lst ] for lst in N2 .individuals ], [[], []])
563- self .assertEqual ([str (obs ) for obs in N2 .all_individuals ], [])
574+ self .assertEqual (
575+ [[str (obs ) for obs in lst ] for lst in N1 .individuals ],
576+ [['Individual 1' ], ['Individual 2' ]])
577+ self .assertEqual (
578+ [str (obs ) for obs in N1 .all_individuals ],
579+ ['Individual 1' , 'Individual 2' ])
580+ self .assertEqual (
581+ [[str (obs ) for obs in lst ] for lst in N2 .individuals ], [[], []])
582+ self .assertEqual (
583+ [str (obs ) for obs in N2 .all_individuals ], [])
564584
565585 Q .nodes [0 ].next_node = 2
566586 Q .nodes [0 ].next_class = 0
567587 Q .nodes [0 ].have_event ()
568588
569- self .assertEqual ([[str (obs ) for obs in lst ] for lst in N1 .individuals ], [['Individual 1' ], ['Individual 2' ]])
570- self .assertEqual ([str (obs ) for obs in N1 .all_individuals ], ['Individual 1' , 'Individual 2' ])
571- self .assertEqual ([[str (obs ) for obs in lst ] for lst in N2 .individuals ], [['Individual 3' ], []])
572- self .assertEqual ([str (obs ) for obs in N2 .all_individuals ], ['Individual 3' ])
589+ self .assertEqual (
590+ [[str (obs ) for obs in lst ] for lst in N1 .individuals ],
591+ [['Individual 1' ], ['Individual 2' ]])
592+ self .assertEqual (
593+ [str (obs ) for obs in N1 .all_individuals ],
594+ ['Individual 1' , 'Individual 2' ])
595+ self .assertEqual (
596+ [[str (obs ) for obs in lst ] for lst in N2 .individuals ],
597+ [['Individual 3' ], []])
598+ self .assertEqual (
599+ [str (obs ) for obs in N2 .all_individuals ],
600+ ['Individual 3' ])
573601
574602 Q .nodes [0 ].next_node = 2
575603 Q .nodes [0 ].next_class = 1
576604 Q .nodes [0 ].have_event ()
577605
578- self .assertEqual ([[str (obs ) for obs in lst ] for lst in N1 .individuals ], [['Individual 1' ], ['Individual 2' ]])
579- self .assertEqual ([str (obs ) for obs in N1 .all_individuals ], ['Individual 1' , 'Individual 2' ])
580- self .assertEqual ([[str (obs ) for obs in lst ] for lst in N2 .individuals ], [['Individual 3' ], ['Individual 4' ]])
581- self .assertEqual ([str (obs ) for obs in N2 .all_individuals ], ['Individual 3' , 'Individual 4' ])
606+ self .assertEqual (
607+ [[str (obs ) for obs in lst ] for lst in N1 .individuals ],
608+ [['Individual 1' ], ['Individual 2' ]])
609+ self .assertEqual (
610+ [str (obs ) for obs in N1 .all_individuals ],
611+ ['Individual 1' , 'Individual 2' ])
612+ self .assertEqual (
613+ [[str (obs ) for obs in lst ] for lst in N2 .individuals ],
614+ [['Individual 3' ], ['Individual 4' ]])
615+ self .assertEqual (
616+ [str (obs ) for obs in N2 .all_individuals ],
617+ ['Individual 3' , 'Individual 4' ])
582618
583619 def test_server_utilisation (self ):
584620 # Single server
@@ -603,11 +639,37 @@ def test_server_utilisation(self):
603639
604640 def test_server_utilisation_with_schedules (self ):
605641 N = ciw .create_network (
606- Arrival_distributions = [['Sequential' , [2.0 , 4.0 , 4.0 , 0.0 , 7.0 , 1000.0 ]]],
607- Service_distributions = [['Sequential' , [4.0 , 2.0 , 6.0 , 6.0 , 3.0 ]]],
642+ Arrival_distributions = [['Sequential' ,
643+ [2.0 , 4.0 , 4.0 , 0.0 , 7.0 , 1000.0 ]]],
644+ Service_distributions = [['Sequential' ,
645+ [4.0 , 2.0 , 6.0 , 6.0 , 3.0 ]]],
608646 Number_of_servers = [[[1 , 9 ], [2 , 23 ]]]
609647 )
610648 Q = ciw .Simulation (N )
611649 Q .simulate_until_max_time (23 )
612650 recs = Q .get_all_records ()
613651 self .assertEqual (Q .transitive_nodes [0 ].server_utilisation , 21.0 / 37.0 )
652+
653+ def test_num_inds_equal_len_all_inds (self ):
654+ # Create a Simulatin class that inherits form ciw.Simulation so that
655+ # an assertion than number_of_individuals == len(all_individuals)
656+ # every time self.event_and_return_nextnode is called.
657+ class AssertSim (ciw .Simulation ):
658+ def event_and_return_nextnode (simself , next_active_node , current_time ):
659+ """
660+ Carries out the event of current next_active_node, and return the next
661+ next_active_node
662+ """
663+ next_active_node .have_event ()
664+ for node in simself .transitive_nodes :
665+ node .update_next_event_date (current_time )
666+ self .assertEqual (
667+ node .number_of_individuals , len (node .all_individuals ))
668+ return simself .find_next_active_node ()
669+
670+ # Now carry out the tests by running a simulation with this new
671+ # inherited Node class.
672+ N = ciw .create_network_from_yml (
673+ 'ciw/tests/testing_parameters/params.yml' )
674+ Q = AssertSim (N )
675+ Q .simulate_until_max_time (100 )
0 commit comments