public static <E> ConcurrentQueue<E> newQueue(ConcurrentQueueSpec qs) { if (qs.isBounded()) { // SPSC if (qs.consumers == 1 && qs.producers == 1) { return new SpscArrayConcurrentQueue<E>(qs.capacity); } else { return new MpmcArrayConcurrentQueue<E>(qs.capacity); } } return new GenericQueue<E>(); }
@Test public void testPowerOf2Capacity() { assumeThat(spec.isBounded(), is(true)); int n = Pow2.roundToPowerOfTwo(spec.capacity); for (int i = 0; i < n; i++) { assertTrue("Failed to insert:" + i, queue.offer(i)); } assertFalse(queue.offer(n)); }
@Test public void testPowerOf2Capacity() { assumeThat(spec.isBounded(), is(true)); int n = Pow2.roundToPowerOfTwo(spec.capacity); for (int i = 0; i < n; i++) { assertTrue("Failed to insert:" + i, queue.offer(i)); } assertFalse(queue.offer(n)); }
if (qs.isBounded()) {
@Test public void testPowerOf2Capacity() { assumeThat(spec.isBounded(), is(true)); int n = Pow2.roundToPowerOfTwo(spec.capacity); for (int i = 0; i < n; i++) { assertTrue("Failed to insert:" + i, queue.relaxedOffer(i)); } assertFalse(queue.relaxedOffer(n)); }
public static <E> Queue<E> newQueue(ConcurrentQueueSpec qs) if (qs.isBounded())
public static <E> Queue<E> newQueue(ConcurrentQueueSpec qs) if (qs.isBounded())
@Test public void supplyMessageUntilFull() { assumeThat(spec.isBounded(), is(Boolean.TRUE)); final Val instances = new Val(); instances.value = 0; final MessagePassingQueue.Supplier<Integer> messageFactory = () -> instances.value++; final int capacity = queue.capacity(); int filled = 0; while (filled < capacity) { filled += queue.fill(messageFactory, capacity - filled); } assertEquals(instances.value, capacity); final int noItems = queue.fill(messageFactory, 1); assertEquals(noItems, 0); assertEquals(instances.value, capacity); }
@Test public void testSizeIsTheNumberOfOffers() { int currentSize = 0; while (currentSize < SIZE && queue.relaxedOffer(currentSize)) { currentSize++; assertFalse(queue.isEmpty()); assertTrue(queue.size() == currentSize); } if (spec.isBounded()) { assertEquals(spec.capacity, currentSize); } else { assertEquals(SIZE, currentSize); } }
public static <E> Queue<E> newQueue(ConcurrentQueueSpec qs) if (qs.isBounded())
public static <E> Queue<E> newQueue(ConcurrentQueueSpec qs) if (qs.isBounded())