Ejemplo n.º 1
0
        public void TaskCanOnlyRejectOnce()
        {
            UnityTask t = new UnityTask();

            t.Then(null, (o) => Console.WriteLine("Task Failed"));

            t.Reject(new Exception());
            t.Reject(new Exception());
        }
Ejemplo n.º 2
0
        public void TaskDoesEndOnResolveAndReject()
        {
            bool value       = false;
            bool targetValue = true;

            UnityTask t = new UnityTask();

            t.Then(onEnd: () => value = targetValue);

            t.Resolve(null);

            Assert.AreEqual(value, targetValue);

            value = false;

            t = new UnityTask();
            t.Then(onEnd: () => value = targetValue);

            t.Reject(null);

            Assert.AreEqual(value, targetValue);

            value = false;

            t = new UnityTask();
            t.Then(onEnd: () => value = targetValue);

            t.Notify(0f);

            Assert.AreNotEqual(value, targetValue);
        }
Ejemplo n.º 3
0
        public void TaskDoesFail()
        {
            Exception value       = null;
            Exception targetValue = new Exception();

            UnityTask t = new UnityTask();

            t.Then(null, (ex) => value = ex);

            t.Reject(targetValue);

            Assert.That(value == targetValue);
        }
Ejemplo n.º 4
0
        public void TaskAllSequentialMethodCombinesTasksSequentially()
        {
            const int   taskCount     = 10;
            const int   taskTime      = 50; //ms
            const float tolerance     = 50; //ms
            int         tasksExecuted = 0;
            int         accessCounter = 0;

            Func <UnityTask>[] tasks   = new Func <UnityTask> [taskCount];
            List <Thread>      threads = new List <Thread>(taskCount);

            for (int i = 0; i < taskCount; i++)
            {
                int i_ = i; // Copy i for lambdas

                UnityTask task   = new UnityTask();
                Thread    thread = new Thread((object count) =>
                {
                    try
                    {
                        int count_ = (int)count;

                        Assert.AreEqual(accessCounter, 0, "Two tasks are executing simulaniously");
                        accessCounter++;

                        Assert.AreEqual(tasksExecuted, count_, "Tasks executed should be equal to the current index");
                        Thread.Sleep(taskTime);
                        Assert.AreEqual(tasksExecuted, count_, "Tasks executed should be equal to the current index");

                        tasksExecuted++;

                        accessCounter--;
                        task.Resolve();
                    }
                    catch (Exception e)
                    {
                        task.Reject(e);
                    }
                });

                tasks[i_] = () => { thread.Start(i_); return(task); };

                threads.Add(thread);
            }

            DateTime startTime = DateTime.Now;
            object   result    = UnityTask.AllSequential(tasks).Result; // Result blocks until finished
            TimeSpan totalTime = DateTime.Now - startTime;

            Assert.AreEqual((float)taskTime * taskCount, totalTime.TotalMilliseconds, tolerance);
        }
Ejemplo n.º 5
0
        public void TaskAllMethodCombinesTasksInParallel()
        {
            const int   taskCount = 10;
            const int   taskTime  = 500; //ms
            const float tolerance = 50;  //ms
            const int   testLimit = 600; //ms

            UnityTask[]   tasks   = new UnityTask[taskCount];
            List <Thread> threads = new List <Thread>(taskCount);

            for (int i = 0; i < taskCount; i++)
            {
                UnityTask task = new UnityTask();
                tasks[i] = task;
                Thread thread = new Thread(() =>
                {
                    try
                    {
                        Thread.Sleep(taskTime);
                        task.Resolve();
                    }
                    catch (Exception e)
                    {
                        task.Reject(e);
                    }
                });
                thread.Start();
                threads.Add(thread);
            }

            DateTime startTime = DateTime.Now;
            object   result    = UnityTask.All(tasks).Result; // Result blocks until finished
            TimeSpan totalTime = DateTime.Now - startTime;

            Assert.AreEqual(totalTime.TotalMilliseconds, (float)taskTime, tolerance);
        }