Skip to content

Instantly share code, notes, and snippets.

@IuryAlves
Created June 14, 2015 17:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save IuryAlves/e7b204c7ebea93761aef to your computer and use it in GitHub Desktop.
Save IuryAlves/e7b204c7ebea93761aef to your computer and use it in GitHub Desktop.
# coding: utf-8
import unittest
from scheduling_algorithms import FCFS, SJF, SRTF, RoundRobin, FilaMultiNivelComFeedBack
from structures import Process, PCB
class ScheduleAlgorithm(unittest.TestCase):
def test_fcfs(self):
p1 = Process(PCB(24 ,0 ,1))
p2 = Process(PCB(3 ,1 ,1))
p3 = Process(PCB(3 ,2 ,1))
schedule = FCFS([p1, p2, p3])
schedule.run()
self.assertEquals(schedule.get_turnaround_time(id(p1)), 24)
self.assertEquals(schedule.get_turnaround_time(id(p2)), 26)
self.assertEquals(schedule.get_turnaround_time(id(p3)), 28)
self.assertEquals(schedule.get_waiting_times(id(p1)), 0)
self.assertEquals(schedule.get_waiting_times(id(p2)), 23)
self.assertEquals(schedule.get_waiting_times(id(p3)), 25)
self.assertEquals(schedule.get_average_waiting_time(), 16)
self.assertEquals(schedule.get_average_turnaround_time(), 26)
def test_sjf(self):
p1 = Process(PCB(6 ,0 ,1))
p2 = Process(PCB(8 ,0 ,1))
p3 = Process(PCB(7 ,0 ,1))
p4 = Process(PCB(3 ,0 ,1))
schedule = SJF([p1, p2, p3, p4])
schedule.run()
self.assertEquals(schedule.get_turnaround_time(id(p1)), 9)
self.assertEquals(schedule.get_turnaround_time(id(p2)), 24)
self.assertEquals(schedule.get_turnaround_time(id(p3)), 16)
self.assertEquals(schedule.get_turnaround_time(id(p4)), 3)
self.assertEquals(schedule.get_waiting_times(id(p1)), 3)
self.assertEquals(schedule.get_waiting_times(id(p2)), 16)
self.assertEquals(schedule.get_waiting_times(id(p3)), 9)
self.assertEquals(schedule.get_waiting_times(id(p4)), 0)
self.assertEquals(schedule.get_average_waiting_time(), 7)
self.assertEquals(schedule.get_average_turnaround_time(), 13)
def test_srtf(self):
p1 = Process(PCB(8 ,0 ,1))
p2 = Process(PCB(4 ,1 ,1))
p3 = Process(PCB(9 ,2 ,1))
p4 = Process(PCB(5 ,3 ,1))
schedule = SRTF([p1, p2, p3, p4])
schedule.run()
self.assertEquals(schedule.get_waiting_times(id(p1)), 9)
self.assertEquals(schedule.get_waiting_times(id(p2)), 0)
self.assertEquals(schedule.get_waiting_times(id(p3)), 15)
self.assertEquals(schedule.get_waiting_times(id(p4)), 2)
self.assertEquals(schedule.get_turnaround_time(id(p1)), 17)
self.assertEquals(schedule.get_turnaround_time(id(p2)), 4)
self.assertEquals(schedule.get_turnaround_time(id(p3)), 24)
self.assertEquals(schedule.get_turnaround_time(id(p4)), 7)
self.assertEquals(schedule.get_average_waiting_time(), 6)
self.assertEquals(schedule.get_average_turnaround_time(), 13)
def test_round_robin(self):
p1 = Process(PCB(53 ,0 ,0))
p2 = Process(PCB(17 ,0 ,0))
p3 = Process(PCB(68 ,0 ,0))
p4 = Process(PCB(24 ,0 ,0))
schedule = RoundRobin([p1, p2, p3, p4], quantum=20)
schedule.run()
self.assertEquals(schedule.get_waiting_times(id(p1)), 138)
self.assertEquals(schedule.get_waiting_times(id(p2)), 20)
self.assertEquals(schedule.get_waiting_times(id(p3)), 208)
self.assertEquals(schedule.get_waiting_times(id(p4)), 154)
self.assertEquals(schedule.get_turnaround_time(id(p1)), 134)
self.assertEquals(schedule.get_turnaround_time(id(p2)), 37)
self.assertEquals(schedule.get_turnaround_time(id(p3)), 162)
self.assertEquals(schedule.get_turnaround_time(id(p4)), 121)
self.assertEquals(schedule.get_average_waiting_time(), 130)
self.assertEquals(schedule.get_average_turnaround_time(), 113)
def test_multinivel(self):
p1 = Process(PCB(8 ,0 ,0))
p2 = Process(PCB(8 ,0 ,0))
p3 = Process(PCB(16 ,0 ,0))
p4 = Process(PCB(16 ,0 ,0))
p5 = Process(PCB(40 ,0 ,0))
schedule = FilaMultiNivelComFeedBack([p1, p2, p3, p4, p5])
schedule.run()
print schedule.q0.waiting_times
self.assertEquals(schedule.get_waiting_times(id(p1)), 0)
self.assertEquals(schedule.get_waiting_times(id(p2)), 8)
self.assertEquals(schedule.q1.get_waiting_times(id(p3)), 0)
self.assertEquals(schedule.q1.get_waiting_times(id(p4)), 8)
self.assertEquals(schedule.q2.get_waiting_times(id(p5)), 0)
self.assertEquals(schedule.q0.get_turnaround_time(id(p1)), 8)
self.assertEquals(schedule.q0.get_turnaround_time(id(p2)), 16)
self.assertEquals(schedule.q1.get_turnaround_time(id(p3)), 162)
self.assertEquals(schedule.q1.get_turnaround_time(id(p4)), 121)
self.assertEquals(schedule.q2.get_turnaround_time(id(p5)), 121)
self.assertEquals(schedule.get_average_waiting_time(), 130)
self.assertEquals(schedule.get_average_turnaround_time(), 113)
if __name__ == '__main__':
unittest.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment