public void CancelExtensionsOnAbortSets( ) { EnumeratorTask a = new EnumeratorTask(SampleTask(), false, true); Assert.IsTrue(a.CancelExtensionsOnAbort); a = new EnumeratorTask(SampleTask(), false, false); Assert.IsFalse(a.CancelExtensionsOnAbort); }
public void IsCompletedFunctional( ) { EnumeratorTask a = new EnumeratorTask(SampleTask(), false); Assert.IsFalse(a.IsCompleted, "Task thinks its completed before it ran."); (a as ITask).Start(); Assert.IsTrue(a.IsCompleted, "Looks like the task doesn't register when it's completed."); }
public void CanExtendTwice( ) { EnumeratorTask a = new EnumeratorTask(SampleTask(), false); a.Extend(SampleExtension()); a.Extend(SampleExtension()); (a as ITask).Start(); Assert.AreEqual(3, i, "Looks like a continued task doesn't actually continue multiple times."); }
public void DoesTask( ) { EnumeratorTask a = new EnumeratorTask(SampleTask(), false); bool result = (a as ITask).Start(); Assert.AreEqual(5, i, "Looks like the task didn't execute when instantiated with an Enumerator."); Assert.IsFalse(result, "Reported that it was napping when it completed."); }
public void ExtendsTask( ) { EnumeratorTask a = new EnumeratorTask(SampleTask(), false); a.Extend(SampleExtension()); (a as ITask).Start(); Assert.AreEqual(4, i, "Looks like a continued task doesn't actually continue."); }
public void ForceAwakeningFunctions( ) { ActionTask t = new ActionTask((_) => System.Threading.Thread.Sleep(0), false); EnumeratorTask a = new EnumeratorTask(SampleTaskWithYield(t), false); (a as ITask).Start(); Assert.IsTrue(a.IsNapping, "Doesn't think it's napping..."); Assert.IsFalse(a.IsCompleted, "Thinks its done while napping."); Assert.AreEqual(6, i, "Ran extensions while napping or didn't run start before napping."); a.ForceAwaken(); (a as ITask).Start(); Assert.AreEqual(8, i, "After napping didn't continue correctly."); Assert.IsTrue(a.IsCompleted, "Doesn't think its done after napping."); }
public void CanCancelExtensions( ) { ActionTask t = new ActionTask(( _ ) => System.Threading.Thread.Sleep(0), false); EnumeratorTask a = new EnumeratorTask(SampleTaskWithYield(t), false); (a as ITask).Start(); Assert.IsTrue(a.IsNapping, "Doesn't think it's napping..."); Assert.IsFalse(a.IsCompleted, "Thinks its done while napping."); Assert.AreEqual(6, i, "Ran extensions while napping or didn't run start before napping."); a.CancelExtensions(); a.IsNapping = false; (a as ITask).Start(); Assert.AreEqual(6, i, "Task didn't correctly cancel extensions when aborted."); }
public void FlagsWorkForEnumerators( ) { EnumeratorTask task = Hikari.ScheduleUnity(EnumTask()); Assert.IsTrue(task.OnUnityThread, "Unity flag not set."); Assert.IsFalse(task.IsDedicated, "Dedicated flag set wrongly."); task = Hikari.Schedule(EnumTask()); Assert.IsFalse(task.OnUnityThread, "Unity flag set wrongly."); Assert.IsFalse(task.IsDedicated, "Dedicated flag set wrongly."); task = Hikari.SpawnDedicatedTask(EnumTask()); Assert.IsFalse(task.OnUnityThread, "Unity flag set wrongly."); Assert.IsTrue(task.IsDedicated, "Dedicated flag not set."); Hikari.Instance.Update(); }
public void CanCancelExtensions( ) { ActionTask t = new ActionTask((_) => System.Threading.Thread.Sleep(0), false); EnumeratorTask a = new EnumeratorTask(SampleTaskWithYield(t), false); (a as ITask).Start(); Assert.IsTrue(a.IsNapping, "Doesn't think it's napping..."); Assert.IsFalse(a.IsCompleted, "Thinks its done while napping."); Assert.AreEqual(6, i, "Ran extensions while napping or didn't run start before napping."); a.CancelExtensions(); a.IsNapping = false; (a as ITask).Start(); Assert.AreEqual(6, i, "Task didn't correctly cancel extensions when aborted."); }
public void DoesNotForceAwakeByDefault( ) { ActionTask t = new ActionTask(( _ ) => System.Threading.Thread.Sleep(0), false); EnumeratorTask a = new EnumeratorTask(SampleTaskWithYield(t), false); bool result = (a as ITask).Start(); Assert.IsTrue(a.IsNapping, "Doesn't think it's napping..."); Assert.IsFalse(a.IsCompleted, "Thinks its done while napping."); Assert.AreEqual(6, i, "Ran extensions while napping or didn't run start before napping."); a.IsNapping = false; Assert.IsTrue(a.IsNapping, "Forced awake by default."); (t as ITask).Start(); result = (a as ITask).Start(); Assert.AreEqual(8, i, "After napping didn't continue correctly."); Assert.IsFalse(result, "Reported it was still napping once finished."); Assert.IsTrue(a.IsCompleted, "Doesn't think its done after napping."); }
public void NappingFunctions( ) { ActionTask t = new ActionTask((_) => System.Threading.Thread.Sleep(0), false); EnumeratorTask a = new EnumeratorTask(SampleTaskWithYield(t), false); bool result = (a as ITask).Start(); Assert.IsTrue(a.IsNapping, "Doesn't think it's napping..."); Assert.IsFalse(a.IsCompleted, "Thinks its done while napping."); Assert.IsTrue(result, "Reported it was completed while napping."); Assert.AreEqual(6, i, "Ran extensions while napping or didn't run start before napping."); (t as ITask).Start(); result = (a as ITask).Start(); Assert.AreEqual(8, i, "After napping didn't continue correctly."); Assert.IsFalse(result, "Reported it was still napping once finished."); Assert.IsTrue(a.IsCompleted, "Doesn't think its done after napping."); }
public void NappingForTimeFunctions( ) { EnumeratorTask a = new EnumeratorTask(SampleTaskWithYieldForSeconds(), false); DateTime finish = DateTime.Now + TimeSpan.FromSeconds(1); bool result = (a as ITask).Start(); Assert.IsTrue(a.IsNapping, "Doesn't think it's napping..."); Assert.IsFalse(a.IsCompleted, "Thinks its done while napping."); Assert.IsTrue(result, "Reported it was completed while napping."); Assert.AreEqual(6, i, "Ran extensions while napping or didn't run start before napping."); result = (a as ITask).Start(); Assert.IsTrue(a.IsNapping, "Doesn't think it's napping..."); Assert.IsFalse(a.IsCompleted, "Thinks its done while napping."); Assert.IsTrue(result, "Reported it was completed while napping."); Assert.AreEqual(6, i, "Ran extensions while napping or didn't run start before napping."); System.Threading.Thread.Sleep(1100); result = (a as ITask).Start(); Assert.AreEqual(8, i, "After napping didn't continue correctly."); Assert.IsFalse(result, "Reported it was still napping once finished."); Assert.IsTrue(a.IsCompleted, "Doesn't think its done after napping."); }
/// <summary> /// Creates a dedicated task and a thread for it. /// /// Dedicated tasks will not relinquish control of their thread while /// napping, allowing them to restart immediately after napping. /// /// Once the task has completed, its thread will be recycled in Hikari /// and may be used for other tasks. /// /// Enumerator tasks may yield null to allow napping, or yield another /// Task to nap until that task finishes, then start up again. /// </summary> /// <param name="task">The enumerator to run on the new dedicated task.</param> /// <param name="cancel_extensions_on_abort">Whether or not to cancel extensions automatically when the Task is aborted. Defaults to true.</param> /// <returns>The new dedicated task.</returns> public static EnumeratorTask SpawnDedicatedTask ( System.Collections.IEnumerator task, bool cancel_extensions_on_abort = true ) { EnumeratorTask t = new EnumeratorTask(task, false, cancel_extensions_on_abort, true); Instance.threadManager.SpawnDedicatedThread(t); return t; }
public void PostEnumeratorTask(EnumeratorTask task) { StartCoroutine(task()); }
public void ForceAwakeningFunctions( ) { ActionTask t = new ActionTask(( _ ) => System.Threading.Thread.Sleep(0), false); EnumeratorTask a = new EnumeratorTask(SampleTaskWithYield(t), false); (a as ITask).Start(); Assert.IsTrue(a.IsNapping, "Doesn't think it's napping..."); Assert.IsFalse(a.IsCompleted, "Thinks its done while napping."); Assert.AreEqual(6, i, "Ran extensions while napping or didn't run start before napping."); a.ForceAwaken(); (a as ITask).Start(); Assert.AreEqual(8, i, "After napping didn't continue correctly."); Assert.IsTrue(a.IsCompleted, "Doesn't think its done after napping."); }
/// <summary> /// Schedules a task to be run on Unity's thread. /// /// Enumerator tasks may yield null to allow napping, or yield another /// Task to nap until that task finishes, then start up again. /// </summary> /// <param name="to_schedule">The enumerator to run in the task.</param> /// <param name="cancel_extensions_on_abort">Whether or not to cancel extensions automatically when the Task is aborted. Defaults to true.</param> /// <returns>The task that was added.</returns> public static EnumeratorTask ScheduleUnity ( System.Collections.IEnumerator to_schedule, bool cancel_extensions_on_abort = true ) { EnumeratorTask t = new EnumeratorTask(to_schedule, true, cancel_extensions_on_abort); Instance.unityManager.EnqueueTask(t); return t; }