Ranides Atterwim 10 anos atrás
pai
commit
6a79d469c2

+ 8 - 0
assira/src/main/java/net/ranides/assira/collection/BlockCollection.java

@@ -14,6 +14,14 @@ import java.util.Collection;
  */
 public interface BlockCollection<T> extends Collection<T> {
     
+    /**
+     * Ensures that this collection can contain the given number of entries
+     * without resizing.
+     * @param capacity the new minimum capacity for this array list.
+     * @return true if there was enough memory to reallocate the collection.
+     */
+    boolean ensureCapacity(int capacity);
+    
     int capacity();
 
     /**

+ 1 - 1
assira/src/main/java/net/ranides/assira/collection/lists/AIntList.java

@@ -415,7 +415,7 @@ public abstract class AIntList extends AIntCollection implements IntList, Compar
         }
 
         @Override
-        public void size(int size) {
+        public void resize(int size) {
             int i = size();
             if (size > i) {
                 while (i++ < size) {

Diferenças do arquivo suprimidas por serem muito extensas
+ 502 - 507
assira/src/main/java/net/ranides/assira/collection/lists/IntArrayList.java


+ 16 - 2
assira/src/main/java/net/ranides/assira/collection/sets/AHashSet.java

@@ -201,8 +201,22 @@ public abstract class AHashSet<K> extends ASet<K> implements BlockCollection<K>,
         }
         return true;
     }
-    
-     /**
+
+    @Override
+    public boolean ensureCapacity(int capacity) {
+        final int l = HashCollection.arraysize(capacity, factor);
+        if(l <= this.n) {
+            return true;
+        }
+        try {
+            irehash(l);
+        } catch (OutOfMemoryError cantDoIt) {
+            return false;
+        }
+        return true;
+    }
+        
+    /**
      * Returns a hash code for this set.
      *
      * This method overrides the generic method provided by the superclass.

+ 14 - 0
assira/src/main/java/net/ranides/assira/collection/sets/IntHashSet.java

@@ -283,6 +283,20 @@ public final class IntHashSet extends AIntSet implements java.io.Serializable, B
     public int capacity() {
         return capacity;
     }
+    
+    @Override
+    public boolean ensureCapacity(int capacity) {
+        final int l = HashCollection.arraysize(capacity, factor);
+        if(l <= this.n) {
+            return true;
+        }
+        try {
+            irehash(l);
+        } catch (OutOfMemoryError cantDoIt) {
+            return false;
+        }
+        return true;
+    }
 
     /**
      * Rehashes this set, making the table as small as possible.

+ 13 - 0
assira/src/main/java/net/ranides/assira/test/TCollection.java

@@ -14,6 +14,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Random;
 import net.ranides.assira.collection.HashComparator;
+import net.ranides.assira.collection.IntCollection;
 import net.ranides.assira.collection.Swapper;
 import net.ranides.assira.collection.arrays.ArrayAllocator;
 import net.ranides.assira.collection.arrays.ArrayUtils;
@@ -58,6 +59,11 @@ public abstract class TCollection<T> implements Serializable {
 			return target;
 		}
         
+        public <C extends IntCollection> C intoInt(C target) {
+			target.add(valueInt());
+			return target;
+		}
+        
     }
         
     public static final class TItems<T> implements Iterable<TItem<T>> {
@@ -124,6 +130,13 @@ public abstract class TCollection<T> implements Serializable {
 			return target;
 		}
         
+        public <C extends IntCollection> C intoInt(C target) {
+			for(TItem<T> item : data) {
+				target.add(item.valueInt());
+			}
+			return target;
+		}
+        
 		public void dump() {
 			System.err.printf("TItems(%d)%n", data.size());
 			for(int i=0,n=data.size(); i<n; i++) {

+ 155 - 83
assira/src/test/java/net/ranides/assira/collection/lists/IntArrayListTest.java

@@ -1,83 +1,155 @@
-/*
- * @author Ranides Atterwim <ranides@gmail.com>
- * @copyright Ranides Atterwim
- * @license WTFPL
- * @url http://ranides.net/projects/???
- */
-package net.ranides.assira.collection.lists;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import net.ranides.assira.collection.mockup.CollectionSuite;
-import net.ranides.assira.collection.mockup.TMaps;
-import net.ranides.assira.collection.sets.IntAVLTreeSet;
-import net.ranides.assira.collection.sets.IntSet;
-import static net.ranides.assira.junit.NewAssert.*;
-import net.ranides.assira.test.TCollection;
-import org.junit.Test;
-
-/**
- *
- * @author Ranides Atterwim <ranides@gmail.com>
- */
-public class IntArrayListTest {
-    
-    private final TCollection<Integer> $list = TMaps.MAP_IS.keys();
-
-    @Test
-    public void testSuite() {
-        CollectionSuite.SUITE
-			.param("set!", $list)
-			.param("list!", $list)
-			.run(() -> new IntArrayList());
-    }
-
-    @Test
-    public void testConstruct() {
-        assertNotNull(new IntArrayList(32));
-        assertThrows(IllegalArgumentException.class, ()->{new IntArrayList(-1);});
-    }
-    
-    @Test
-    public void testConstructCopy() {
-        IntRange r = new IntRange(0, 10);
-        List<Integer> exp = Arrays.asList(0,1,2,3,4,5,6,7,8,9);
-        
-        assertEquals(10, new IntArrayList(r).size());
-        assertEquals(exp, new IntArrayList(r));
-        assertEquals(exp, new IntArrayList(new IntArrayList(r)));
-        assertEquals(new IntArrayList(r), new IntArrayList(new IntArrayList(r)));
-        assertEquals(Arrays.asList(1,2,3,8), new IntArrayList(new int[]{1,2,3,8}));
-        assertEquals(Arrays.asList(2,3,8), new IntArrayList(new int[]{1,2,3,8,10,11},1,3));
-        
-        assertEquals(exp, new IntArrayList(r.iterator()));
-        assertEquals(exp, new IntArrayList(new ArrayList<>(r).iterator()));
-        
-        assertNotNull(new IntArrayList(32));
-        assertThrows(IllegalArgumentException.class, ()->{new IntArrayList(-1);});
-		
-		IntSet set = new IntAVLTreeSet(new int[]{1,3,5,7});
-		assertEquals(Arrays.asList(1,3,5,7), new IntArrayList(set));
-    }
-	
-	@Test
-    public void testWrap() {
-		int[] array = new int[]{1,3,5,7};
-		IntList list = IntArrayList.wrap(array);
-		assertEquals(Arrays.asList(1,3,5,7), list);
-	}
-	
-	@Test
-    public void testWrap_size() {
-		int[] array = new int[]{1,3,5,7,9};
-		IntList list = IntArrayList.wrap(array, 4);
-		assertEquals(Arrays.asList(1,3,5,7), list);
-		
-		assertThrows(IllegalArgumentException.class, ()->{
-			IntArrayList.wrap(array, 9);
-		});
-	}
-	
-    
-}
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/???
+ */
+package net.ranides.assira.collection.lists;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import net.ranides.assira.collection.mockup.CollectionSuite;
+import net.ranides.assira.collection.mockup.TMaps;
+import net.ranides.assira.collection.sets.IntAVLTreeSet;
+import net.ranides.assira.collection.sets.IntSet;
+import static net.ranides.assira.junit.NewAssert.*;
+import net.ranides.assira.test.TCollection;
+import org.junit.Test;
+
+/**
+ *
+ * @author Ranides Atterwim <ranides@gmail.com>
+ */
+public class IntArrayListTest {
+    
+    private final TCollection<Integer> $list = TMaps.MAP_IS.keys();
+
+    @Test
+    public void testSuite() {
+        CollectionSuite.SUITE
+			.param("set!", $list)
+			.param("list!", $list)
+			.run(() -> new IntArrayList());
+    }
+
+    @Test
+    public void testConstruct() {
+        assertNotNull(new IntArrayList(32));
+        assertThrows(IllegalArgumentException.class, ()->{
+            new IntArrayList(-1);
+        });
+    }
+    
+    @Test
+    public void testConstructCopy() {
+        IntRange r = new IntRange(0, 10);
+        List<Integer> exp = Arrays.asList(0,1,2,3,4,5,6,7,8,9);
+        
+        assertEquals(10, new IntArrayList(r).size());
+        assertEquals(exp, new IntArrayList(r));
+        assertEquals(exp, new IntArrayList(new IntArrayList(r)));
+        assertEquals(new IntArrayList(r), new IntArrayList(new IntArrayList(r)));
+        assertEquals(Arrays.asList(1,2,3,8), new IntArrayList(new int[]{1,2,3,8}));
+        assertEquals(Arrays.asList(2,3,8), new IntArrayList(new int[]{1,2,3,8,10,11},1,3));
+        
+        assertEquals(exp, new IntArrayList(r.iterator()));
+        assertEquals(exp, new IntArrayList(new ArrayList<>(r).iterator()));
+        
+        assertNotNull(new IntArrayList(32));
+        assertThrows(IllegalArgumentException.class, ()->{new IntArrayList(-1);});
+		
+		IntSet set = new IntAVLTreeSet(new int[]{1,3,5,7});
+		assertEquals(Arrays.asList(1,3,5,7), new IntArrayList(set));
+    }
+	
+	@Test
+    public void testWrap() {
+		int[] array = new int[]{1,3,5,7};
+		IntList list = IntArrayList.wrap(array);
+		assertEquals(Arrays.asList(1,3,5,7), list);
+	}
+	
+	@Test
+    public void testWrap_size() {
+		int[] array = new int[]{1,3,5,7,9};
+		IntList list = IntArrayList.wrap(array, 4);
+		assertEquals(Arrays.asList(1,3,5,7), list);
+		
+		assertThrows(IllegalArgumentException.class, ()->{
+			IntArrayList.wrap(array, 9);
+		});
+	}
+    
+    @Test
+    public void testResize() {
+        IntArrayList list = new IntArrayList();
+        list.add(1);
+        list.resize(5);
+        assertEquals(5, list.size());
+        assertEquals(Arrays.asList(1,0,0,0,0), list);
+        
+        list.set(1,4);
+        list.set(2,5);
+        list.set(3,6);
+        list.add(8);
+        
+        assertEquals(Arrays.asList(1,4,5,6,0,8), list);
+        
+        list.resize(3);
+        assertEquals(3, list.size());
+        assertEquals(Arrays.asList(1,4,5), list);
+        
+        list.resize(20);
+        assertEquals(20, list.size());
+    }
+    
+    @Test
+    public void testCompare() {
+        IntArrayList ilist1 = new IntArrayList(new int[]{1,3,5,7});
+        IntArrayList ilist2 = new IntArrayList(new int[]{1,3,5,7});
+        IntArrayList ilist3 = new IntArrayList(new int[]{1,3,5});
+        IntArrayList ilist4 = new IntArrayList(new int[]{1,2,5,7});
+        IntArrayList ilist5 = new IntArrayList(new int[]{1,4,5,7});
+        
+        assertTrue( ilist1.compareTo(ilist1) == 0 );
+        assertTrue( ilist1.compareTo(ilist2) == 0 );
+        assertTrue( ilist1.compareTo(ilist3) > 0 );
+        assertTrue( ilist1.compareTo(ilist4) > 0 );
+        assertTrue( ilist1.compareTo(ilist5) < 0 );
+    }
+    
+    @Test
+    public void testCompare_List() {
+        IntArrayList list0 = new IntArrayList(new int[]{1,3,5,7});
+        
+        List<Integer> ilist0 = new IntArrayList(new int[]{1,3,5,7});
+        List<Integer> ilist1 = new IntArrayList(new int[]{1,3,5,7});
+        List<Integer> ilist2 = new IntArrayList(new int[]{1,3,5,7});
+        List<Integer> ilist3 = new IntArrayList(new int[]{1,3,5});
+        List<Integer> ilist4 = new IntArrayList(new int[]{1,2,5,7});
+        List<Integer> ilist5 = new IntArrayList(new int[]{1,4,5,7});
+        
+        List<Integer> list1 = Arrays.asList(1,3,5,7);
+        List<Integer> list2 = Arrays.asList(1,3,5,7);
+        List<Integer> list3 = Arrays.asList(1,3,5);
+        List<Integer> list4 = Arrays.asList(1,2,5,7);
+        List<Integer> list5 = Arrays.asList(1,4,5,7);
+        
+        assertTrue( list0.compareTo(ilist0) == 0 );
+        
+        assertTrue( list0.compareTo(ilist1) == 0 );
+        assertTrue( list0.compareTo(ilist2) == 0 );
+        assertTrue( list0.compareTo(ilist3) > 0 );
+        assertTrue( list0.compareTo(ilist4) > 0 );
+        assertTrue( list0.compareTo(ilist5) < 0 );
+        
+        assertTrue( list0.compareTo(list1) == 0 );
+        assertTrue( list0.compareTo(list2) == 0 );
+        assertTrue( list0.compareTo(list3) > 0 );
+        assertTrue( list0.compareTo(list4) > 0 );
+        assertTrue( list0.compareTo(list5) < 0 );
+    }
+	
+    
+}

+ 2 - 0
assira/src/test/java/net/ranides/assira/collection/mockup/CollectionSuite.java

@@ -7,6 +7,7 @@
 package net.ranides.assira.collection.mockup;
 
 import net.ranides.assira.collection.suite.BlockCollectionTester;
+import net.ranides.assira.collection.suite.lists.IntListTester;
 import net.ranides.assira.collection.suite.lists.ListTester;
 import net.ranides.assira.collection.suite.maps.BlockMapTester;
 import net.ranides.assira.collection.suite.maps.AHashMapTester;
@@ -50,6 +51,7 @@ public final class CollectionSuite {
         .append(new BlockCollectionTester())
         
         .append(new ListTester())
+        .append(new IntListTester())
 		;
    
 }

+ 20 - 0
assira/src/test/java/net/ranides/assira/collection/suite/BlockCollectionTester.java

@@ -6,11 +6,14 @@
  */
 package net.ranides.assira.collection.suite;
 
+import java.util.List;
+import java.util.stream.Collectors;
 import javax.annotation.Resource;
 import net.ranides.assira.collection.BlockCollection;
 import net.ranides.assira.junit.InterfaceTest;
 import net.ranides.assira.test.TCollection;
 import static net.ranides.assira.junit.NewAssert.*;
+import org.junit.Test;
 
 /**
  *
@@ -60,4 +63,21 @@ public final class BlockCollectionTester<K> {
         target.trim(n);
     }
     
+    @InterfaceTest
+    public void testEnsureCapacity(BlockCollection<K> target) {
+        $set.range(256).into(target);
+        List<K> list1 = target.stream().collect(Collectors.toList());
+        
+        assertTrue(target.ensureCapacity(32));
+        assertEquals(list1.size(), target.size());
+        assertTrue(target.containsAll(list1));
+        
+        assertTrue(target.ensureCapacity(1024));
+        assertEquals(list1.size(), target.size());
+        assertTrue(target.containsAll(list1));
+        
+        assertTrue(target.capacity() >= 1024 );
+    }
+        
+    
 }

+ 138 - 0
assira/src/test/java/net/ranides/assira/collection/suite/lists/IntListTester.java

@@ -0,0 +1,138 @@
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/???
+ */
+package net.ranides.assira.collection.suite.lists;
+
+import java.util.ArrayList;
+import javax.annotation.Resource;
+import net.ranides.assira.collection.IntCollection;
+import net.ranides.assira.collection.lists.IntArrayList;
+import net.ranides.assira.collection.lists.IntList;
+import net.ranides.assira.collection.sets.IntAVLTreeSet;
+import net.ranides.assira.junit.InterfaceTest;
+import net.ranides.assira.test.TCollection;
+import static net.ranides.assira.junit.NewAssert.*;
+
+/**
+ *
+ * @author Ranides Atterwim <ranides@gmail.com>
+ */
+public class IntListTester {
+    
+    @Resource(name = "list!")
+    private TCollection<?> $list;
+    
+    @InterfaceTest
+    public void basicGetElements(IntList target) {
+		$list.list(1,3,5,7,9,11).intoInt(target);
+        
+        int[] buffer = new int[5];
+        target.getElements(2, buffer, 1, 3);
+        assertArrayEquals($list.list(0,5,7,9,0).valuesInt(), buffer);
+    }
+    
+    @InterfaceTest
+    public void basicRemoveElements(IntList target) {
+        $list.list(1,3,5,7,9,11).intoInt(target);
+        
+        target.removeElements(0, 0);
+        target.removeElements(1, 1);
+        
+        assertEquals($list.list(1,3,5,7,9,11).into(new ArrayList<>()), target);
+        
+        assertThrows(IllegalArgumentException.class, ()->{
+            target.removeElements(0, -1);
+        });
+        assertThrows(IllegalArgumentException.class, ()->{
+            target.removeElements(3, 2);
+        });
+        assertThrows(ArrayIndexOutOfBoundsException.class, ()->{
+            target.removeElements(-1, 1);
+        });
+        assertThrows(ArrayIndexOutOfBoundsException.class, ()->{
+            target.removeElements(2, 8);
+        });
+        
+        target.removeElements(1, 2);
+        assertEquals($list.list(1,5,7,9,11).into(new ArrayList<>()), target);
+        
+        target.removeElements(2, 4);
+        assertEquals($list.list(1,5,11).into(new ArrayList<>()), target);
+    }
+    
+    @InterfaceTest
+    public void basicAddElements(IntList target) {
+        $list.list(1,3,5,7,9).intoInt(target);
+
+        target.addElements(2, $list.list(31,32,33,34,35,36,37,38,39).valuesInt(), 3, 4);
+        assertEquals($list.list(1,3,34,35,36,37,5,7,9).into(new ArrayList<>()), target);
+        
+        target.addElements(7, $list.list(41,42,43).valuesInt());
+        assertEquals($list.list(1,3,34,35,36,37,5,41,42,43,7,9).into(new ArrayList<>()), target);
+        
+        target.addElements(target.size(), $list.list(51,52).valuesInt());
+        assertEquals($list.list(1,3,34,35,36,37,5,41,42,43,7,9,51,52).into(new ArrayList<>()), target);
+    }
+    
+    @InterfaceTest
+    public void basicAddAll_Collection(IntList target) {
+        $list.list(1,3,5,7,9).intoInt(target);
+        
+        target.addAll(1, icollection(11,12,13));
+        assertEquals($list.list(1,11,12,13,3,5,7,9).into(new ArrayList<>()), target);
+        
+        target.addAll(0,icollection(21,22));
+        assertEquals($list.list(21,22,1,11,12,13,3,5,7,9).into(new ArrayList<>()), target);
+        
+        target.addAll(target.size()-1, icollection(31,32,33));
+        assertEquals($list.list(21,22,1,11,12,13,3,5,7,31,32,33,9).into(new ArrayList<>()), target);
+        
+        target.addAll(target.size(),icollection(41,42,43));
+        assertEquals($list.list(21,22,1,11,12,13,3,5,7,31,32,33,9,41,42,43).into(new ArrayList<>()), target);
+        
+        target.addAll(target.size(),icollection());
+        assertEquals($list.list(21,22,1,11,12,13,3,5,7,31,32,33,9,41,42,43).into(new ArrayList<>()), target);
+    }
+    
+    @InterfaceTest
+    public void basicAddAll_List(IntList target) {
+        $list.list(1,3,5,7,9).intoInt(target);
+        
+        target.addAll(1, ilist(11,12,13));
+        assertEquals($list.list(1,11,12,13,3,5,7,9).into(new ArrayList<>()), target);
+        
+        target.addAll(0,ilist(21,22));
+        assertEquals($list.list(21,22,1,11,12,13,3,5,7,9).into(new ArrayList<>()), target);
+        
+        target.addAll(target.size()-1, ilist(31,32,33));
+        assertEquals($list.list(21,22,1,11,12,13,3,5,7,31,32,33,9).into(new ArrayList<>()), target);
+        
+        target.addAll(target.size(),ilist(41,42,43));
+        assertEquals($list.list(21,22,1,11,12,13,3,5,7,31,32,33,9,41,42,43).into(new ArrayList<>()), target);
+        
+        target.addAll(target.size(),ilist());
+        assertEquals($list.list(21,22,1,11,12,13,3,5,7,31,32,33,9,41,42,43).into(new ArrayList<>()), target);
+    }
+    
+    private IntCollection icollection(int... values) {
+        return $list.list(values).intoInt(new IntAVLTreeSet());
+    }
+    
+    private IntList ilist(int... values) {
+        return $list.list(values).intoInt(new IntArrayList());
+    }
+    
+    @InterfaceTest
+    public void basicToIntArray(IntList target) {
+        $list.list(1,3,5,7,9).intoInt(target);
+        
+        assertArrayEquals($list.list(1,3,5,7,9).valuesInt(), target.toIntArray());
+        assertArrayEquals($list.list(1,3,5,7,9).valuesInt(), target.toIntArray(null));
+        assertArrayEquals($list.list(1,3,5,7,9).valuesInt(), target.toIntArray(new int[0]));
+        assertArrayEquals($list.list(1,3,5,7,9).valuesInt(), target.toIntArray(new int[1]));
+        assertArrayEquals($list.list(1,3,5,7,9,0,0).valuesInt(), target.toIntArray(new int[7]));
+    }
+}

+ 164 - 148
assira/src/test/java/net/ranides/assira/collection/suite/lists/ListTester.java

@@ -1,148 +1,164 @@
-/*
- * @author Ranides Atterwim <ranides@gmail.com>
- * @copyright Ranides Atterwim
- * @license WTFPL
- * @url http://ranides.net/projects/???
- */
-package net.ranides.assira.collection.suite.lists;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.annotation.Resource;
-import net.ranides.assira.junit.InterfaceTest;
-import net.ranides.assira.test.TCollection;
-import static net.ranides.assira.junit.NewAssert.*;
-
-/**
- *
- * @author Ranides Atterwim <ranides@gmail.com>
- */
-public class ListTester<T> {
-    
-    @Resource(name = "list!")
-    private TCollection<T> $list;
-    
-    @InterfaceTest
-    public void basicAdd(List<T> target) {
-        assertEquals(0, target.size());
-        
-        for(TCollection.TItem<T> item : $list.range(32)) {
-            target.add(item.value());
-        }
-        
-        assertEquals(32, target.size());
-        assertEquals($list.item(4).value(), target.get(4));
-		assertEquals($list.range(32).into(new ArrayList<>()), target);
-    }
-	
-	@InterfaceTest
-    public void basicAddAt(List<T> target) {
-		assertEquals(0, target.size());
-		$list.range(8).into(target);
-		target.add(0, $list.item(71).value());
-		target.add(0, $list.item(72).value());
-		target.add(4, $list.item(73).value());
-		target.add(6, $list.item(74).value());
-		target.add(11, $list.item(75).value());
-		target.add(13, $list.item(76).value());
-
-		assertEquals( $list.list(72, 71, 0, 1, 73, 2, 74, 3, 4, 5, 6, 75, 7, 76).into(new ArrayList<>()), target);
-	}
-	
-	@InterfaceTest
-    public void basicAddAll(List<T> target) {
-        assertEquals(0, target.size());
-        
-		target.addAll($list.range(0,8).into(new ArrayList<>()));
-		target.addAll(4, $list.range(10,18).into(new ArrayList<>()));
-        
-        assertEquals(16, target.size());
-        assertEquals($list.list(0,1,2,3,10,11,12,13,14,15,16,17,4,5,6,7).into(new ArrayList<>()), target);
-    }
-	
-	@InterfaceTest
-    public void basicSet(List<T> target) {
-		$list.range(8).into(target);
-		target.set(0, $list.item(21).value());
-		target.set(2, $list.item(22).value());
-		target.set(7, $list.item(23).value());
-
-		assertThrows(IndexOutOfBoundsException.class, ()->{
-			target.set(8, $list.item(26).value());
-		});
-		assertThrows(IndexOutOfBoundsException.class, ()->{
-			target.set(-1, $list.item(27).value());
-		});
-		assertEquals( $list.list(21,1,22,3,4,5,6,23).into(new ArrayList<>()), target);
-	}
-	
-	@InterfaceTest
-    public void basicIndexOf(List<T> target) {
-		$list.list(1,3,5,7,9,3,3,11).into(target);
-		
-		assertEquals(0, target.indexOf(1));
-		assertEquals(1, target.indexOf(3));
-		assertEquals(2, target.indexOf(5));
-		assertEquals(3, target.indexOf(7));
-		assertEquals(4, target.indexOf(9));
-		assertEquals(7, target.indexOf(11));
-		assertEquals(-1, target.indexOf(0));
-	}
-	
-	@InterfaceTest
-    public void basicLastIndexOf(List<T> target) {
-		$list.list(1,3,5,7,9,3,3,11).into(target);
-		
-		assertEquals(0, target.lastIndexOf(1));
-		assertEquals(6, target.lastIndexOf(3));
-		assertEquals(2, target.lastIndexOf(5));
-		assertEquals(3, target.lastIndexOf(7));
-		assertEquals(4, target.lastIndexOf(9));
-		assertEquals(7, target.lastIndexOf(11));
-		assertEquals(-1, target.lastIndexOf(0));
-	}
-	
-	@InterfaceTest
-    public void basicRemove(List<T> target) {
-		$list.list(1,3,5,7,9,11).into(target);
-		
-		assertTrue(target.remove( $list.item(5).value()));
-		assertEquals( $list.list(1,3,7,9,11).into(new ArrayList<>()), target);
-		
-		assertTrue(target.remove( $list.item(1).value()));
-		assertEquals( $list.list(3,7,9,11).into(new ArrayList<>()), target);
-		
-		assertTrue(target.remove( $list.item(11).value()));
-		assertEquals( $list.list(3,7,9).into(new ArrayList<>()), target);
-		
-		assertFalse(target.remove( $list.item(0).value()));
-		assertEquals( $list.list(3,7,9).into(new ArrayList<>()), target);
-	}
-	
-	@InterfaceTest
-    public void basicRemoveIndex(List<T> target) {
-		$list.list(1,3,5,7,9,11).into(target);
-		
-		assertEquals($list.item(5).value(), target.remove(2));
-		assertEquals( $list.list(1,3,7,9,11).into(new ArrayList<>()), target);
-		
-		assertEquals($list.item(1).value(), target.remove(0));
-		assertEquals( $list.list(3,7,9,11).into(new ArrayList<>()), target);
-		
-		assertEquals($list.item(11).value(), target.remove(3));
-		assertEquals( $list.list(3,7,9).into(new ArrayList<>()), target);
-		
-		assertThrows(IndexOutOfBoundsException.class, ()->{
-			target.remove(20);
-		});
-		assertThrows(IndexOutOfBoundsException.class, ()->{
-			target.remove(-1);
-		});
-		assertEquals( $list.list(3,7,9).into(new ArrayList<>()), target);
-		
-		target.clear();
-		assertThrows(IndexOutOfBoundsException.class, ()->{
-			target.remove(0);
-		});
-	}
-}
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/???
+ */
+package net.ranides.assira.collection.suite.lists;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Resource;
+import net.ranides.assira.junit.InterfaceTest;
+import net.ranides.assira.test.TCollection;
+import static net.ranides.assira.junit.NewAssert.*;
+
+/**
+ *
+ * @author Ranides Atterwim <ranides@gmail.com>
+ */
+public class ListTester<T> {
+    
+    @Resource(name = "list!")
+    private TCollection<T> $list;
+    
+    @InterfaceTest
+    public void basicAdd(List<T> target) {
+        assertEquals(0, target.size());
+        
+        for(TCollection.TItem<T> item : $list.range(32)) {
+            target.add(item.value());
+        }
+        
+        assertEquals(32, target.size());
+        assertEquals($list.item(4).value(), target.get(4));
+		assertEquals($list.range(32).into(new ArrayList<>()), target);
+    }
+	
+	@InterfaceTest
+    public void basicAddAt(List<T> target) {
+		assertEquals(0, target.size());
+		$list.range(8).into(target);
+		target.add(0, $list.item(71).value());
+		target.add(0, $list.item(72).value());
+		target.add(4, $list.item(73).value());
+		target.add(6, $list.item(74).value());
+		target.add(11, $list.item(75).value());
+		target.add(13, $list.item(76).value());
+
+		assertEquals( $list.list(72, 71, 0, 1, 73, 2, 74, 3, 4, 5, 6, 75, 7, 76).into(new ArrayList<>()), target);
+        
+                
+        assertThrows(IndexOutOfBoundsException.class, ()->{
+            target.add(-1, $list.item(66).value());
+        });
+        assertThrows(IndexOutOfBoundsException.class, ()->{
+            target.add(100, $list.item(66).value());
+        });
+        
+	}
+	
+	@InterfaceTest
+    public void basicAddAll(List<T> target) {
+        assertEquals(0, target.size());
+        
+		target.addAll($list.range(0,8).into(new ArrayList<>()));
+		target.addAll(4, $list.range(10,18).into(new ArrayList<>()));
+        
+        assertEquals(16, target.size());
+        assertEquals($list.list(0,1,2,3,10,11,12,13,14,15,16,17,4,5,6,7).into(new ArrayList<>()), target);
+    }
+	
+	@InterfaceTest
+    public void basicSet(List<T> target) {
+		$list.range(8).into(target);
+		target.set(0, $list.item(21).value());
+		target.set(2, $list.item(22).value());
+		target.set(7, $list.item(23).value());
+
+		assertThrows(IndexOutOfBoundsException.class, ()->{
+			target.set(8, $list.item(26).value());
+		});
+		assertThrows(IndexOutOfBoundsException.class, ()->{
+			target.set(-1, $list.item(27).value());
+		});
+		assertEquals( $list.list(21,1,22,3,4,5,6,23).into(new ArrayList<>()), target);
+	}
+	
+	@InterfaceTest
+    public void basicIndexOf(List<T> target) {
+		$list.list(1,3,5,7,9,3,3,11).into(target);
+		
+		assertEquals(0, target.indexOf(1));
+		assertEquals(1, target.indexOf(3));
+		assertEquals(2, target.indexOf(5));
+		assertEquals(3, target.indexOf(7));
+		assertEquals(4, target.indexOf(9));
+		assertEquals(7, target.indexOf(11));
+		assertEquals(-1, target.indexOf(0));
+	}
+	
+	@InterfaceTest
+    public void basicLastIndexOf(List<T> target) {
+		$list.list(1,3,5,7,9,3,3,11).into(target);
+		
+		assertEquals(0, target.lastIndexOf(1));
+		assertEquals(6, target.lastIndexOf(3));
+		assertEquals(2, target.lastIndexOf(5));
+		assertEquals(3, target.lastIndexOf(7));
+		assertEquals(4, target.lastIndexOf(9));
+		assertEquals(7, target.lastIndexOf(11));
+		assertEquals(-1, target.lastIndexOf(0));
+	}
+	
+	@InterfaceTest
+    public void basicRemove(List<T> target) {
+		$list.list(1,3,5,7,9,11).into(target);
+		
+		assertTrue(target.remove( $list.item(5).value()));
+		assertEquals( $list.list(1,3,7,9,11).into(new ArrayList<>()), target);
+		
+		assertTrue(target.remove( $list.item(1).value()));
+		assertEquals( $list.list(3,7,9,11).into(new ArrayList<>()), target);
+		
+		assertTrue(target.remove( $list.item(11).value()));
+		assertEquals( $list.list(3,7,9).into(new ArrayList<>()), target);
+		
+		assertFalse(target.remove( $list.item(0).value()));
+		assertEquals( $list.list(3,7,9).into(new ArrayList<>()), target);
+	}
+	
+	@InterfaceTest
+    public void basicRemoveIndex(List<T> target) {
+		$list.list(1,3,5,7,9,11).into(target);
+		
+		assertEquals($list.item(5).value(), target.remove(2));
+		assertEquals( $list.list(1,3,7,9,11).into(new ArrayList<>()), target);
+		
+		assertEquals($list.item(1).value(), target.remove(0));
+		assertEquals( $list.list(3,7,9,11).into(new ArrayList<>()), target);
+		
+		assertEquals($list.item(11).value(), target.remove(3));
+		assertEquals( $list.list(3,7,9).into(new ArrayList<>()), target);
+		
+		assertThrows(IndexOutOfBoundsException.class, ()->{
+			target.remove(20);
+		});
+		assertThrows(IndexOutOfBoundsException.class, ()->{
+			target.remove(-1);
+		});
+		assertEquals( $list.list(3,7,9).into(new ArrayList<>()), target);
+		
+		target.clear();
+		assertThrows(IndexOutOfBoundsException.class, ()->{
+			target.remove(0);
+		});
+	}
+    
+    @InterfaceTest
+    public void basicSerializable(List<T> target) {
+        $list.list(1,2,3,4).into(target);
+        assertSerializable(target);
+    }
+}