def test_wait_time(self): q1 = MapPh1N(MAP.exponential(1.0), PhaseType.exponential(2.0), 5) q2 = MapPh1N(MAP.exponential(2.0), PhaseType.exponential(5.0), 10) exp_q1 = MM1N(1.0, 2.0, 5) exp_q2 = MM1N(2, 5, 10) self.assertAlmostEqual(q1.wait_time, exp_q1.wait_time) self.assertAlmostEqual(q2.wait_time, exp_q2.wait_time)
def test_system_size_avg(self): q1 = MapPh1N(MAP.exponential(1.0), PhaseType.exponential(2.0), 5) q2 = MapPh1N(MAP.exponential(2.0), PhaseType.exponential(5.0), 10) exp_q1 = MM1N(1.0, 2.0, 5) exp_q2 = MM1N(2, 5, 10) self.assertAlmostEqual(q1.system_size_avg, exp_q1.system_size_avg) self.assertAlmostEqual(q2.system_size_avg, exp_q2.system_size_avg)
def test_system_size_pmf(self): q1 = MapPh1N(MAP.exponential(1.0), PhaseType.exponential(2.0), 5) q2 = MapPh1N(MAP.exponential(2.0), PhaseType.exponential(5.0), 10) exp_q1 = MM1N(1.0, 2.0, 5) exp_q2 = MM1N(2, 5, 10) assert_almost_equal(q1.system_size_pmf(10), exp_q1.system_size_pmf(10)) self.assertEqual(len(q1.system_size_pmf()), q1.capacity + 1) assert_almost_equal(q2.system_size_pmf(), exp_q2.system_size_pmf())
def test_valid_creation(self): q1 = MapPh1N(MAP.exponential(1.0), PhaseType.exponential(2.0), 5) q2 = MapPh1N(MAP.exponential(2.0), PhaseType.exponential(5.0), 4) self.assertAlmostEqual(q1.arrival_rate, 1) self.assertAlmostEqual(q1.service_rate, 2) self.assertEqual(q1.capacity, 5) self.assertAlmostEqual(q2.arrival_rate, 2) self.assertAlmostEqual(q2.service_rate, 5) self.assertAlmostEqual(q2.capacity, 4)
def test_moments_map_arrival(self): source = MAP.exponential(3.0) self.assertIsInstance(stats.moment(source, 1), np.ndarray) self.assertIsInstance(stats.moment(source, 2), np.ndarray) assert_almost_equal(stats.moment(source, 1), [1 / 3], 10) assert_almost_equal(stats.moment(source, 2), [1 / 3, 2 / 9], 10)
def test_departure_process(self): q1 = MapPh1N(MAP.exponential(1.0), PhaseType.exponential(2.0), 20) q2 = MapPh1N(MAP.erlang(4, 1.0), PhaseType.erlang(3, 2.0), 20) self.assertIsInstance(q1.departure, MAP) self.assertIsInstance(q2.departure, MAP) # Since queue is very long, arrival rate will be close to departure # rate. self.assertAlmostEqual(q1.departure.rate, q1.arrival_rate, 5) self.assertAlmostEqual(q2.departure.rate, q2.arrival_rate, 5)
def test_invalid_creation(self): ar1 = MAP.exponential(1.0) srv1 = PhaseType.exponential(2.0) with self.assertRaises(ValueError): MapPh1N(ar1, srv1, -1) with self.assertRaises(ValueError): MapPh1N(ar1, srv1, 0) with self.assertRaises(TypeError): MapPh1N(ar1, srv1, '1') with self.assertRaises(TypeError): MapPh1N(ar1, srv1, 1.2) with self.assertRaises(TypeError): MapPh1N(ar1, srv1, [1, 2])
def test_utilization(self): q1 = MapPh1N(MAP.exponential(1.0), PhaseType.exponential(2.0), 20) q2 = MapPh1N(MAP.erlang(4, 1.0), PhaseType.erlang(3, 2.0), 20) self.assertAlmostEqual(q1.utilization, 1 / 2) self.assertAlmostEqual(q2.utilization, 3 / 8)
def test_service_distribution(self): q = MapPh1N(MAP.exponential(1.0), PhaseType.exponential(2.0), 5) self.assertIsInstance(q.service, PhaseType) self.assertAlmostEqual(q.service.rate, q.service_rate)
def test_arrival_process(self): q = MapPh1N(MAP.exponential(1.0), PhaseType.exponential(2.0), 5) self.assertIsInstance(q.arrival, MAP) self.assertAlmostEqual(q.arrival.rate, q.arrival_rate)