< prev index next >

test/jdk/java/util/List/ListFactories.java

Print this page
rev 48077 : 8193128: Reduce number of implementation classes returned by List/Set/Map.of()
Reviewed-by: smarks

@@ -24,10 +24,11 @@
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;

@@ -70,11 +71,11 @@
     }
 
     @DataProvider(name="empty")
     public Iterator<Object[]> empty() {
         return Collections.singletonList(
-            a(List.of(), Collections.emptyList())
+            a(List.of(), asList())
         ).iterator();
     }
 
     @DataProvider(name="nonempty")
     public Iterator<Object[]> nonempty() {

@@ -102,15 +103,54 @@
             a(List.of(stringArray),
                asList(stringArray))
         ).iterator();
     }
 
+    @DataProvider(name="sublists")
+    public Iterator<Object[]> sublists() {
+        return asList(
+            a(List.<String>of().subList(0,0),
+               asList()),
+            a(List.of("a").subList(0,0),
+               asList("a").subList(0,0)),
+            a(List.of("a", "b").subList(0,1),
+               asList("a", "b").subList(0,1)),
+            a(List.of("a", "b", "c").subList(1,3),
+               asList("a", "b", "c").subList(1,3)),
+            a(List.of("a", "b", "c", "d").subList(0,4),
+               asList("a", "b", "c", "d").subList(0,4)),
+            a(List.of("a", "b", "c", "d", "e").subList(0,3),
+               asList("a", "b", "c", "d", "e").subList(0,3)),
+            a(List.of("a", "b", "c", "d", "e", "f").subList(3, 5),
+               asList("a", "b", "c", "d", "e", "f").subList(3, 5)),
+            a(List.of("a", "b", "c", "d", "e", "f", "g").subList(0, 7),
+               asList("a", "b", "c", "d", "e", "f", "g").subList(0, 7)),
+            a(List.of("a", "b", "c", "d", "e", "f", "g", "h").subList(0, 0),
+               asList("a", "b", "c", "d", "e", "f", "g", "h").subList(0, 0)),
+            a(List.of("a", "b", "c", "d", "e", "f", "g", "h", "i").subList(4, 5),
+               asList("a", "b", "c", "d", "e", "f", "g", "h", "i").subList(4, 5)),
+            a(List.of("a", "b", "c", "d", "e", "f", "g", "h", "i", "j").subList(1,10),
+               asList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j").subList(1,10)),
+            a(List.of(stringArray).subList(5, NUM_STRINGS),
+               asList(Arrays.copyOfRange(stringArray, 5, NUM_STRINGS)))
+                ).iterator();
+    }
+
     @DataProvider(name="all")
     public Iterator<Object[]> all() {
         List<Object[]> all = new ArrayList<>();
         empty().forEachRemaining(all::add);
         nonempty().forEachRemaining(all::add);
+        sublists().forEachRemaining(all::add);
+        return all.iterator();
+    }
+
+    @DataProvider(name="nonsublists")
+    public Iterator<Object[]> nonsublists() {
+        List<Object[]> all = new ArrayList<>();
+        empty().forEachRemaining(all::add);
+        nonempty().forEachRemaining(all::add);
         return all.iterator();
     }
 
     @Test(dataProvider="all", expectedExceptions=UnsupportedOperationException.class)
     public void cannotAddLast(List<String> act, List<String> exp) {

@@ -210,11 +250,51 @@
         List<String> list = List.of(array);
         array[0] = "xyzzy";
         assertEquals(list, Arrays.asList(stringArray));
     }
 
-    @Test(dataProvider="all")
+    @Test
+    public void indexOf() {
+        assertEquals(List.of("a").indexOf("a"), 0);
+        assertEquals(List.of("a", "a").indexOf("a"), 0);
+        assertEquals(List.of("b", "a", "a").indexOf("a"), 1);
+        assertEquals(List.of("b", "b", "a", "a").indexOf("a"), 2);
+        assertEquals(List.of("b", "b", "b", "a", "a").indexOf("a"), 3);
+        assertEquals(List.of("b", "b", "b", "b", "a", "a").indexOf("a"), 4);
+
+        assertEquals(List.of("a").subList(0, 1).indexOf("a"), 0);
+        assertEquals(List.of("a", "a").subList(0, 2).indexOf("a"), 0);
+        assertEquals(List.of("b", "a", "a").subList(0, 3).indexOf("a"), 1);
+        assertEquals(List.of("b", "b", "a", "a").subList(0, 4).indexOf("a"), 2);
+        assertEquals(List.of("b", "b", "b", "a", "a").subList(0, 5).indexOf("a"), 3);
+        assertEquals(List.of("b", "b", "b", "b", "a", "a").subList(0, 6).indexOf("a"), 4);
+
+        assertEquals(List.of("a").lastIndexOf("a"), 0);
+        assertEquals(List.of("a", "a").lastIndexOf("a"), 1);
+        assertEquals(List.of("b", "a", "a").lastIndexOf("a"), 2);
+        assertEquals(List.of("b", "b", "a", "a").lastIndexOf("a"), 3);
+        assertEquals(List.of("b", "b", "b", "a", "a").lastIndexOf("a"), 4);
+        assertEquals(List.of("b", "b", "b", "b", "a", "a").lastIndexOf("a"), 5);
+        assertEquals(List.of("c", "b", "b", "b", "a", "a").lastIndexOf("c"), 0);
+
+        assertEquals(List.of("a").subList(0, 1).lastIndexOf("a"), 0);
+        assertEquals(List.of("a", "a").subList(0, 2).lastIndexOf("a"), 1);
+        assertEquals(List.of("b", "a", "a").subList(0, 3).lastIndexOf("a"), 2);
+        assertEquals(List.of("b", "b", "a", "a").subList(0, 4).lastIndexOf("a"), 3);
+        assertEquals(List.of("b", "b", "b", "a", "a").subList(0, 5).lastIndexOf("a"), 4);
+        assertEquals(List.of("b", "b", "b", "b", "a", "a").subList(0, 6).lastIndexOf("a"), 5);
+        assertEquals(List.of("c", "b", "b", "b", "a", "a").subList(0, 6).lastIndexOf("c"), 0);
+    }
+
+    // List.of().subList views should not be Serializable
+    @Test(dataProvider="sublists")
+    public void isNotSerializable(List<String> act, List<String> exp) {
+        assertFalse(act instanceof Serializable);
+    }
+
+    // ... but List.of() should be
+    @Test(dataProvider="nonsublists")
     public void serialEquality(List<String> act, List<String> exp) {
         // assume that act.equals(exp) tested elsewhere
         List<String> copy = serialClone(act);
         assertEquals(act, copy);
         assertEquals(copy, exp);
< prev index next >