Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        public void CreateCoroutine()
        {
            var runner  = new CoroutineRunner();
            var counter = new Counter();

            _ = runner.Create(() => GetCoroutine(counter));
        }
Ejemplo n.º 10
0
        public void RunCustomCoroutine()
        {
            var runner = new CoroutineRunner();

            var c = runner.Create(() => new CustomCoroutine());

            Assert.False(c.IsCompleted);

            runner.Update();

            Assert.True(c.IsCompleted);
        }
Ejemplo n.º 11
0
 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();
 }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 15
0
        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);
        }
Ejemplo n.º 17
0
        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);
            }
        }
Ejemplo n.º 18
0
        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);
        }
Ejemplo n.º 21
0
        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);
        }
Ejemplo n.º 24
0
        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);
        }
Ejemplo n.º 26
0
        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);
        }
Ejemplo n.º 27
0
        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);
        }
Ejemplo n.º 29
0
 public void SetUp()
 {
     this.completedOnFrame = null;
     this.mayComplete      = false;
     this.coroutineRunner  = CoroutineRunner.Create();
 }