public void Cancel() { var runner = new CoroutineRunner(); var delay = runner.Create(() => AwaitableCoroutine.DelayCount(5)); var co = runner.Create(async() => { await delay; }); Assert.False(delay.IsCompleted); Assert.False(delay.IsCanceled); Assert.False(co.IsCompleted); Assert.False(co.IsCanceled); runner.Update(); Assert.False(delay.IsCompleted); Assert.False(delay.IsCanceled); Assert.False(co.IsCompleted); Assert.False(co.IsCanceled); delay.Cancel(); Assert.False(delay.IsCompleted); Assert.True(delay.IsCanceled); Assert.False(co.IsCompleted); Assert.True(co.IsCanceled); }
public void WaitAnyTest() { var runner = new CoroutineRunner(); var flag = false; var waitAny = runner.Create(() => AwaitableCoroutine.WaitAny(new AwaitableCoroutineBase[] { AwaitableCoroutine.While(() => true), AwaitableCoroutine.While(() => true), AwaitableCoroutine.While(() => true), AwaitableCoroutine.While(() => !flag), }) ); Assert.False(waitAny.IsCompleted); runner.Update(); Assert.False(waitAny.IsCompleted); flag = true; runner.Update(); Assert.True(waitAny.IsCompleted); }
public void WaitAnyWithValuesTest() { var runner = new CoroutineRunner(); var flag = false; var waitAny = runner.Create(() => { return(AwaitableCoroutine.WaitAny <int>(new AwaitableCoroutine <int>[] { AwaitableCoroutine.While(() => true).SelectTo(0), AwaitableCoroutine.While(() => !flag).SelectTo(1), AwaitableCoroutine.While(() => true).SelectTo(2), AwaitableCoroutine.While(() => !flag).SelectTo(3), })); }); Assert.False(waitAny.IsCompleted); runner.Update(); Assert.False(waitAny.IsCompleted); flag = true; runner.Update(); Assert.True(waitAny.IsCompleted); var res = waitAny.Result; Assert.Equal(1, res); }
public void AwaitDelayCountTest() { var runner = new CoroutineRunner(); var counter = new Counter(); var co = runner.Create(async() => { counter.Inc(); await AwaitableCoroutine.DelayCount(5); counter.Inc(); }); Assert.False(co.IsCompleted); Assert.Equal(0, counter.Count); Assert.False(co.IsCompleted); runner.Update(); Assert.Equal(1, counter.Count); Assert.False(co.IsCompleted); for (var i = 0; i < 5; i++) { runner.Update(); Assert.False(co.IsCompleted); Assert.Equal(1, counter.Count); Assert.False(co.IsCompleted); } runner.Update(); Assert.Equal(2, counter.Count); Assert.True(co.IsCompleted); }
public void AwaitForLoop() { var runner = new CoroutineRunner(); var counter = new Counter(); var co = runner.Create(async() => { for (var i = 0; i < 5; i++) { counter.Inc(); await AwaitableCoroutine.Yield(); } counter.Inc(); }); Assert.False(co.IsCompleted); Assert.Equal(0, counter.Count); Assert.False(co.IsCompleted); for (var i = 1; i <= 5; i++) { runner.Update(); Assert.False(co.IsCompleted); Assert.Equal(i, counter.Count); Assert.False(co.IsCompleted); } runner.Update(); Assert.Equal(6, counter.Count); Assert.True(co.IsCompleted); }
public void WaitAllWithValuesTest() { var runner = new CoroutineRunner(); var waitAll = runner.Create(() => { var coroutines = new AwaitableCoroutine <int> [4]; for (var i = 0; i < 4; i++) { coroutines[i] = AwaitableCoroutine.DelayCount(0).SelectTo(i); } return(AwaitableCoroutine.WaitAll <int>(coroutines)); }); Assert.False(waitAll.IsCompleted); runner.Update(); Assert.True(waitAll.IsCompleted); var res = waitAll.Result; Assert.NotNull(res); for (var i = 0; i < 4; i++) { Assert.Equal(i, res[i]); } }
public void RunAwaitDelayCount() { var runner = new CoroutineRunner(); var counter = new Counter(); var co = runner.Create(() => CreateAwaitDelayCount(counter)); Assert.False(co.IsCompleted); runner.Update(); Assert.Equal(1, counter.Count); for (var i = 0; i < 5; i++) { runner.Update(); } runner.Update(); Assert.Equal(2, counter.Count); for (var i = 0; i < 5; i++) { runner.Update(); } runner.Update(); Assert.Equal(3, counter.Count); Assert.True(co.IsCompleted); }
public void AwaitCoroutineWithAnotherRunner() { var runner1 = new CoroutineRunner(); var runner2 = new CoroutineRunner(); var coroutine1 = runner1.Create(() => AwaitableCoroutine.DelayCount(0)); var coroutine2 = runner2.Create(() => coroutine1.AndThen(() => AwaitableCoroutine.DelayCount(0)) ); Assert.False(coroutine1.IsCompleted); Assert.False(coroutine2.IsCompleted); runner1.Update(); Assert.True(coroutine1.IsCompleted); Assert.False(coroutine2.IsCompleted); for (var i = 0; i < 5; i++) { runner1.Update(); Assert.False(coroutine2.IsCompleted); } runner2.Update(); runner2.Update(); runner2.Update(); Assert.True(coroutine2.IsCompleted); }
public void CreateCoroutine() { var runner = new CoroutineRunner(); var counter = new Counter(); _ = runner.Create(() => GetCoroutine(counter)); }
public void RunCustomCoroutine() { var runner = new CoroutineRunner(); var c = runner.Create(() => new CustomCoroutine()); Assert.False(c.IsCompleted); runner.Update(); Assert.True(c.IsCompleted); }
private void InitModules() { ModulesRegister.AddSingleton(CoroutineRunner.Create()) .Then(_ => ManifestRegisterBuilder.BuildAndFillEnvDependant() .Specify($"Cannot build {nameof(ManifestRegister)} using builder") .Then(ModulesRegister.AddSingleton)) .Then(_ => UnityNetworkClientProvider.Create(Option <UnityNetworkClientManifest> .None) .Then(ModulesRegister.AddSingleton)) .Then(_ => GameStateHolderModule.Create() .Then(ModulesRegister.AddSingleton)) .Then(_ => ModulesRegister.AddSingleton(new BlockItemPoolModule())) .ThrowIfError(); }
public void WithExceptionTest() { var runner = new CoroutineRunner(); var co = runner.Create(CreateWithException); Assert.False(co.IsCompleted); runner.Update(); Assert.Throws <MyException>(runner.Update); runner.Update(); Assert.True(co.IsCanceled); }
public void RunAndThenWithLoop() { var runner = new CoroutineRunner(); var counter = new Counter(); var target = 5; var c = runner.Create(() => CreateCoroutine(target, counter)); while (!c.IsCompleted) { runner.Update(); } Assert.Equal(target, counter.Count); }
public void RunEnumeratorCoroutine() { var runner = new CoroutineRunner(); var n = 5; var coroutine = runner.Create(GetEnumerator(n).ToAwaitable); for (var i = 0; i < n; i++) { runner.Update(); Assert.False(coroutine.IsCompleted); } runner.Update(); Assert.True(coroutine.IsCompleted); }
public static void Main(string[] _) { var runner = new CoroutineRunner(); var coroutine = runner.Create(CreateCoroutine); Console.WriteLine("Started!"); while (!coroutine.IsCompleted) { Console.WriteLine($"{s_count}"); runner.Update(); } Console.WriteLine("Finished!"); }
public void CreateCoroutineTest() { var runner = new CoroutineRunner(); var counter = new Counter(); var co = runner.Create(async() => { counter.Inc(); }); Assert.False(co.IsCompleted); Assert.Equal(0, counter.Count); runner.Update(); Assert.Equal(1, counter.Count); Assert.True(co.IsCompleted); }
public void RunCoroutine() { var runner = new CoroutineRunner(); var counter = new Counter(); _ = runner.Create(() => GetCoroutine(counter)); var i = 0; while (i < 3) { runner.Update(); i++; Log($"i: {i}"); Assert.Equal(i, counter.Count); } }
public void RunSingleYieldCoroutine() { var runner = new CoroutineRunner(); var counter = new Counter(); var co = runner.Create(() => SingleYieldCoroutine(counter)); Assert.False(co.IsCompleted); Assert.Equal(0, counter.Count); runner.Update(); Assert.False(co.IsCompleted); Assert.Equal(1, counter.Count); runner.Update(); Assert.True(co.IsCompleted); Assert.Equal(2, counter.Count); }
public void WaitAllOfDelay0Test() { var runner = new CoroutineRunner(); var waitAll = runner.Create(() => AwaitableCoroutine.WaitAll(new AwaitableCoroutineBase[] { AwaitableCoroutine.DelayCount(0), AwaitableCoroutine.DelayCount(0), AwaitableCoroutine.DelayCount(0), AwaitableCoroutine.DelayCount(0), }) ); Assert.False(waitAll.IsCompleted); runner.Update(); Assert.True(waitAll.IsCompleted); }
public void WaitAll2Test() { var runner = new CoroutineRunner(); var waitAll = runner.Create(() => AwaitableCoroutine.WaitAll( AwaitableCoroutine.DelayCount(0), AwaitableCoroutine.DelayCount(0) ) ); Assert.False(waitAll.IsCompleted); // completes children runner.Update(); Assert.True(waitAll.IsCompleted); }
public void RunWhileCoroutine() { var runner = new CoroutineRunner(); var condition = false; var coroutine = runner.Create(() => AwaitableCoroutine.While(() => !condition)); for (var i = 0; i < 3; i++) { runner.Update(); Assert.False(coroutine.IsCompleted); } condition = true; runner.Update(); Assert.True(coroutine.IsCompleted); }
public void RunDelayCount() { var runner = new CoroutineRunner(); var count = 5; bool flag = false; var coroutine = runner.Create(() => AwaitableCoroutine.DelayCount(count).OnCompleted(() => flag = true)); for (var i = 0; i < count; i++) { runner.Update(); Assert.False(coroutine.IsCompleted); } runner.Update(); Assert.True(coroutine.IsCompleted); Assert.True(flag); }
public void WaitAllOfDelayTest() { var runner = new CoroutineRunner(); var waitAll = runner.Create(() => AwaitableCoroutine.WaitAll(new AwaitableCoroutineBase[] { AwaitableCoroutine.DelayCount(1), AwaitableCoroutine.DelayCount(2), AwaitableCoroutine.DelayCount(3), AwaitableCoroutine.DelayCount(4), }) ); Assert.False(waitAll.IsCompleted); for (var i = 0; i < 4; i++) { runner.Update(); } runner.Update(); Assert.True(waitAll.IsCompleted); }
public void RunAndThen() { var runner = new CoroutineRunner(); var counter = new Counter(); var c = runner.Create(() => AwaitableCoroutine.DelayCount(2) .AndThen(() => AwaitableCoroutine.DelayCount(2).OnCompleted(() => { counter.Inc(); Log($"Count: {counter.Count}"); })) ); while (!c.IsCompleted) { runner.Update(); } Assert.True(c.IsCompleted); Assert.Equal(1, counter.Count); }
public void RunUntilCompleted() { var runner1 = new CoroutineRunner(); var runner2 = new CoroutineRunner(); var counter = new Counter(); var coroutine1 = runner1.Create(() => AwaitableCoroutine.DelayCount(3)); var coroutine2 = runner2.Create(() => coroutine1.UntilCompleted(counter.Inc)); Assert.False(coroutine1.IsCompleted); Assert.False(coroutine2.IsCompleted); runner2.Update(); Assert.Equal(1, counter.Count); runner2.Update(); Assert.Equal(2, counter.Count); for (var i = 0; i < 3; i++) { runner1.Update(); Assert.Equal(2, counter.Count); Assert.False(coroutine1.IsCompleted); Assert.False(coroutine2.IsCompleted); } runner2.Update(); Assert.Equal(3, counter.Count); runner1.Update(); Assert.True(coroutine1.IsCompleted); Assert.False(coroutine2.IsCompleted); runner2.Update(); Assert.True(coroutine2.IsCompleted); Assert.Equal(3, counter.Count); }
public void WithExceptionsTest() { var runner = new CoroutineRunner(); var(co1, co2, co3) = runner.Context(() => (CreateWithException(), AwaitableCoroutine.While(() => true), CreateWithException()) ); var waitAll = runner.Create(() => AwaitableCoroutine.WaitAll(co1, co2, co3)); Assert.False(co1.IsCompleted); Assert.False(co2.IsCompleted); runner.Update(); Assert.Throws <System.AggregateException>(runner.Update); runner.Update(); Assert.True(co1.IsCanceled); Assert.False(co2.IsCanceled); Assert.True(co3.IsCanceled); Assert.True(waitAll.IsCanceled); }
public void CancelWithCanceledException() { var runner = new CoroutineRunner(); var delay = runner.Create(() => AwaitableCoroutine.DelayCount(5)); var co = runner.Context <AwaitableCoroutine>(() => AwaitableCoroutine.WaitAll(delay, delay)); Assert.False(delay.IsCompleted); Assert.False(delay.IsCanceled); Assert.False(co.IsCompleted); Assert.False(co.IsCanceled); runner.Update(); Assert.False(delay.IsCompleted); Assert.False(delay.IsCanceled); Assert.False(co.IsCompleted); Assert.False(co.IsCanceled); delay.Cancel(); Assert.False(delay.IsCompleted); Assert.True(delay.IsCanceled); Assert.False(co.IsCompleted); Assert.False(co.IsCanceled); runner.Update(); Assert.False(co.IsCompleted); Assert.True(co.IsCanceled); Assert.True(co.Exception is ChildCanceledException <AwaitableCoroutineBase>); }
public void AwaitYieldTest() { var runner = new CoroutineRunner(); var counter = new Counter(); var co = runner.Create(async() => { counter.Inc(); await AwaitableCoroutine.Yield(); counter.Inc(); }); Assert.False(co.IsCompleted); Assert.Equal(0, counter.Count); Assert.False(co.IsCompleted); runner.Update(); Assert.Equal(1, counter.Count); Assert.False(co.IsCompleted); runner.Update(); Assert.Equal(2, counter.Count); Assert.True(co.IsCompleted); }
public void SetUp() { this.completedOnFrame = null; this.mayComplete = false; this.coroutineRunner = CoroutineRunner.Create(); }