public void CtorSetHandlerProperty() { int cnt = 0; Handler h = () => ++cnt; Task tk = new Task (h); Assert.AreEqual (h, tk.Handler, "#1"); }
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"); }
public void Execute() { int cnt = 0; Task tk = new Task (() => ++cnt); Assert.IsNull (tk.Execute (), "#1"); Assert.AreEqual (1, cnt, "#2"); }
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"); }
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"); }
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"); }
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) {} }
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> }
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"); }
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"); }
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"); }
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"); }
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"); }
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"); }
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; } } }
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"); }
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"); }