@@ -62,3 +62,42 @@ def test_resource_interrupted_assignment_assertion() -> None:
62
62
worker_1 = ps .Worker (name = "Worker1" )
63
63
with pytest .raises (AssertionError ):
64
64
ps .ResourceInterrupted (resource = worker_1 , list_of_time_intervals = [(1 , 3 )])
65
+
66
+
67
+ def test_resource_cumulative_worker_interrupted_fixed_duration () -> None :
68
+ pb = ps .SchedulingProblem (name = "fixed_duration" )
69
+ task_1 = ps .FixedDurationTask (name = "task1" , duration = 3 )
70
+ task_2 = ps .FixedDurationTask (name = "task2" , duration = 4 )
71
+ worker_1 = ps .CumulativeWorker (name = "Worker1" , size = 2 )
72
+ task_1 .add_required_resource (worker_1 )
73
+ task_2 .add_required_resource (worker_1 )
74
+ ps .ResourceInterrupted (resource = worker_1 , list_of_time_intervals = [(1 , 3 ), (6 , 8 )])
75
+
76
+ ps .ObjectiveMinimizeMakespan ()
77
+ solver = ps .SchedulingSolver (problem = pb )
78
+ solution = solver .solve ()
79
+ assert solution
80
+ assert solution .tasks [task_1 .name ].start == 3
81
+ assert solution .tasks [task_1 .name ].end == 6
82
+ assert solution .tasks [task_2 .name ].start == 8
83
+ assert solution .tasks [task_2 .name ].end == 12
84
+
85
+
86
+ def test_resource_cumulative_worker_interrupted_variable_duration () -> None :
87
+ pb = ps .SchedulingProblem (name = "variable_duration" )
88
+ task_1 = ps .VariableDurationTask (name = "task1" , min_duration = 3 )
89
+ task_2 = ps .VariableDurationTask (name = "task2" , min_duration = 4 )
90
+ ps .TaskStartAt (task = task_1 , value = 0 ) # pin to have a more stable outcome
91
+ worker_1 = ps .CumulativeWorker (name = "Worker1" , size = 2 )
92
+ task_1 .add_required_resource (worker_1 )
93
+ task_2 .add_required_resource (worker_1 )
94
+ ps .ResourceInterrupted (resource = worker_1 , list_of_time_intervals = [(1 , 3 ), (6 , 8 )])
95
+
96
+ ps .ObjectiveMinimizeMakespan ()
97
+ solver = ps .SchedulingSolver (problem = pb )
98
+ solution = solver .solve ()
99
+ assert solution
100
+ assert solution .tasks [task_1 .name ].start == 0
101
+ assert solution .tasks [task_1 .name ].end == 5
102
+ assert solution .tasks [task_2 .name ].start == 0
103
+ assert solution .tasks [task_2 .name ].end == 6
0 commit comments