@@ -53,8 +53,8 @@ public void Flush_ParentWithChild()
5353 jobScheduler . Flush ( handle1 ) ;
5454 jobScheduler . Flush ( handle2 ) ;
5555
56- var job1CompletedFlag = job1Completed . WaitOne ( TimeSpan . FromSeconds ( 5 ) ) ;
57- var job2CompletedFlag = job2Completed . WaitOne ( TimeSpan . FromSeconds ( 5 ) ) ;
56+ var job1CompletedFlag = job1Completed . WaitOne ( TimeSpan . FromMilliseconds ( 50 ) ) ;
57+ var job2CompletedFlag = job2Completed . WaitOne ( TimeSpan . FromMilliseconds ( 50 ) ) ;
5858
5959 IsTrue ( job1CompletedFlag , "Job1 did not complete in time." ) ;
6060 IsTrue ( job2CompletedFlag , "Job2 did not complete in time." ) ;
@@ -80,8 +80,8 @@ public void Flush_Child()
8080
8181 jobScheduler . Flush ( handle2 ) ;
8282
83- var job1CompletedFlag = job1Completed . WaitOne ( TimeSpan . FromSeconds ( 5 ) ) ;
84- var job2CompletedFlag = job2Completed . WaitOne ( TimeSpan . FromSeconds ( 5 ) ) ;
83+ var job1CompletedFlag = job1Completed . WaitOne ( TimeSpan . FromMilliseconds ( 5 ) ) ;
84+ var job2CompletedFlag = job2Completed . WaitOne ( TimeSpan . FromMilliseconds ( 5 ) ) ;
8585
8686 IsFalse ( job1CompletedFlag , "Job1 did not complete in time." ) ;
8787 IsTrue ( job2CompletedFlag , "Job2 did not complete in time." ) ;
@@ -111,8 +111,8 @@ public void Wait_ParentWithChild()
111111 // Waits on handle1 to ensure both handles ran
112112 jobScheduler . Wait ( handle1 ) ;
113113
114- var job1CompletedFlag = job1Completed . WaitOne ( TimeSpan . FromSeconds ( 5 ) ) ;
115- var job2CompletedFlag = job2Completed . WaitOne ( TimeSpan . FromSeconds ( 5 ) ) ;
114+ var job1CompletedFlag = job1Completed . WaitOne ( TimeSpan . FromMilliseconds ( 5 ) ) ;
115+ var job2CompletedFlag = job2Completed . WaitOne ( TimeSpan . FromMilliseconds ( 5 ) ) ;
116116
117117 IsTrue ( job1CompletedFlag , "Job1 did not complete in time." ) ;
118118 IsTrue ( job2CompletedFlag , "Job2 did not complete in time." ) ;
@@ -142,8 +142,8 @@ public void Wait_All_ParentWithChild()
142142 // Waits on handle1 to ensure both handles ran
143143 jobScheduler . Wait ( handle1 , handle2 ) ;
144144
145- var job1CompletedFlag = job1Completed . WaitOne ( TimeSpan . FromSeconds ( 5 ) ) ;
146- var job2CompletedFlag = job2Completed . WaitOne ( TimeSpan . FromSeconds ( 5 ) ) ;
145+ var job1CompletedFlag = job1Completed . WaitOne ( TimeSpan . FromMilliseconds ( 5 ) ) ;
146+ var job2CompletedFlag = job2Completed . WaitOne ( TimeSpan . FromMilliseconds ( 5 ) ) ;
147147
148148 IsTrue ( job1CompletedFlag , "Job1 did not complete in time." ) ;
149149 IsTrue ( job2CompletedFlag , "Job2 did not complete in time." ) ;
@@ -161,17 +161,56 @@ public void Flush_Dependencies()
161161 var job1 = new TestJob ( 1 , ( ) => { job1Completed . Set ( ) ; } ) ;
162162 var job2 = new TestJob ( 2 , ( ) => { job2Completed . Set ( ) ; } ) ;
163163
164- // Job2 should finish after Job1 since its his child.
164+ // Job2 should finish after Job1 since it's his child.
165165 var handle1 = jobScheduler . Schedule ( job1 ) ;
166166 var handle2 = jobScheduler . Schedule ( job2 ) ;
167167 jobScheduler . AddDependency ( handle2 , handle1 ) ;
168168
169169 jobScheduler . Flush ( handle1 ) ;
170+ jobScheduler . Flush ( handle2 ) ;
170171
171- var job1CompletedFlag = job1Completed . WaitOne ( TimeSpan . FromSeconds ( 5 ) ) ;
172- var job2CompletedFlag = job2Completed . WaitOne ( TimeSpan . FromSeconds ( 10 ) ) ;
172+ var job1CompletedFlag = job1Completed . WaitOne ( TimeSpan . FromMilliseconds ( 5 ) ) ;
173+ var job2CompletedFlag = job2Completed . WaitOne ( TimeSpan . FromMilliseconds ( 10 ) ) ;
173174
174175 IsTrue ( job1CompletedFlag , "Job1 did not complete in time." ) ;
175176 IsTrue ( job2CompletedFlag , "Job2 did not complete in time." ) ;
176177 }
178+
179+ [ Test ]
180+ public void OneMoreDependencyThanNodeLimitSize ( )
181+ {
182+ using var jobScheduler = new JobScheduler ( ) ;
183+ var sourceJob = jobScheduler . Schedule ( ) ;
184+ var targetJob = jobScheduler . Schedule ( ) ;
185+ for ( var i = 0 ; i < 9 ; i ++ )
186+ {
187+ var midJob = jobScheduler . Schedule ( ) ;
188+ targetJob . DependsOn ( midJob , jobScheduler ) ;
189+ midJob . DependsOn ( sourceJob , jobScheduler ) ;
190+ jobScheduler . Flush ( midJob ) ;
191+ }
192+
193+ jobScheduler . Flush ( targetJob ) ;
194+ jobScheduler . Flush ( sourceJob ) ;
195+ jobScheduler . Wait ( targetJob ) ;
196+ }
197+
198+ [ Test ]
199+ public void ManyMoreDependencyThanNodeLimitSize ( )
200+ {
201+ using var jobScheduler = new JobScheduler ( ) ;
202+ var sourceJob = jobScheduler . Schedule ( ) ;
203+ var targetJob = jobScheduler . Schedule ( ) ;
204+ for ( var i = 0 ; i < 90 ; i ++ )
205+ {
206+ var midJob = jobScheduler . Schedule ( ) ;
207+ targetJob . DependsOn ( midJob , jobScheduler ) ;
208+ midJob . DependsOn ( sourceJob , jobScheduler ) ;
209+ jobScheduler . Flush ( midJob ) ;
210+ }
211+
212+ jobScheduler . Flush ( targetJob ) ;
213+ jobScheduler . Flush ( sourceJob ) ;
214+ jobScheduler . Wait ( targetJob ) ;
215+ }
177216}
0 commit comments