public void CleanupDoneInlineWithoutArbiter() { Port<int> pa = new Port<int> (); Port<string> pb = new Port<string> (); Type[] types = new Type[] { typeof (int), typeof (string) }; IPortReceive[] ports = new IPortReceive[] { pa, pb }; int count = 1; Handler<ICollection[]> handler = (cols) => { }; var mig = new MultipleItemGather (types, ports, count, handler); var dq = new SerialDispatchQueue (); dq.exec = false; mig.TaskQueue = dq; mig.Execute (); var rec = ports [0].GetReceivers () [0]; var rec2 = ports [0].GetReceivers () [1]; ITask task = null; Assert.IsTrue (rec.Evaluate (new PortElement<int> (10), ref task), "#1"); Assert.IsNotNull (task, "#2"); Assert.AreEqual (ReceiverTaskState.CleanedUp, mig.State, "#3"); Assert.AreEqual (ReceiverTaskState.Persistent, rec.State, "#4"); Assert.AreEqual (ReceiverTaskState.Persistent, rec2.State, "#5"); Assert.AreEqual (0, dq.count, "#6"); }
public void Activate() { int exec = 0; var task = new Task (() =>{ ++exec; }); DispatcherQueue dq = new SerialDispatchQueue (); Assert.IsNull (task.TaskQueue, "#1"); Arbiter.Activate (dq, task); Assert.AreEqual (1, exec, "#4"); Arbiter.Activate (dq, task, task, task); Assert.AreEqual (4, exec, "#5"); }
public void ActivateBadArgs() { var task = new Task (() =>{ }); DispatcherQueue dq = new SerialDispatchQueue (); try { Arbiter.Activate (null, task); Assert.Fail ("#1"); } catch (ArgumentNullException) {} try { Arbiter.Activate (dq, null); Assert.Fail ("#2"); } catch (ArgumentNullException) {} }
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 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"); }
public void ExecutePersistent() { int cnt = 0; IPortReceive pa = new Port <int> (); IPortReceive pb = new Port <string> (); var mr = new MultipleItemReceiver (Arbiter.FromHandler (() => { ++cnt; }), pa, pb); var dq = new SerialDispatchQueue (); mr.TaskQueue = dq; mr.State = ReceiverTaskState.Persistent; Assert.AreEqual (0, pa.GetReceivers ().Length, "#1"); Assert.AreEqual (0, pb.GetReceivers ().Length, "#2"); mr.Execute (); Assert.AreEqual (1, pa.GetReceivers ().Length, "#3"); Assert.AreEqual (1, pb.GetReceivers ().Length, "#4"); Assert.AreEqual (ReceiverTaskState.Onetime, pa.GetReceivers ()[0].State, "#5"); }
public void ReceiveFromPortSetUnderSharedMode() { var ps = new PortSet (typeof (int), typeof(string)); var dq = new SerialDispatchQueue (); ps.Mode = PortSetMode.SharedPort; try { Arbiter.ReceiveFromPortSet (true, ps, (int a)=> { }); Assert.Fail ("#1"); } catch (InvalidOperationException) {} }
public void ReceiveFromPortSet() { var ps = new PortSet (typeof (int), typeof(string)); var dq = new SerialDispatchQueue (); int cnt = 1; var task = Arbiter.ReceiveFromPortSet (true, ps, (int a)=> { cnt += a; }); task.TaskQueue = dq; task.Execute (); Assert.AreEqual (1, ((IPortReceive)ps [typeof (int)]).GetReceivers().Length, "#1"); ps [typeof (int)].PostUnknownType (10); Assert.AreEqual (11, cnt, "#2"); }
public void ExecutePart2() { int count = 3; var pa = new Port<int> (); var pb = new Port<string> (); var ra = Arbiter.Receive (false, pa, (i) => count += i); var rb = new NakedReceiver (pb, new Task<string>((s) => count += s.Length)); var dq = new SerialDispatchQueue (); var c = new Choice (ra, rb); c.TaskQueue = dq; IPortReceive pra = pa; IPortReceive prb = pb; c.Execute (); pa.Post (10); Assert.AreEqual (ArbiterTaskState.Done, c.ArbiterState, "#1"); Assert.AreEqual (0, c.PortElementCount, "#2"); Assert.AreEqual (0, pra.GetReceivers ().Length, "#3"); Assert.AreEqual (0, prb.GetReceivers ().Length, "#4"); Assert.AreEqual (c, ra.Arbiter, "#5"); Assert.AreEqual (c, rb.Arbiter, "#6"); Assert.IsNull (ra.ArbiterContext, "#7"); Assert.IsNull (rb.ArbiterContext, "#8"); Assert.IsNull (ra.ArbiterCleanupHandler, "#9"); Assert.IsNull (rb.ArbiterCleanupHandler, "#10"); Assert.AreEqual (0, rb.execute, "#11"); Assert.AreEqual (1, rb.set_arbiter, "#12"); Assert.AreEqual (1, rb.cleanup, "#13"); Assert.AreEqual (0, rb.cleanup_task, "#14"); Assert.AreEqual (ReceiverTaskState.CleanedUp, ra.State, "#15"); Assert.AreEqual (ReceiverTaskState.CleanedUp, rb.State, "#16"); Assert.AreEqual (13, count, "#17"); }
public void EvalateOnLooserReturnsNullTask() { int winner = 0; var pa = new Port<int> (); var pb = new Port<string> (); var ra = Arbiter.Receive (false, pa, (i) => { winner = 1; }); var rb = Arbiter.Receive (false, pb, (s) => { winner = 2; }); var dq = new SerialDispatchQueue (); var c = new Choice (ra, rb); c.TaskQueue = dq; IPortReceive pra = pa; IPortReceive prb = pb; c.Execute (); pa.Post (10); ITask tk = null; Assert.IsFalse (rb.Evaluate (new PortElement<string> (""), ref tk), "#1"); Assert.IsNull (tk, "#2"); }
public void CleanupTask() { Port<int> pa = new Port<int> (); Port<string> pb = new Port<string> (); Type[] types = new Type[] { typeof (int), typeof (string) }; IPortReceive[] ports = new IPortReceive[] { pa, pb }; int count = 2; Handler<ICollection[]> handler = (cols) => { }; var mig = new MultipleItemGather (types, ports, count, handler); var dq = new SerialDispatchQueue (); mig.TaskQueue = dq; mig.Execute (); ITask task = null; var rec = ports [0].GetReceivers () [0]; Assert.IsTrue (rec.Evaluate (new PortElement<int> (10), ref task), "#1"); Assert.IsNull (task, "#2"); Assert.IsTrue (rec.Evaluate (new PortElement<int> (20), ref task), "#3"); Assert.IsNotNull (task, "#4"); mig.Cleanup (task); Assert.AreEqual (2, pa.ItemCount, "#4"); Assert.AreEqual (0, pb.ItemCount, "#5"); Assert.AreEqual (10, pa.Test (), "#6"); Assert.AreEqual (20, pa.Test (), "#7"); }
public void WhatResultDataHas2() { Port<int> pa = new Port<int> (); Port<string> pb = new Port<string> (); ICollection[] res = null; Type[] types = new Type[] { typeof (int), typeof (string) }; IPortReceive[] ports = new IPortReceive[] { pa, pb }; int count = 2; Handler<ICollection[]> handler = (cols) => res = cols;; var mig = new MultipleItemGather (types, ports, count, handler); var dq = new SerialDispatchQueue (); mig.TaskQueue = dq; mig.Execute (); pa.Post (10); //result is post order independent pb.Post ("hw"); Assert.IsTrue (res [0] is List<object>, "#1"); Assert.IsTrue (res [1] is List<object>, "#2"); var la = res [0] as List<object>; var lb = res [1] as List<object>; Assert.AreEqual (10, la [0], "#3"); Assert.AreEqual ("hw", lb [0], "#4"); }
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 PostToPortsAfterExecute6() { Port<int> pa = new Port<int> (); Port<string> pb = new Port<string> (); int resA = 0; int resB = 0; Type[] types = new Type[] { typeof (int), typeof (string) }; IPortReceive[] ports = new IPortReceive[] { pa, pb }; int count = 2; Handler<ICollection[]> handler = (cols) => { resA += cols[0].Count ; resB += cols[1].Count; }; var mig = new MultipleItemGather (types, ports, count, handler); var dq = new SerialDispatchQueue (); mig.TaskQueue = dq; mig.Execute (); pb.Post ("hw"); pa.Post (10); Assert.AreEqual (1, resA, "#1"); Assert.AreEqual (1, resB, "#2"); Assert.AreEqual (1, dq.count, "#3"); Assert.AreEqual (ReceiverTaskState.CleanedUp, mig.State, "#4"); }
public void ExecuteWithArbiter2() { Port<int> pa = new Port<int> (); Port<string> pb = new Port<string> (); Type[] types = new Type[] { typeof (int), typeof (string) }; IPortReceive[] ports = new IPortReceive[] { pa, pb }; int count = 1; Handler<ICollection[]> handler = (cols) => { }; var mig = new MultipleItemGather (types, ports, count, handler); var arbiter = new NakedArbiter (false); var dq = new SerialDispatchQueue (); arbiter.TaskQueue = dq; mig.Arbiter = arbiter; var rec = ports [0].GetReceivers () [0]; ITask task = null; Assert.IsFalse (rec.Evaluate (new PortElement<int> (10), ref task), "#1"); Assert.AreEqual (1, arbiter.calls, "#2"); Assert.IsNotNull (task, "#3"); Assert.AreEqual (ReceiverTaskState.Onetime, mig.State, "#4"); Assert.AreEqual (ReceiverTaskState.Persistent, rec.State, "#5"); }
public void ExecuteWithArbiter1() { Port<int> pa = new Port<int> (); Port<string> pb = new Port<string> (); bool handler_called = false; Type[] types = new Type[] { typeof (int), typeof (string) }; IPortReceive[] ports = new IPortReceive[] { pa, pb }; int count = 2; Handler<ICollection[]> handler = (cols) => { handler_called = true; }; var mig = new MultipleItemGather (types, ports, count, handler); var arbiter = new NakedArbiter (false); var dq = new SerialDispatchQueue (); arbiter.TaskQueue = dq; mig.Arbiter = arbiter; Assert.AreEqual (1, ports [0].GetReceivers ().Length, "#1"); Assert.AreEqual (1, ports [1].GetReceivers ().Length, "#2"); pa.Post (10); Assert.AreEqual (1, ports [0].GetReceivers ().Length, "#4"); Assert.AreEqual (1, ports [1].GetReceivers ().Length, "#3"); Assert.AreEqual (0, dq.count, "#4"); Assert.AreEqual (0, arbiter.calls, "#5"); Assert.AreEqual (ReceiverTaskState.Onetime, mig.State, "#6"); Assert.IsFalse (handler_called, "#13"); pa.Post (10); Assert.AreEqual (1, ports [0].GetReceivers ().Length, "#7"); Assert.AreEqual (1, ports [1].GetReceivers ().Length, "#8"); Assert.AreEqual (1, dq.count, "#9"); Assert.AreEqual (1, arbiter.calls, "#10"); Assert.AreEqual (ReceiverTaskState.Onetime, mig.State, "#11"); Assert.IsTrue (handler_called, "#14"); }
public void Execute2() { Type[] types = new Type[] { typeof (int), typeof (string) }; IPortReceive[] ports = new IPortReceive[] { new Port<int>(), new Port<string> () }; int count = 2; Handler<ICollection[]> handler = (cols) => {}; var mig = new MultipleItemGather (types, ports, count, handler); var dq = new SerialDispatchQueue (); mig.TaskQueue = dq; Assert.AreEqual (0, ports [0].GetReceivers ().Length, "#1"); Assert.AreEqual (0, ports [1].GetReceivers ().Length, "#2"); mig.Execute (); Assert.AreEqual (2, ports [0].GetReceivers ().Length, "#3"); Assert.AreEqual (2, ports [1].GetReceivers ().Length, "#4"); Assert.AreEqual (ReceiverTaskState.Persistent, ports [0].GetReceivers ()[0].State, "#5"); Assert.AreEqual (ReceiverTaskState.Persistent, ports [0].GetReceivers ()[1].State, "#6"); Assert.AreEqual (ReceiverTaskState.Persistent, ports [1].GetReceivers ()[0].State, "#7"); Assert.AreEqual (ReceiverTaskState.Persistent, ports [1].GetReceivers ()[1].State, "#8"); Assert.AreEqual (0, dq.count, "#9"); }
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"); }