@@ -62,3 +62,42 @@ def test_resource_interrupted_assignment_assertion() -> None:
6262 worker_1 = ps .Worker (name = "Worker1" )
6363 with pytest .raises (AssertionError ):
6464 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