use of java8.util.function.Consumer in project streamsupport by stefan-zobel.
the class StreamSpliteratorTest method testDoubleSplitting.
//
public void testDoubleSplitting() {
List<Consumer<DoubleStream>> terminalOps = Arrays.asList(s -> s.toArray(), s -> s.forEach(e -> {
}), s -> s.reduce(java8.lang.Doubles::sum));
List<UnaryOperator<DoubleStream>> intermediateOps = Arrays.asList(s -> s.parallel(), // The following ensures the wrapping spliterator is tested
s -> s.map(i -> i).parallel());
for (int i = 0; i < terminalOps.size(); i++) {
Consumer<DoubleStream> terminalOp = terminalOps.get(i);
setContext("termOpIndex", i);
for (int j = 0; j < intermediateOps.size(); j++) {
UnaryOperator<DoubleStream> intermediateOp = intermediateOps.get(j);
setContext("intOpIndex", j);
for (boolean proxyEstimateSize : new boolean[] { false, true }) {
setContext("proxyEstimateSize", proxyEstimateSize);
// Size is assumed to be larger than the target size for no splitting
// @@@ Need way to obtain the target size
Spliterator.OfDouble sp = intermediateOp.apply(IntStreams.range(0, 1000).asDoubleStream()).spliterator();
ProxyNoExactSizeSpliterator.OfDouble psp = new ProxyNoExactSizeSpliterator.OfDouble(sp, proxyEstimateSize);
DoubleStream s = StreamSupport.doubleStream(psp, true);
terminalOp.accept(s);
Assert.assertTrue(psp.splits > 0, String.format("Number of splits should be greater that zero when proxyEstimateSize is %s", proxyEstimateSize));
Assert.assertTrue(psp.prefixSplits > 0, String.format("Number of non-null prefix splits should be greater that zero when proxyEstimateSize is %s", proxyEstimateSize));
Assert.assertTrue(psp.sizeOnTraversal < 1000, String.format("Size on traversal of last split should be less than the size of the list, %d, when proxyEstimateSize is %s", 1000, proxyEstimateSize));
}
}
}
}
use of java8.util.function.Consumer in project streamsupport by stefan-zobel.
the class Collection8Test method testElementRemovalDuringTraversal.
/**
* All elements removed in the middle of CONCURRENT traversal.
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test(dataProvider = "Source")
public void testElementRemovalDuringTraversal(String description, Supplier<CollectionImplementation> sci) {
CollectionImplementation impl = sci.get();
if (HAS_JAVA8_SPLITERATOR_BUG && LinkedBlockingQueue.class.equals(impl.klazz())) {
// https://bugs.openjdk.java.net/browse/JDK-8171051
return;
}
Collection<Object> c = impl.emptyCollection();
ThreadLocalRandom rnd = ThreadLocalRandom.current();
int n = rnd.nextInt(6);
ArrayList copy = new ArrayList();
for (int i = 0; i < n; i++) {
Object x = impl.makeElement(i);
copy.add(x);
c.add(x);
}
ArrayList iterated = new ArrayList();
ArrayList spliterated = new ArrayList();
Spliterator<?> s = Spliterators.spliterator(c);
Iterator<?> it = c.iterator();
for (int i = rnd.nextInt(n + 1); --i >= 0; ) {
assertTrue(s.tryAdvance(spliterated::add));
if (rnd.nextBoolean())
assertTrue(it.hasNext());
iterated.add(it.next());
}
Consumer alwaysThrows = e -> {
throw new AssertionError();
};
if (s.hasCharacteristics(Spliterator.CONCURRENT)) {
// TODO: many more removal methods
c.clear();
if (testImplementationDetails && !(c instanceof java.util.concurrent.ArrayBlockingQueue)) {
if (rnd.nextBoolean())
assertFalse(s.tryAdvance(alwaysThrows));
else
s.forEachRemaining(alwaysThrows);
}
if (it.hasNext())
iterated.add(it.next());
if (rnd.nextBoolean())
assertIteratorExhausted(it);
}
assertTrue(copy.containsAll(iterated));
assertTrue(copy.containsAll(spliterated));
}
use of java8.util.function.Consumer in project streamsupport by stefan-zobel.
the class Collection8Test method emptyMeansEmpty.
@SuppressWarnings({ "rawtypes", "unchecked" })
void emptyMeansEmpty(Collection<?> c, Supplier<CollectionImplementation> sci) throws InterruptedException {
assertTrue(c.isEmpty());
assertEquals(0, c.size());
assertEquals("[]", c.toString());
if (c instanceof List<?>) {
List x = (List) c;
assertEquals(1, x.hashCode());
assertEquals(x, Collections.emptyList());
assertEquals(Collections.emptyList(), x);
assertEquals(-1, x.indexOf(sci.get().makeElement(86)));
assertEquals(-1, x.lastIndexOf(sci.get().makeElement(99)));
assertThrows(IndexOutOfBoundsException.class, () -> x.get(0), () -> x.set(0, sci.get().makeElement(42)));
} else if (c instanceof Set<?>) {
assertEquals(0, c.hashCode());
assertEquals(c, Collections.emptySet());
assertEquals(Collections.emptySet(), c);
}
{
Object[] a = c.toArray();
assertEquals(0, a.length);
assertSame(Object[].class, a.getClass());
}
{
Object[] a = new Object[0];
assertSame(a, c.toArray(a));
}
{
Integer[] a = new Integer[0];
assertSame(a, c.toArray(a));
}
{
Integer[] a = { 1, 2, 3 };
assertSame(a, c.toArray(a));
assertNull(a[0]);
assertSame(2, a[1]);
assertSame(3, a[2]);
}
assertIteratorExhausted(c.iterator());
Consumer alwaysThrows = e -> {
throw new AssertionError();
};
Iterables.forEach(c, alwaysThrows);
Iterators.forEachRemaining(c.iterator(), alwaysThrows);
Spliterators.spliterator(c).forEachRemaining(alwaysThrows);
assertFalse(Spliterators.spliterator(c).tryAdvance(alwaysThrows));
if (Spliterators.spliterator(c).hasCharacteristics(Spliterator.SIZED))
assertEquals(0, Spliterators.spliterator(c).estimateSize());
assertFalse(c.contains(bomb()));
assertFalse(c.remove(bomb()));
if (c instanceof Queue) {
Queue<?> q = (Queue<?>) c;
assertNull(q.peek());
assertNull(q.poll());
}
if (c instanceof Deque) {
Deque<?> d = (Deque<?>) c;
assertNull(d.peekFirst());
assertNull(d.peekLast());
assertNull(d.pollFirst());
assertNull(d.pollLast());
assertIteratorExhausted(d.descendingIterator());
Iterators.forEachRemaining(d.descendingIterator(), alwaysThrows);
assertFalse(d.removeFirstOccurrence(bomb()));
assertFalse(d.removeLastOccurrence(bomb()));
}
if (c instanceof BlockingQueue) {
BlockingQueue<?> q = (BlockingQueue<?>) c;
assertNull(q.poll(randomExpiredTimeout(), randomTimeUnit()));
}
if (c instanceof BlockingDeque) {
BlockingDeque<?> q = (BlockingDeque<?>) c;
assertNull(q.pollFirst(randomExpiredTimeout(), randomTimeUnit()));
assertNull(q.pollLast(randomExpiredTimeout(), randomTimeUnit()));
}
}
use of java8.util.function.Consumer in project streamsupport by stefan-zobel.
the class Collection8Test method testStickySpliteratorExhaustion.
/**
* Concurrent Spliterators, once exhausted, stay exhausted.
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@Test(dataProvider = "Source")
public void testStickySpliteratorExhaustion(String description, Supplier<CollectionImplementation> sci) throws Throwable {
CollectionImplementation impl = sci.get();
if (HAS_JAVA8_SPLITERATOR_BUG && PriorityBlockingQueue.class.equals(impl.klazz())) {
// https://bugs.openjdk.java.net/browse/JDK-8172023
return;
}
if (!impl.isConcurrent())
return;
if (!testImplementationDetails)
return;
final ThreadLocalRandom rnd = ThreadLocalRandom.current();
final Consumer<?> alwaysThrows = e -> {
throw new AssertionError();
};
final Collection c = impl.emptyCollection();
final Spliterator s = Spliterators.spliterator(c);
if (rnd.nextBoolean()) {
assertFalse(s.tryAdvance(alwaysThrows));
} else {
s.forEachRemaining(alwaysThrows);
}
final Object one = impl.makeElement(1);
// Spliterator should not notice added element
c.add(one);
if (rnd.nextBoolean()) {
assertFalse(s.tryAdvance(alwaysThrows));
} else {
s.forEachRemaining(alwaysThrows);
}
}
use of java8.util.function.Consumer in project streamsupport by stefan-zobel.
the class Collection8Test method testForEach.
/**
* collection.forEach returns elements in the collection
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@Test(dataProvider = "Source")
public void testForEach(String description, Supplier<CollectionImplementation> sci) throws Throwable {
CollectionImplementation impl = sci.get();
final Collection c = impl.emptyCollection();
// final AtomicLong count = new AtomicLong(0L);
final Object x = impl.makeElement(1);
final Object y = impl.makeElement(2);
final ArrayList found = new ArrayList();
Consumer<Object> spy = o -> found.add(o);
Iterables.forEach(c, spy);
assertTrue(found.isEmpty());
assertTrue(c.add(x));
Iterables.forEach(c, spy);
assertEquals(Collections.singletonList(x), found);
found.clear();
assertTrue(c.add(y));
Iterables.forEach(c, spy);
assertEquals(2, found.size());
assertTrue(found.contains(x));
assertTrue(found.contains(y));
found.clear();
c.clear();
Iterables.forEach(c, spy);
assertTrue(found.isEmpty());
}
Aggregations