package org.jctools.queues;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Queue;
import org.jctools.queues.spec.ConcurrentQueueSpec;
import org.jctools.queues.spec.Ordering;
import org.junit.Ignore;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@RunWith(Parameterized.class)
public class MpscOfferBelowThresholdQueueSanityTest extends QueueSanityTest {
/**
* This allows us to test the offersIfBelowThreshold through all the offer utilizing threads. The effect should be
* as if the queue capacity is halved.
*/
static class MpscArrayQueueOverride<E> extends MpscArrayQueue<E> {
int threshold;
public MpscArrayQueueOverride(int capacity) {
super(capacity);
threshold = capacity()/2;
}
@Override
public boolean offer(E e) {
return super.offerIfBelowThreshold(e, threshold);
}
}
@Parameterized.Parameters
public static Collection<Object[]> parameters() {
ArrayList<Object[]> list = new ArrayList<Object[]>();
MpscArrayQueueOverride<Integer> q = new MpscArrayQueueOverride<Integer>(16);
list.add(makeQueue(0, 1, 8, Ordering.FIFO, q));
q = new MpscArrayQueueOverride<Integer>(16);
q.threshold = 12;
list.add(makeQueue(0, 1, 12, Ordering.FIFO, q));
q = new MpscArrayQueueOverride<Integer>(16);
q.threshold = 4;
list.add(makeQueue(0, 1, 4, Ordering.FIFO, q));
return list;
}
public MpscOfferBelowThresholdQueueSanityTest(ConcurrentQueueSpec spec, Queue<Integer> queue) {
super(spec, queue);
}
@Ignore
public void testPowerOf2Capacity() {
}
}