public virtual void ShovelTest() { int count = 100; int[] expected = Enumerable.Range(0, count).ToArray(); List <string> actual = new List <string>(); using (IChannel <int> c = new mq.Channel <int>("test-ShovelTest1" + Salt)) using (IChannel <string> w = new mq.Channel <string>("test-ShovelTest2" + Salt)) { Task.Factory.StartNew(() => { for (int i = 0; i < count; i++) { c.Write(i); } c.Close(); }); AbstractShovelThread <int, string> th = c.ShovelTo <int, string>(w, p => p.ToString(), TimeSpan.FromSeconds(10), true); th.StoppedEvent += e => Assert.IsInstanceOfType(e, typeof(ChannelDrainedException)); foreach (string item in w.Enumerate()) { actual.Add(item); } Assert.AreEqual(count, actual.Count); CollectionAssert.AreEquivalent(expected.Select(p => p.ToString()).ToArray(), actual); } }
public virtual void Enumerate() { int count = 100; int[] expected = Enumerable.Range(0, count).ToArray(); List <int> actual = new List <int>(); using (IChannel <int> c = new mq.Channel <int>("test-Enumerate1" + Salt)) using (IChannel <int> w = new mq.Channel <int>("test-Enumerate2" + Salt)) { Task.Factory.StartNew(() => { for (int i = 0; i < count; i++) { c.Write(i); } c.Close(); }); Task.Factory.StartNew(() => { foreach (int item in c.Enumerate()) { actual.Add(item); } w.Write(count); w.Close(); }); Assert.AreEqual(count, w.Read()); w.WaitReadable.WaitOne(); CollectionAssert.AreEquivalent(expected, actual); } }
public virtual void ConcurrentReaders() { int count = 2000; int r0 = 0; int r1 = 0; using (IChannel <int> c = new mq.Channel <int>("test-ConcurrentReaders1" + Salt)) using (IChannel <int> w0 = new mq.Channel <int>("test-ConcurrentReaders2" + Salt)) using (IChannel <int> w1 = new mq.Channel <int>("test-ConcurrentReaders3" + Salt)) { Task.Factory.StartNew(() => { foreach (int item in c.Enumerate()) { r0++; } w0.Write(r0); }); Task.Factory.StartNew(() => { foreach (int item in c.Enumerate()) { r1++; } w1.Write(r1); }); for (int i = 0; i < count; i++) { c.Write(i); } c.Close(); Assert.AreEqual(count, w0.Read() + w1.Read()); Assert.IsTrue(r0 > 0); Assert.IsTrue(r1 > 0); //Assert.AreEqual(0.5, r0 / (double)count, 0.2); //Assert.AreEqual(0.5, r1 / (double)count, 0.2); } }