Inheritance: TaskCommon
Example #1
0
 public void CtorSetHandlerProperty()
 {
     int cnt = 0;
     Handler h = () => ++cnt;
     Task tk = new Task (h);
     Assert.AreEqual (h, tk.Handler, "#1");
 }
Example #2
0
        public void DontRemoveOnetimeReceiversThatReturnFalse()
        {
            Task tk0 = new Task(()=>{});
            Task tk1 = new Task(()=>{});
            EvalTask rv0 = new EvalTask (true, tk0);
            VoidDispatcherQueue dq0 = new VoidDispatcherQueue ();
            rv0.TaskQueue = dq0;
            EvalTask rv1 = new EvalTask (false, tk1);
            VoidDispatcherQueue dq1 = new VoidDispatcherQueue ();
            rv1.TaskQueue = dq1;

            Port<int> port = new Port<int> ();
            IPortReceive ipr = port;

            ipr.RegisterReceiver (rv0);

            Assert.AreEqual (1, ipr.GetReceivers ().Length, "#1");
            port.Post (10);
            Assert.AreEqual (1, dq0.queuedTasks, "#2");
            Assert.AreEqual (0, ipr.GetReceivers ().Length, "#3");

            ipr.RegisterReceiver (rv1);
            Assert.AreEqual (1, ipr.GetReceivers ().Length, "#4");
            port.Post (10);
            Assert.AreEqual (1, dq1.queuedTasks, "#5");
            Assert.AreEqual (1, ipr.GetReceivers ().Length, "#6");
        }
Example #3
0
        public void Execute()
        {
            int cnt = 0;
            Task tk = new Task (() => ++cnt);

            Assert.IsNull (tk.Execute (), "#1");
            Assert.AreEqual (1, cnt, "#2");
        }
Example #4
0
        public void PartialCloneDoesntCloneHandler()
        {
            int cnt = 0;
            Handler h = () => ++cnt;
            Task tk = new Task (h);
            ITask it = tk.PartialClone ();
            Assert.IsTrue (it is Task, "#1");

            Task tk2 = (Task)it;
            Assert.AreEqual (h, tk2.Handler, "#2");
        }
Example #5
0
        public void ReceiverForIteratorWithArbiter()
        {
            Task<int> task = new Task<int> ((i)=>{});
            Port<int> port = new Port<int> ();
            var arbiter = new NakedArbiter (task);
            arbiter.TaskQueue = new VoidDispatcherQueue ();

            var receiver = port.Receive ();
            receiver.Arbiter = arbiter;

            ITask res = null;
            Assert.IsFalse (receiver.Evaluate (new PortElement<int>(10), ref res), "#1");
            Assert.AreEqual (task, res, "#2");
            Assert.IsNotNull (arbiter.taskPassed, "#3");
        }
Example #6
0
        public void CleanupTask()
        {
            IPortReceive pa = new Port <int> ();
            IPortReceive pb = new Port <string> ();
            ITask task = new Task<int, string> ((i, s) => { });
            var mr = new MultipleItemReceiver (task, pa, pb);
            var dq = new SerialDispatchQueue ();
            mr.TaskQueue = dq;

            mr.Execute ();
            ((Port<int>)pa).Post (10);
            Assert.AreEqual (0, pa.ItemCount, "#1");
            mr.Cleanup (task);

            Assert.AreEqual (1, pa.ItemCount, "#2");
            Assert.AreEqual (0, pb.ItemCount, "#3");
        }
Example #7
0
        public void PortElementCountAndItemProperties()
        {
            int cnt = 0;
            Task tk = new Task (() => ++cnt);

            Assert.AreEqual (0, tk.PortElementCount, "#1");
            try {
                tk [0] = new PortElement<int> (10);
                Assert.Fail ("#2");
            } catch (NotSupportedException) {}

            try {
                object f = tk [0];
                Assert.Fail ("#3");
            } catch (NotSupportedException) {}
        }
Example #8
0
        public void Task1SetInvalidItem()
        {
            int cnt = 0;
            var tk = new Task<int> ((a) => cnt += a);

            try {
                tk [1] = new PortElement<int> (2);
                Assert.Fail ("#1");
            } catch (ArgumentException) {}

            try {
                var obj = tk [1];
                Assert.Fail ("#2");
            } catch (ArgumentException) {}

            try {
                tk [0] = new PortElement<double> (2);
                Assert.Fail ("#3");
            } catch (InvalidCastException) {} //LAMEIMPL it should report a better error and take any IPortElement<T>
        }
Example #9
0
 public void Task1PortElementCount()
 {
     int cnt = 0;
     var tk = new Task<int> ((a) => cnt += a);
     Assert.AreEqual (1, tk.PortElementCount, "#1");
     tk = new Task<int> (99, (a) => cnt += a);
     Assert.AreEqual (1, tk.PortElementCount, "#2");
 }
Example #10
0
        public void Execute3()
        {
            int cnt = 0;
            IPortReceive pa = new Port <int> ();
            IPortReceive pb = new Port <string> ();
            ITask task = new Task<int, string> ( (i, s) => { cnt += i + s.Length; });
            var mr = new MultipleItemReceiver (task, pa, pb);
            var dq = new SerialDispatchQueue ();
            mr.TaskQueue = dq;

            mr.Execute ();

            var a = (Port<int>)pa;
            var b = (Port<string>)pb;

            b.Post ("hello");
            Assert.AreEqual (0, cnt, "#1");
            a.Post (10);

            Assert.AreEqual (15, cnt, "#2");
        }
Example #11
0
        public void Task1ExecuteWithBoundObject()
        {
            int cnt = 0;
            var tk = new Task<int> (5, (a) => cnt += a);
            tk.Execute ();
            Assert.AreEqual (5, cnt, "#1");
            tk.Execute ();
            Assert.AreEqual (10, cnt, "#2");

            Assert.IsNotNull (tk [0], "#3");
            tk [0] = new PortElement<int> (2);
            tk.Execute ();
            Assert.AreEqual (12, cnt, "#4");
        }
Example #12
0
        public void Task1Execute()
        {
            int cnt = 0;
            var tk = new Task<int> ((a) => cnt += a);

            try {
                tk.Execute ();
                Assert.Fail ("#1"); //no value at port 1
            } catch (NullReferenceException) {}

            var pe = new PortElement<int> (10);
            tk [0] = pe;
            tk.Execute ();
            Assert.AreEqual (10, cnt, "#2");
            Assert.AreEqual (pe, tk [0], "#3");

            tk [0] = new PortElement<int> (2);
            tk.Execute ();
            Assert.AreEqual (12, cnt, "#3");
        }
Example #13
0
        public void ScheduleAllTaskReturnedByEvaluate()
        {
            Task tk0 = new Task(()=>{});
            Task tk1 = new Task(()=>{});
            EvalTask rv0 = new EvalTask (false, tk0);
            VoidDispatcherQueue dq0 = new VoidDispatcherQueue ();
            rv0.TaskQueue = dq0;
            EvalTask rv1 = new EvalTask (false, tk1);
            VoidDispatcherQueue dq1 = new VoidDispatcherQueue ();
            rv1.TaskQueue = dq1;

            Port<int> port = new Port<int> ();
            IPortReceive ipr = port;

            ipr.RegisterReceiver (rv0);
            ipr.RegisterReceiver (rv1);

            port.Post (10);

            Assert.AreEqual (1, dq0.queuedTasks, "#1");
            Assert.AreEqual (1, dq1.queuedTasks, "#2");
            Assert.AreEqual (2, ipr.GetReceivers ().Length, "#3");
        }
Example #14
0
        public void PostToPortSetUserTaskItem()
        {
            IPortReceive pa = new Port <int> ();
            IPortReceive pb = new Port <string> ();
            ITask task = new Task<int, string> ((i, s) => { });
            var mr = new MultipleItemReceiver (task, pa, pb);
            var dq = new SerialDispatchQueue ();
            mr.TaskQueue = dq;

            mr.Execute ();
            ((Port<int>)pa).Post (10);

            Assert.AreEqual (10, task [0].Item, "#1");
        }
Example #15
0
 public bool Evaluate(ReceiverTask receiver, ref ITask deferredTask)
 {
     lock (_lock) {
         if (done) {
             deferredTask = null;
             return false;
         } else {
             state = ArbiterTaskState.Done;
             deferredTask = new Task<ITask> (deferredTask, this.Finish);
             done = true;
             return true;
         }
     }
 }
Example #16
0
        public void Task1PartialCloneDoesntCloneArgument()
        {
            int cnt = 0;
            Handler<int> h = (a) => cnt += a;
            PortElement<int> pe = new PortElement<int> (10);
            var tk = new Task<int> (h);
            tk [0] = pe;

            ITask it = tk.PartialClone ();
            Assert.IsTrue (it is Task<int>, "#1");

            var tk2 = (Task<int>)it;
            Assert.IsNull (tk2 [0], "#2");

            tk = new Task<int> (99, h);
            it = tk.PartialClone ();
            Assert.IsNull (it [0], "#3");
        }
Example #17
0
        public void Execute2()
        {
            int cnt = 0;
            IPortReceive pa = new Port <int> ();
            IPortReceive pb = new Port <string> ();
            ITask task = new Task<int, string> ( (i, s) => { cnt += i + s.Length; });
            var mr = new MultipleItemReceiver (task, pa, pb);
            var dq = new SerialDispatchQueue ();
            mr.TaskQueue = dq;

            mr.Execute ();

            var a = (Port<int>)pa;
            var b = (Port<string>)pb;

            a.Post (10);
            Assert.AreEqual (0, pa.ItemCount, "#1");
            Assert.AreEqual (0, cnt, "#2");

            b.Post ("hello");
            Assert.AreEqual (15, cnt, "#3");

            //it's a one time thing
            Assert.AreEqual (0, pa.GetReceivers ().Length, "#4");
            Assert.AreEqual (0, pb.GetReceivers ().Length, "#5");

            a.Post (1);
            Assert.AreEqual (15, cnt, "#6");
            b.Post ("x");
            Assert.AreEqual (15, cnt, "#7");
        }