summaryrefslogtreecommitdiff
path: root/jsr166-tests/src/test/java/jsr166/Collection8Test.java
diff options
context:
space:
mode:
Diffstat (limited to 'jsr166-tests/src/test/java/jsr166/Collection8Test.java')
-rw-r--r--jsr166-tests/src/test/java/jsr166/Collection8Test.java104
1 files changed, 104 insertions, 0 deletions
diff --git a/jsr166-tests/src/test/java/jsr166/Collection8Test.java b/jsr166-tests/src/test/java/jsr166/Collection8Test.java
new file mode 100644
index 0000000000..634182b967
--- /dev/null
+++ b/jsr166-tests/src/test/java/jsr166/Collection8Test.java
@@ -0,0 +1,104 @@
+/*
+ * Written by Doug Lea and Martin Buchholz with assistance from
+ * members of JCP JSR-166 Expert Group and released to the public
+ * domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+package jsr166;
+
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.Consumer;
+
+import junit.framework.Test;
+
+/**
+ * Contains tests applicable to all jdk8+ Collection implementations.
+ * An extension of CollectionTest.
+ */
+public class Collection8Test extends JSR166TestCase {
+ final CollectionImplementation impl;
+
+ /** Tests are parameterized by a Collection implementation. */
+ Collection8Test(CollectionImplementation impl, String methodName) {
+ super(methodName);
+ this.impl = impl;
+ }
+
+ public static Test testSuite(CollectionImplementation impl) {
+ return parameterizedTestSuite(Collection8Test.class,
+ CollectionImplementation.class,
+ impl);
+ }
+
+ /**
+ * stream().forEach returns elements in the collection
+ */
+ // TODO(streams):
+ // public void testForEach() throws Throwable {
+ // 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); };
+ // c.stream().forEach(spy);
+ // assertTrue(found.isEmpty());
+
+ // assertTrue(c.add(x));
+ // c.stream().forEach(spy);
+ // assertEquals(Collections.singletonList(x), found);
+ // found.clear();
+
+ // assertTrue(c.add(y));
+ // c.stream().forEach(spy);
+ // assertEquals(2, found.size());
+ // assertTrue(found.contains(x));
+ // assertTrue(found.contains(y));
+ // found.clear();
+
+ // c.clear();
+ // c.stream().forEach(spy);
+ // assertTrue(found.isEmpty());
+ // }
+
+ // public void testForEachConcurrentStressTest() throws Throwable {
+ // if (!impl.isConcurrent()) return;
+ // final Collection c = impl.emptyCollection();
+ // final long testDurationMillis = timeoutMillis();
+ // final AtomicBoolean done = new AtomicBoolean(false);
+ // final Object elt = impl.makeElement(1);
+ // final Future<?> f1, f2;
+ // final ExecutorService pool = Executors.newCachedThreadPool();
+ // try (PoolCleaner cleaner = cleaner(pool, done)) {
+ // final CountDownLatch threadsStarted = new CountDownLatch(2);
+ // Runnable checkElt = () -> {
+ // threadsStarted.countDown();
+ // while (!done.get())
+ // c.stream().forEach((x) -> { assertSame(x, elt); }); };
+ // Runnable addRemove = () -> {
+ // threadsStarted.countDown();
+ // while (!done.get()) {
+ // assertTrue(c.add(elt));
+ // assertTrue(c.remove(elt));
+ // }};
+ // f1 = pool.submit(checkElt);
+ // f2 = pool.submit(addRemove);
+ // Thread.sleep(testDurationMillis);
+ // }
+ // assertNull(f1.get(0L, MILLISECONDS));
+ // assertNull(f2.get(0L, MILLISECONDS));
+ // }
+
+ // public void testCollection8DebugFail() { fail(); }
+}