public async void First_Win_Sync()
        {
            var ttr = new TestTaskRunner();

            var t = AsyncEnumerable.Amb(
                AsyncEnumerable.Range(1, 5)
                .DoOnNext(async v => { await ttr.CreateCompleteTask(500); }),
                AsyncEnumerable.Range(6, 5)
                .DoOnNext(async v => { await ttr.CreateCompleteTask(1000); })
                )
                    .GetAsyncEnumerator()
            ;

            try
            {
                for (var i = 1; i <= 5; i++)
                {
                    var t0 = t.MoveNextAsync();

                    await ttr.TaskQueued(i * 500);

                    ttr.AdvanceTimeBy(500);

                    await t0;

                    Assert.Equal(i, t.Current);
                }

                Assert.False(await t.MoveNextAsync());
            }
            finally
            {
                await t.DisposeAsync();
            }
        }
        public async void First_Win_Sync()
        {
            var ttr = new TestTaskRunner();

            var t = AsyncEnumerable.Amb(
                AsyncEnumerable.Range(1, 5)
                .DoOnNext(async v => { await ttr.CreateCompleteTask(500); }),
                AsyncEnumerable.Range(6, 5)
                .DoOnNext(async v => { await ttr.CreateCompleteTask(1000); })
                )
                    .GetAsyncEnumerator(default)
Beispiel #3
0
        public async void Time_Moves_Forward()
        {
            var ttr = new TestTaskRunner(1000);

            var t1 = ttr.CreateLambdaTask <long>(tcs => tcs.SetResult(ttr.Now), 0, true);
            var t2 = ttr.CreateLambdaTask <long>(tcs => tcs.SetResult(ttr.Now), 500, true);
            var t3 = ttr.CreateLambdaTask <long>(tcs => tcs.SetResult(ttr.Now), 1000, true);
            var t4 = ttr.CreateLambdaTask <long>(tcs => tcs.SetResult(ttr.Now), 1500, true);

            ttr.AdvanceTimeBy(500);

            Assert.Equal(1000, await t1);
            Assert.Equal(1000, await t2);
            Assert.Equal(1000, await t3);
            Assert.Equal(1500, await t4);
        }
Beispiel #4
0
        public void Simple_Absolute()
        {
            var ttr = new TestTaskRunner(50);

            Assert.Equal(50L, ttr.Now);
            Assert.False(ttr.HasTasks);

            var t1 = ttr.CreateCompleteTask(100, true);

            Assert.True(ttr.HasTasks);
            Assert.False(t1.IsCompleted, "t1 is completed");

            ttr.AdvanceTimeBy(50);

            Assert.False(ttr.HasTasks, "more tasks?");
            Assert.True(t1.IsCompleted, "t1 is not completed");
        }
Beispiel #5
0
        public async void RightTaskQueued_Absolute()
        {
            for (var i = 0; i < 1000; i++)
            {
                var ttr = new TestTaskRunner(50);

                var t1 = Task.Run(() => { ttr.CreateCompleteTask(100, true); });
                var t2 = Task.Run(() => { ttr.CreateCompleteTask(101, true); });

                await ttr.TaskQueued(101);

                await t1;

                await t2;

                ttr.AdvanceTimeBy(101);

                Assert.False(ttr.HasTasks);
            }
        }
Beispiel #6
0
        public void Callback_Absolute()
        {
            var ttr   = new TestTaskRunner(50);
            var count = 0;

            var t1 = ttr.CreateActionTask(() => count++, 50, true);

            var t2 = ttr.CreateActionTask(() => throw new InvalidOperationException(), 100, true);

            var t3 = ttr.CreateLambdaTask <long>(tcs => tcs.SetResult(ttr.Now), 150, true);
            var t4 = ttr.CreateLambdaTask <long>(tcs => throw new InvalidOperationException(), 150, true);

            Assert.Equal(0, count);

            // T = 50 ----------------------------------------------

            ttr.AdvanceTimeBy(0);

            Assert.True(t1.IsCompleted);
            Assert.Equal(1, count);

            // T = 100 ----------------------------------------------

            ttr.AdvanceTimeBy(50);

            Assert.True(t2.IsFaulted);
            Assert.True(t2.Exception.InnerException is InvalidOperationException);
            Assert.False(t3.IsCompleted);
            Assert.False(t4.IsCompleted);

            // T = 150 ----------------------------------------------

            ttr.AdvanceTimeBy(50);

            Assert.True(t3.IsCompleted);
            Assert.Equal(150L, t3.Result);

            Assert.True(t4.IsFaulted);
            Assert.True(t4.Exception.InnerException is InvalidOperationException);
        }
Beispiel #7
0
        public void Mixed()
        {
            var ttr = new TestTaskRunner();

            var ex = new InvalidOperationException();

            var t1 = ttr.CreateErrorTask(ex);
            var t2 = ttr.CreateErrorTask <int>(ex, 100);

            var t3 = ttr.CreateValueTask("hello", 100);
            var t4 = ttr.CreateValueTask("world", 200);

            var t5 = ttr.CreateCancelTask(200);

            var t6 = ttr.CreateCancelTask <int>(250);

            // T = 50 ------------------------------------------

            ttr.AdvanceTimeBy(50);
            Assert.Equal(50, ttr.Now);
            Assert.True(ttr.HasTasks);

            Assert.False(t2.IsCompleted);
            Assert.False(t3.IsCompleted);
            Assert.False(t4.IsCompleted);
            Assert.False(t5.IsCompleted);
            Assert.False(t6.IsCompleted);

            Assert.True(t1.IsFaulted);
            Assert.Equal(ex, t1.Exception.InnerException);

            // T = 100 ------------------------------------------

            ttr.AdvanceTimeBy(50);
            Assert.Equal(100, ttr.Now);
            Assert.True(ttr.HasTasks);

            Assert.False(t4.IsCompleted);
            Assert.False(t5.IsCompleted);
            Assert.False(t6.IsCompleted);

            Assert.True(t2.IsFaulted);
            Assert.Equal(ex, t2.Exception.InnerException);

            Assert.True(t3.IsCompleted);
            Assert.Equal("hello", t3.Result);

            // T = 200 ------------------------------------------

            ttr.AdvanceTimeBy(100);
            Assert.Equal(200, ttr.Now);
            Assert.True(ttr.HasTasks);

            Assert.False(t6.IsCompleted);

            Assert.True(t4.IsCompleted);
            Assert.Equal("world", t4.Result);

            Assert.True(t5.IsCanceled);

            // T = 250 ------------------------------------------

            ttr.AdvanceTimeBy(50);
            Assert.Equal(250, ttr.Now);
            Assert.False(ttr.HasTasks);

            Assert.True(t6.IsCanceled);
        }