public static async Task Take_AtThread_2(Adapter_ProducerConsumer <TItem> buffer, HashSet <TItem> addSerial) { Assert.IsTrue(buffer.Count == 0); TItem first = addSerial.ElementAt(0); TItem second = addSerial.ElementAt(1); AddState <TItem> addState_First = new AddState <TItem>(buffer, first); AddState <TItem> addState_Second = new AddState <TItem>(buffer, second); Timer timerReaction_First = new Timer(TimeOut_AddAction, addState_First, DelayWait, Timeout.Infinite); Timer timerReaction_Second = new Timer(TimeOut_AddAction, addState_Second, DelayWaitDouble, Timeout.Infinite); ResultDouble <TItem> result = await buffer.Take_AtThread_2(); Assert.IsTrue(buffer.Count == 0); if (result.Value_1.Equals(first)) { Assert.IsTrue(result.Value_2.Equals(second)); } else { Assert.IsTrue(result.Value_1.Equals(second)); Assert.IsTrue(result.Value_2.Equals(first)); } }
public static async Task Take_LessDownBound(Adapter_ProducerConsumer <TItem> buffer, HashSet <TItem> addSerial) { Assert.IsTrue(buffer.Count == 0); TItem first = addSerial.First(); AddState <TItem> addState = new AddState <TItem>(buffer, first); Timer timerReactionNormal = new Timer(TimeOut_AddAction, addState, DelayWait, Timeout.Infinite); TItem taked = await buffer.Take_AtTask(); Assert.IsTrue(buffer.Count == 0); Assert.IsTrue(taked.Equals(first)); }
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_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 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)); }
public AddState(Adapter_ProducerConsumer <T> producerConsumer, T item) { _producerConsumer = producerConsumer; _itemForAdd = item; }
public BufferFiller(Adapter_ProducerConsumer <T> producerConsumer) { _producerConsumer = producerConsumer; _inclusiveItemList = new List <T>(); _exclusiveItemList = new List <T>(); }
public static void StartState(Adapter_ProducerConsumer <TItem> buffer, Int32 etalonBufferCapacity) { Assert.IsTrue(buffer.BufferCapacity == etalonBufferCapacity); Assert.IsTrue(buffer.Count == 0); }
private static void TimeOut_TakeAction(Object state) { Adapter_ProducerConsumer <TItem> buffer = state as Adapter_ProducerConsumer <TItem>; TItem value = buffer.Take(); }