@Test(expected = UnsupportedOperationException.class) public void shouldNotAllowElementsRemoving() { MpscLinkedQueue<Object> q = new MpscLinkedQueue<>(); q.offer(1); q.remove(1); }
@Test(expected = UnsupportedOperationException.class) public void shouldNotAllowIteratingWithIterator() { MpscLinkedQueue<Object> q = new MpscLinkedQueue<>(); q.iterator(); }
@Test(expected = NullPointerException.class) public void shouldRejectNullableValues() { MpscLinkedQueue<Object> q = new MpscLinkedQueue<>(); q.offer(null); }
@Test public void shouldClearQueue() { MpscLinkedQueue<Object> q = new MpscLinkedQueue<>(); q.test(1, 2); assertThat(q.isEmpty()).as("isEmpty() false").isFalse(); assertThat(q).hasSize(2); q.clear(); assertThat(q.isEmpty()).as("isEmpty() true").isTrue(); assertThat(q).hasSize(0); }
@Test public void shouldNormallyOfferTwoValues() { MpscLinkedQueue<Object> q = new MpscLinkedQueue<Object>(); q.test(1, 2); assertThat(q.poll()).isEqualTo(1); assertThat(q.poll()).isEqualTo(2); assertThat(q.poll()).isNull(); }
@Override public void run() { c.decrementAndGet(); while (c.get() != 0) { } while (--i > 0) { q.poll(); } } };
@Test public void shouldNotRemoveElementOnPeek() { MpscLinkedQueue<Object> q = new MpscLinkedQueue<>(); q.test(1, 2); for (int i = 0; i < 100; i++) { assertThat(q.peek()).isEqualTo(1); assertThat(q).hasSize(2); } }
@Test(expected = NullPointerException.class) public void shouldRejectNullableValuesForTest() { MpscLinkedQueue<Object> q = new MpscLinkedQueue<>(); q.test(null, null); }
@Test public void capacityUnboundedMpscLinkedQueue() { Queue q = new MpscLinkedQueue(); assertThat(Queues.capacity(q)).isEqualTo(Integer.MAX_VALUE); }
@Override public void run() { c.decrementAndGet(); while (c.get() != 0) { } while (i++ < 10000) { q.offer(i); } } });
@Test public void mpscOfferPollRace() throws Exception { final MpscLinkedQueue<Integer> q = new MpscLinkedQueue<Integer>();
@Override public void run() { c.decrementAndGet(); while (c.get() != 0) { } while (i++ < 10000) { q.offer(i); } } });