public static async Task Add_AtThread_2(Adapter_ProducerConsumer <TItem> buffer, HashSet <TItem> addSerial) { BufferFiller <TItem> valueSerial = new BufferFiller <TItem>(buffer); valueSerial.FillAt(addSerial); Assert.IsTrue(valueSerial.CountExclusive > 1); Timer timerReaction_First = new Timer(TimeOut_TakeAction, buffer, DelayWait, Timeout.Infinite); Timer timerReaction_Second = new Timer(TimeOut_TakeAction, buffer, DelayWaitDouble, Timeout.Infinite); await buffer.Add_AtThread_2(valueSerial.FirstExclusive, valueSerial.SecondExclusive); Assert.IsTrue(buffer.Count == buffer.BufferCapacity); TItem itemTaked = default(TItem); for (int i = 0; i < buffer.BufferCapacity - 1; i++) { itemTaked = buffer.Take(); } Assert.IsTrue(buffer.Count == 1); if (itemTaked.Equals(valueSerial.FirstExclusive)) { itemTaked = buffer.Take(); Assert.IsTrue(itemTaked.Equals(valueSerial.SecondExclusive)); } else { Assert.IsTrue(itemTaked.Equals(valueSerial.SecondExclusive)); itemTaked = buffer.Take(); Assert.IsTrue(itemTaked.Equals(valueSerial.FirstExclusive)); } Assert.IsTrue(buffer.Count == 0); }
public static void WithinBound_Sync(Adapter_ProducerConsumer <TItem> buffer, HashSet <TItem> addSerial) { BufferFiller <TItem> valueSerial = new BufferFiller <TItem>(buffer); valueSerial.FillAt(addSerial); Assert.IsTrue(buffer.Count == valueSerial.CountInclusive); foreach (TItem item in valueSerial.Inclusive) { TItem itemTaked = buffer.Take(); Assert.IsTrue(itemTaked.Equals(item)); } Assert.IsTrue(buffer.Count == 0); }
public static async Task Add_OverUpperBound(Adapter_ProducerConsumer <TItem> buffer, HashSet <TItem> addSerial) { BufferFiller <TItem> valueSerial = new BufferFiller <TItem>(buffer); valueSerial.FillAt(addSerial); Assert.IsTrue(valueSerial.CountExclusive > 0); Timer timerReaction = new Timer(TimeOut_TakeAction, buffer, DelayWait, Timeout.Infinite); await buffer.Add_AtTask(valueSerial.FirstExclusive); Assert.IsTrue(buffer.Count == buffer.BufferCapacity); TItem itemTaked = default(TItem); for (int i = 0; i < buffer.BufferCapacity; i++) { itemTaked = buffer.Take(); } Assert.IsTrue(buffer.Count == 0); Assert.IsTrue(itemTaked.Equals(valueSerial.FirstExclusive)); }
private static void TimeOut_TakeAction(Object state) { Adapter_ProducerConsumer <TItem> buffer = state as Adapter_ProducerConsumer <TItem>; TItem value = buffer.Take(); }