Пример #1
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");
        }
Пример #2
0
        public void CleanedUpReceiverReturnsTask()
        {
            var p = new Port<int> ();
            IPortReceive ipr = p;
            VoidDispatcherQueue dq = new VoidDispatcherQueue ();
            ReceiverTask rt = new EvalTask (true, new NullTask ());
            rt.State = ReceiverTaskState.CleanedUp;
            rt.TaskQueue = dq;
            ipr.RegisterReceiver (rt);

            Assert.AreEqual (1, ipr.GetReceivers ().Length, "#1");
            p.Post (10);
            Assert.AreEqual (1, dq.queuedTasks, "#2");
            Assert.AreEqual (0, ipr.GetReceivers ().Length, "#3");
        }
Пример #3
0
        public void ReceiveWithElementOnThePort()
        {
            Port<int> port = new Port<int> ();
            IPortReceive portRec = port;
            port.Post (10);

            var receiver = port.Receive ();
            var dq = new VoidDispatcherQueue ();
            receiver.TaskQueue = dq;

            Assert.IsNull (receiver.Arbiter, "#1");
            Assert.AreEqual (ReceiverTaskState.Onetime, receiver.State, "#2");

            Assert.IsNull (receiver.Execute (), "#3");
            Assert.AreEqual (ReceiverTaskState.Onetime, receiver.State, "#4");

            IPortReceive rec = port;
            Assert.AreEqual (1, rec.GetReceivers ().Length, "#5");
        }
Пример #4
0
        public void TestTrivialReceiver()
        {
            Port<int> port = new Port<int> ();
            var receiver = port.Receive ();
            var dq = new VoidDispatcherQueue ();
            receiver.TaskQueue = dq;

            Assert.IsNull (receiver.Arbiter, "#1");
            Assert.AreEqual (ReceiverTaskState.Onetime, receiver.State, "#2");

            Assert.IsNull (receiver.Execute (), "#3");
            Assert.AreEqual (ReceiverTaskState.Onetime, receiver.State, "#4");

            IPortReceive rec = port;
            Assert.AreEqual (1, rec.GetReceivers ().Length, "#5");

            ITask res = null;
            Assert.IsFalse (receiver.Evaluate (new PortElement<int>(10), ref res), "#6");
            Assert.IsNotNull (res, "#7");
            Assert.IsNull (res.Execute (), "#8");
            Assert.AreEqual (ReceiverTaskState.CleanedUp, receiver.State, "#9");
            Assert.AreEqual (0, rec.GetReceivers ().Length, "#10");
        }
Пример #5
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");
        }