Ejemplo n.º 1
0
    def test_end_in_event(self):

        self.test_end_in_event_counter = 22

        def x(val):
            self.test_end_in_event_counter += val

        def y():
            simulator.end(5)

        simulator.ready()
        simulator.schedule(60, x, 22)
        simulator.schedule(70, y)
        simulator.schedule(70, x, 3)
        simulator.schedule(71, y)
        simulator.schedule(74, x, 5)
        simulator.schedule(75, x, 22)
        simulator.schedule(76, x, 22)
        simulator.schedule(888, x, 22)
        simulator.schedule(999, x, 22)
        simulator.schedule(8953, x, 22)
        simulator.end(1000)
        simulator.run()
        self.assertEqual(self.test_end_in_event_counter, 22 + 22 + 3 + 5)
        self.assertEqual(simulator.now(), 75)
        self.assertTrue(simulator.is_finished())
        self.assertEqual(simulator.event_heap_size(), 5)
        simulator.reset()
Ejemplo n.º 2
0
 def test_run_empty_with_end_time(self):
     simulator.ready()
     self.assertEqual(simulator.now(), 0)
     self.assertFalse(simulator.is_finished())
     simulator.end(68483)
     simulator.run()
     self.assertEqual(simulator.now(), 68483)
     self.assertTrue(simulator.is_finished())
     simulator.reset()
Ejemplo n.º 3
0
    def test_readme(self):
        def something(value):
            print("t=" + str(simulator.now()) + ": something() with value " +
                  str(value))

        simulator.ready()
        simulator.schedule(44, something, "ABC")
        simulator.schedule(967, something, "XYZ")
        simulator.end(10000)
        simulator.run()
        simulator.reset()
Ejemplo n.º 4
0
    def test_schedule_another_event_in_callback(self):
        def something(value):
            print("t=" + str(simulator.now()) + ": something() with value: " +
                  str(value))
            simulator.schedule(200, something,
                               "XYZ")  # 100 time units in the future from now

        simulator.ready()
        simulator.schedule(200, something, "ABC")
        simulator.end(1001)
        simulator.run()
        simulator.reset()
Ejemplo n.º 5
0
    def test_set_end_time(self):
        def something(value):
            print("t=" + str(simulator.now()) + ": something() with value: " +
                  str(value))

        simulator.ready()
        simulator.schedule(100, something, "ABC")
        simulator.schedule(120, something, "DEF")
        simulator.schedule(160, something, "GHI")
        # End time is 160, meaning that only events scheduled
        # for t in [0, 160) are executed (thus excluding t = 160)
        simulator.end(160)
        simulator.run()
        simulator.reset()
Ejemplo n.º 6
0
        def z():
            self.test_end_in_same_event_counter += 5

            self.assertFalse(simulator.is_init())
            self.assertFalse(simulator.is_ready())
            self.assertTrue(simulator.is_running())
            self.assertFalse(simulator.is_finished())

            simulator.end()  # End after this event has been executed

            self.assertFalse(simulator.is_init())
            self.assertFalse(simulator.is_ready())
            self.assertTrue(simulator.is_running())
            self.assertFalse(simulator.is_finished())
Ejemplo n.º 7
0
    def test_end_one(self):

        self.test_end_one_counter = 0

        def x(val):
            self.test_end_one_counter += val

        simulator.ready()
        simulator.schedule(10, x, 57)
        simulator.end(100)
        simulator.run()
        self.assertEqual(self.test_end_one_counter, 57)
        self.assertEqual(simulator.now(), 100)
        self.assertTrue(simulator.is_finished())
        simulator.reset()
Ejemplo n.º 8
0
    def test_normal_not(self):

        self.test_normal_counter = 0

        def x(val):
            self.test_normal_counter -= val

        simulator.ready()
        simulator.schedule(100, x, 57)
        simulator.schedule(153, x, 245)
        simulator.schedule(199, x, 88)
        simulator.end(156)
        simulator.run()
        self.assertEqual(self.test_normal_counter, - 57 - 245)
        self.assertEqual(simulator.now(), 156)
        self.assertTrue(simulator.is_finished())
        self.assertEqual(simulator.event_heap_size(), 1)
        simulator.reset()
        self.assertEqual(simulator.event_heap_size(), 0)
Ejemplo n.º 9
0
    def test_normal_just(self):

        self.test_normal_counter = 0

        def x(val):
            self.test_normal_counter += val

        simulator.ready()
        simulator.schedule(100, x, 57)
        simulator.schedule(100, x, 473)
        simulator.schedule(199, x, 88)
        simulator.end(200)
        simulator.run()
        self.assertEqual(self.test_normal_counter, 57 + 473 + 88)
        self.assertEqual(simulator.now(), 200)
        self.assertTrue(simulator.is_finished())
        self.assertEqual(simulator.event_heap_size(), 0)
        simulator.reset()
        self.assertEqual(simulator.event_heap_size(), 0)
Ejemplo n.º 10
0
    def test_end_errors(self):

        # End delay is not an integer
        try:
            simulator.ready()
            simulator.end(6.7)
            self.fail()
        except ValueError as e:
            self.assertEqual(str(e), "End delay must be an integer")
            simulator.run()
            simulator.reset()

        # End delay is a negative integer
        try:
            simulator.ready()
            simulator.end(-10)
            self.fail()
        except ValueError as e:
            self.assertEqual(str(e), "End delay must be non-negative")
            simulator.end(100)
            simulator.run()
            simulator.reset()

        # Zero end delay (I)
        try:
            simulator.ready()
            simulator.end()
            self.fail()
        except ValueError as e:
            self.assertEqual(str(e), "Cannot schedule end with zero delay in READY state")
            simulator.run()
            simulator.reset()

        # Zero end delay (II)
        try:
            simulator.ready()
            simulator.end(0)
            self.fail()
        except ValueError as e:
            self.assertEqual(str(e), "Cannot schedule end with zero delay in READY state")
            simulator.run()
            simulator.reset()
Ejemplo n.º 11
0
    def test_end_within_event_while_running(self):
        def something(value):
            print("t=" + str(simulator.now()) + ": something() with value: " +
                  str(value))

        def we_are_done(value):
            print("t=" + str(simulator.now()) +
                  ": we_are_done() with value: " + str(value))
            simulator.end()

        simulator.ready()
        simulator.schedule(100, something, "ABC")
        simulator.schedule(120, something, "DEF")
        simulator.schedule(140, we_are_done, "XYZ")
        simulator.schedule(160, something, "TEST")
        simulator.schedule(700, something, "GHI")
        simulator.end(1000)
        simulator.run()
        print("End time: " + str(simulator.now()))
        simulator.reset()
Ejemplo n.º 12
0
    def test_stage_transitions(self):

        self.assertTrue(simulator.is_init())
        self.assertFalse(simulator.is_ready())
        self.assertFalse(simulator.is_running())
        self.assertFalse(simulator.is_finished())

        simulator.ready()

        self.assertFalse(simulator.is_init())
        self.assertTrue(simulator.is_ready())
        self.assertFalse(simulator.is_running())
        self.assertFalse(simulator.is_finished())

        def check_running():
            self.assertFalse(simulator.is_init())
            self.assertFalse(simulator.is_ready())
            self.assertTrue(simulator.is_running())
            self.assertFalse(simulator.is_finished())
            self.assertEqual(simulator.now(), 0)

        simulator.schedule(0, check_running)
        simulator.end(100000)
        simulator.run()
        self.assertEqual(simulator.now(), 100000)

        self.assertFalse(simulator.is_init())
        self.assertFalse(simulator.is_ready())
        self.assertFalse(simulator.is_running())
        self.assertTrue(simulator.is_finished())

        simulator.reset()

        self.assertTrue(simulator.is_init())
        self.assertFalse(simulator.is_ready())
        self.assertFalse(simulator.is_running())
        self.assertFalse(simulator.is_finished())
Ejemplo n.º 13
0
    def test_end_override(self):

        self.test_end_two_override_counter = 22

        def x(val):
            self.test_end_two_override_counter += val

        simulator.ready()
        simulator.schedule(57, x, 67)
        simulator.end(100)
        simulator.end(57)
        simulator.end(100)
        simulator.run()
        self.assertEqual(self.test_end_two_override_counter, 22)
        self.assertEqual(simulator.now(), 57)
        self.assertTrue(simulator.is_finished())
        simulator.reset()
Ejemplo n.º 14
0
 def we_are_done(value):
     print("t=" + str(simulator.now()) +
           ": we_are_done() with value: " + str(value))
     simulator.end()
Ejemplo n.º 15
0
    def test_invalid_state_errors(self):

        # Invalid reset()
        try:
            simulator.ready()
            simulator.reset()
            self.fail()
        except ValueError as e:
            self.assertEqual(str(e), "Reset can only be performed when the state is FINISHED (current: READY)")
            simulator.run()
            simulator.reset()

        # Invalid run()
        try:
            simulator.run()
            self.fail()
        except ValueError as e:
            self.assertEqual(str(e), "Run can only be started when the state is READY (current: INIT)")
            simulator.ready()
            simulator.run()
            simulator.reset()

        # Invalid ready()
        try:
            simulator.ready()
            simulator.ready()
            self.fail()
        except ValueError as e:
            self.assertEqual(str(e), "Can only become READY when the simulator is INIT (current: READY)")
            simulator.run()
            simulator.reset()

        # Invalid schedule (not in READY or RUNNING state)
        try:
            def x():
                pass
            simulator.schedule(10, x)
            self.fail()
        except ValueError as e:
            self.assertEqual(str(e), "Scheduling can only be done when the state is READY or RUNNING (current: INIT)")

        # Invalid end() in INIT state
        try:
            simulator.end()
            self.fail()
        except ValueError as e:
            self.assertEqual(
                str(e),
                "Scheduling end can only be done when the state is READY or RUNNING (current: INIT)"
            )

        # Invalid end() in FINISHED state
        try:
            simulator.ready()
            simulator.run()
            simulator.end()
            self.fail()
        except ValueError as e:
            self.assertEqual(
                str(e),
                "Scheduling end can only be done when the state is READY or RUNNING (current: FINISHED)"
            )
            simulator.reset()
Ejemplo n.º 16
0
 def y():
     simulator.end(5)