--- jsr166/src/test/tck/ArrayDequeTest.java 2016/10/17 01:57:00 1.45 +++ jsr166/src/test/tck/ArrayDequeTest.java 2016/10/22 05:45:56 1.50 @@ -14,6 +14,7 @@ import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Queue; import java.util.Random; +import java.util.Spliterator; import java.util.concurrent.ThreadLocalRandom; import junit.framework.Test; @@ -989,32 +990,78 @@ public class ArrayDequeTest extends JSR1 } /** + * Spliterator characteristics are as advertised + */ + public void testSpliterator_characteristics() { + ArrayDeque q = new ArrayDeque(); + Spliterator s = q.spliterator(); + int characteristics = s.characteristics(); + int required = Spliterator.NONNULL + | Spliterator.ORDERED + | Spliterator.SIZED + | Spliterator.SUBSIZED; + assertEquals(required, characteristics & required); + assertTrue(s.hasCharacteristics(required)); + assertEquals(0, characteristics + & (Spliterator.CONCURRENT + | Spliterator.DISTINCT + | Spliterator.IMMUTABLE + | Spliterator.SORTED)); + } + + /** + * Spliterator.getComparator always throws IllegalStateException + */ + public void testSpliterator_getComparator() { + assertThrows(IllegalStateException.class, + () -> new ArrayDeque().spliterator().getComparator()); + } + + /** * Handle capacities near Integer.MAX_VALUE. - * ant -Dvmoptions=-Xmx24g -Djsr166.expensiveTests=true -Djsr166.tckTestClass=ArrayDequeTest -Djsr166.methodFilter=testHuge tck + * ant -Dvmoptions='-Xms28g -Xmx28g' -Djsr166.testImplementationDetails=true -Djsr166.expensiveTests=true -Djsr166.tckTestClass=ArrayDequeTest -Djsr166.methodFilter=testHuge tck */ public void testHuge() { if (! (testImplementationDetails && expensiveTests - && Runtime.getRuntime().freeMemory() > 21_000_000_000L)) + && Runtime.getRuntime().maxMemory() > 24L * (1 << 30))) return; - int maxSize = Integer.MAX_VALUE - 8; - ArrayDeque q; - q = new ArrayDeque<>(maxSize); + ArrayDeque q; + Integer e = 42; + final int maxSize = Integer.MAX_VALUE - 8; assertThrows(OutOfMemoryError.class, () -> new ArrayDeque<>(Integer.MAX_VALUE)); - q = populatedDeque(0); - q.addAll(Collections.nCopies(maxSize - 2, (Integer) 42)); - assertEquals((Integer) 42, q.peekFirst()); - assertEquals((Integer) 42, q.peekLast()); - assertEquals(maxSize - 2, q.size()); - q.addFirst((Integer) 0); - q.addLast((Integer) 1); - assertEquals((Integer) 0, q.peekFirst()); - assertEquals((Integer) 1, q.peekLast()); - assertEquals(maxSize, q.size()); + { + q = new ArrayDeque<>(maxSize); + assertEquals(0, q.size()); + assertTrue(q.isEmpty()); + q = null; + } + + { + q = new ArrayDeque(); + assertTrue(q.addAll(Collections.nCopies(maxSize - 2, e))); + assertEquals(e, q.peekFirst()); + assertEquals(e, q.peekLast()); + assertEquals(maxSize - 2, q.size()); + q.addFirst((Integer) 0); + q.addLast((Integer) 1); + assertEquals((Integer) 0, q.peekFirst()); + assertEquals((Integer) 1, q.peekLast()); + assertEquals(maxSize, q.size()); + + ArrayDeque qq = q; + ArrayDeque smallish = new ArrayDeque( + Collections.nCopies(Integer.MAX_VALUE - maxSize + 1, e)); + assertThrows( + IllegalStateException.class, + () -> qq.addAll(qq), + () -> qq.addAll(smallish), + () -> smallish.addAll(qq)); + } } }