public void CreatesNewThreadsWhenMoreThanAskedForWorkItems( )
{
ThreadManager tm = new ThreadManager(TimeSpan.MinValue, TimeSpan.MaxValue,
2, TimeSpan.MaxValue);
int i = -2;
int cur_threads = tm.NumThreads;
for ( int j = 0; j < 3; j++ )
tm.EnqueueTask(new ActionTask(( _ ) => i++, false));
bool result = tm.SpawnThreadIfNeeded();
Assert.IsTrue(result, "Did not report that it spawned more threads.");
Assert.IsTrue(cur_threads < tm.NumThreads, "Did not actually spawn more threads.");
ThreadManager tm2 = new ThreadManager(TimeSpan.MinValue, TimeSpan.MaxValue,
6, TimeSpan.MaxValue);
cur_threads = tm2.NumThreads;
for ( i = 0; i < 3; i++ )
tm2.EnqueueTask(new ActionTask(( _ ) => i++, false));
result = tm2.SpawnThreadIfNeeded();
Assert.IsFalse(result, "Reported that it spawned more threads before reaching the max queue length.");
Assert.IsTrue(cur_threads == tm2.NumThreads, "Spawned a new thread before reaching the max queue length.");
for ( i = 0; i < 3; i++ )
tm2.EnqueueTask(new ActionTask(( _ ) => i++, false));
result = tm2.SpawnThreadIfNeeded();
Assert.IsTrue(result, "Did not report that it spawned more threads.");
Assert.IsTrue(cur_threads < tm2.NumThreads, "Did not actually spawn more threads.");
}