Skip to content

Commit 1e860f5

Browse files
authored
Update cpuschedulingalgos.py
1 parent 37b31ac commit 1e860f5

File tree

1 file changed

+94
-8
lines changed

1 file changed

+94
-8
lines changed

scheduling/cpuschedulingalgos.py

Lines changed: 94 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,15 @@ def _simulate_sjf_np(self) -> Generator[tuple[int, str | None, list[str]]]:
106106

107107
# shortest job first preemptive
108108
def _simulate_sjf_p(self) -> Generator[tuple[int, str | None, list[str]]]:
109-
"""Simulates SJF Preemptive scheduling."""
109+
"""
110+
Simulates SJF Preemptive scheduling.
111+
112+
>>> processes = [{"pid": "P1", "arrival": 0, "burst": 3}]
113+
>>> engine = SchedulerEngine(processes, "SJF (Preemptive)")
114+
>>> gen = engine._simulate_sjf_p()
115+
>>> isinstance(gen, Generator)
116+
True
117+
"""
110118
t = 0
111119
processes = sorted(self.processes, key=lambda process: process["arrival"])
112120
done = 0
@@ -131,7 +139,15 @@ def _simulate_sjf_p(self) -> Generator[tuple[int, str | None, list[str]]]:
131139

132140
# priority non preemptive
133141
def _simulate_priority_np(self) -> Generator[tuple[int, str | None, list[str]]]:
134-
"""Simulates Priority (Non-Preemptive) scheduling."""
142+
"""
143+
Simulates Priority (Non-Preemptive) scheduling.
144+
145+
>>> processes = [{"pid": "P1", "arrival": 0, "burst": 2, "priority": 1}]
146+
>>> engine = SchedulerEngine(processes, "Priority (Non-Preemptive)")
147+
>>> gen = engine._simulate_priority_np()
148+
>>> next(gen)
149+
(0, 'P1', [])
150+
"""
135151
t = 0
136152
done = 0
137153
while done < len(self.processes):
@@ -154,7 +170,14 @@ def _simulate_priority_np(self) -> Generator[tuple[int, str | None, list[str]]]:
154170

155171
# priority preemptive
156172
def _simulate_priority_p(self) -> Generator[tuple[int, str | None, list[str]]]:
157-
"""Simulates Priority (Preemptive) scheduling."""
173+
"""
174+
Simulates Priority (Preemptive) scheduling.
175+
176+
>>> processes = [{"pid": "P1", "arrival": 0, "burst": 2, "priority": 1}]
177+
>>> engine = SchedulerEngine(processes, "Priority (Preemptive)")
178+
>>> isinstance(engine._simulate_priority_p(), Generator)
179+
True
180+
"""
158181
t = 0
159182
done = 0
160183
while done < len(self.processes):
@@ -318,7 +341,21 @@ def setup_ui(self) -> None:
318341
self.avg_label.pack()
319342

320343
def add_process(self) -> None:
321-
"""Adds a new process entry to the table."""
344+
"""
345+
Adds a new process entry to the table.
346+
347+
>>> import tkinter as tk
348+
>>> root = tk.Tk()
349+
>>> gui = CPUSchedulerGUI(root)
350+
>>> gui.pid_e.insert(0, 'P1')
351+
>>> gui.arrival_e.insert(0, '0')
352+
>>> gui.burst_e.insert(0, '3')
353+
>>> gui.priority_e.insert(0, '1')
354+
>>> gui.add_process()
355+
>>> len(gui.processes) > 0
356+
True
357+
>>> root.destroy()
358+
"""
322359
try:
323360
pid = self.pid_e.get()
324361
arrival = int(self.arrival_e.get())
@@ -332,14 +369,40 @@ def add_process(self) -> None:
332369
messagebox.showerror("Error", "Invalid input")
333370

334371
def delete_process(self) -> None:
335-
"""Deletes a selected process."""
372+
"""
373+
Deletes a selected process.
374+
375+
>>> import tkinter as tk
376+
>>> root = tk.Tk()
377+
>>> gui = CPUSchedulerGUI(root)
378+
>>> gui.processes = [{"pid": "P1", "arrival": 0, "burst": 2, "priority": 1}]
379+
>>> gui.tree.insert("", "end", values=("P1", 0, 2, 1))
380+
>>> sel = gui.tree.get_children()[0]
381+
>>> gui.tree.selection_set(sel)
382+
>>> gui.delete_process()
383+
>>> gui.processes
384+
[]
385+
>>> root.destroy()
386+
"""
336387
if sel := self.tree.selection():
337388
pid = self.tree.item(sel[0])["values"][0]
338389
self.processes = [p for p in self.processes if p["pid"] != pid]
339390
self.tree.delete(sel[0])
340391

341392
def run_scheduling(self) -> None:
342-
"""Runs the selected scheduling algorithm."""
393+
"""
394+
Runs the selected scheduling algorithm.
395+
396+
>>> import tkinter as tk
397+
>>> root = tk.Tk()
398+
>>> gui = CPUSchedulerGUI(root)
399+
>>> gui.processes = [{"pid": "P1", "arrival": 0, "burst": 2, "priority": 1}]
400+
>>> gui.algo_cb.set("FCFS")
401+
>>> gui.run_scheduling()
402+
>>> hasattr(gui, "engine")
403+
True
404+
>>> root.destroy()
405+
"""
343406
algo = self.algo_cb.get()
344407
quantum = int(self.quantum_e.get() or 2)
345408
if algo.lower() == "round robin":
@@ -353,7 +416,18 @@ def run_scheduling(self) -> None:
353416
threading.Thread(target=self.animate, daemon=True).start()
354417

355418
def animate(self) -> None:
356-
"""Animates the scheduling visualization."""
419+
"""
420+
Animates the scheduling visualization.
421+
422+
>>> import tkinter as tk
423+
>>> root = tk.Tk()
424+
>>> gui = CPUSchedulerGUI(root)
425+
>>> gui.processes = [{"pid": "P1", "arrival": 0, "burst": 1, "priority": 1}]
426+
>>> gui.engine = SchedulerEngine(gui.processes, "FCFS")
427+
>>> hasattr(gui, "animate")
428+
True
429+
>>> root.destroy()
430+
"""
357431
self.ax.clear()
358432
x: int = 0
359433
colors: dict[str, any] = {}
@@ -388,7 +462,19 @@ def animate(self) -> None:
388462
self.show_results()
389463

390464
def show_results(self) -> None:
391-
"""Displays scheduling results."""
465+
"""
466+
Displays scheduling results.
467+
468+
>>> import tkinter as tk
469+
>>> root = tk.Tk()
470+
>>> gui = CPUSchedulerGUI(root)
471+
>>> gui.engine = SchedulerEngine([{"pid": "P1", "arrival": 0, "burst": 1, "priority": 1}], "FCFS")
472+
>>> gui.engine.stats = [("P1", 0, 1, 1, 1, 0, 0)]
473+
>>> gui.show_results()
474+
>>> "AVG" in gui.avg_label.cget("text")
475+
True
476+
>>> root.destroy()
477+
"""
392478
for item in self.result_box.get_children():
393479
self.result_box.delete(item)
394480
total_wt = total_tat = total_rt = 0

0 commit comments

Comments
 (0)