|
|
@@ -1,449 +1,449 @@
|
|
|
-/*
|
|
|
- * @author Ranides Atterwim <ranides@gmail.com>
|
|
|
- * @copyright Ranides Atterwim
|
|
|
- * @license WTFPL
|
|
|
- * @url http://ranides.net/projects/assira
|
|
|
- */
|
|
|
-package net.ranides.assira.collection.suite.lists;
|
|
|
-
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Collections;
|
|
|
-import java.util.Iterator;
|
|
|
-import java.util.List;
|
|
|
-import java.util.ListIterator;
|
|
|
-import java.util.function.Supplier;
|
|
|
-import javax.annotation.Resource;
|
|
|
-import net.ranides.assira.collection.suite.IteratorTester;
|
|
|
-import net.ranides.assira.junit.InterfaceSuite;
|
|
|
-import net.ranides.assira.junit.InterfaceTest;
|
|
|
-import net.ranides.assira.test.TCollection;
|
|
|
-import net.ranides.assira.test.TCollection.TItems;
|
|
|
-import static net.ranides.assira.junit.NewAssert.*;
|
|
|
-
|
|
|
-/**
|
|
|
- *
|
|
|
- * @author Ranides Atterwim <ranides@gmail.com>
|
|
|
- */
|
|
|
-public class ListTester<T> {
|
|
|
-
|
|
|
- @Resource(name = "list!")
|
|
|
- private TCollection<T> $list;
|
|
|
-
|
|
|
- @Resource(name = "nest!")
|
|
|
- private boolean $nest = false;
|
|
|
-
|
|
|
- @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());
|
|
|
-
|
|
|
- assertTrue(target.addAll($list.range(0,8).into(new ArrayList<>())));
|
|
|
- assertTrue(target.addAll(4, $list.range(10,18).into(new ArrayList<>())));
|
|
|
- assertFalse(target.addAll(4, 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 basicGet(List<T> target) {
|
|
|
- assertEquals(0, target.size());
|
|
|
- $list.range(0,8).into(target);
|
|
|
-
|
|
|
- assertEquals(8, target.size());
|
|
|
-
|
|
|
- assertEquals($list.item(3).value(), target.get(3));
|
|
|
- assertEquals($list.item(5).value(), target.get(5));
|
|
|
- assertEquals($list.item(7).value(), target.get(7));
|
|
|
- assertThrows(IndexOutOfBoundsException.class, ()->{
|
|
|
- target.get(-1);
|
|
|
- });
|
|
|
- assertThrows(IndexOutOfBoundsException.class, ()->{
|
|
|
- target.get(20);
|
|
|
- });
|
|
|
- assertThrows(IndexOutOfBoundsException.class, ()->{
|
|
|
- target.get(8);
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- @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(6, target.lastIndexOf(3));
|
|
|
- assertEquals(0, target.lastIndexOf(1));
|
|
|
- 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 basicClear(List<T> target) {
|
|
|
- $list.list(1,3,5,7,9,11).into(target);
|
|
|
- assertEquals(6, target.size());
|
|
|
- assertFalse(target.isEmpty());
|
|
|
-
|
|
|
- target.clear();
|
|
|
- assertEquals(0, target.size());
|
|
|
- assertTrue(target.isEmpty());
|
|
|
-
|
|
|
- $list.list(21,22).into(target);
|
|
|
- assertEquals(2, target.size());
|
|
|
- assertFalse(target.isEmpty());
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @InterfaceTest
|
|
|
- public void basicSerializable(List<T> target) {
|
|
|
- $list.list(1,2,3,4).into(target);
|
|
|
- assertSerializable(target);
|
|
|
- }
|
|
|
-
|
|
|
- @InterfaceTest
|
|
|
- public void basicEquals(Supplier<List<T>> generator) {
|
|
|
- List<T> list1 = $list.list(1,2,3,4).into(generator.get());
|
|
|
- List<T> list2 = $list.list(1,2,3,4).into(generator.get());
|
|
|
- List<T> list3 = $list.list(1,5,6,8).into(generator.get());
|
|
|
- List<T> list4 = $list.list(1,2,3).into(generator.get());
|
|
|
- List<T> list5 = $list.list(1,2,4,3).into(generator.get());
|
|
|
-
|
|
|
- assertEquality(list1, list2, list3);
|
|
|
- assertEquality(list1, list2, list4);
|
|
|
- assertEquality(list1, list2, list5);
|
|
|
- }
|
|
|
-
|
|
|
- @InterfaceTest
|
|
|
- public void basicSublist(List<T> target) {
|
|
|
- $list.list(1,3,5,7,9).into(target);
|
|
|
-
|
|
|
- assertEquals($values(3,5,7,9), target.subList(1, 5));
|
|
|
- assertEquals($values(3,5,7), target.subList(1, 4));
|
|
|
- assertEquals($values(1,3,5,7,9), target.subList(0, 5));
|
|
|
-
|
|
|
- assertThrows(IndexOutOfBoundsException.class, ()->{
|
|
|
- target.subList(-1, 3);
|
|
|
- });
|
|
|
- assertThrows(IndexOutOfBoundsException.class, ()->{
|
|
|
- target.subList(1, 30);
|
|
|
- });
|
|
|
- assertThrows(IndexOutOfBoundsException.class, ()->{
|
|
|
- target.subList(0, 6);
|
|
|
- });
|
|
|
- assertThrows(IllegalArgumentException.class, ()->{
|
|
|
- target.subList(4, 1);
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- @InterfaceTest
|
|
|
- public void basicSublist_indexOf(List<T> target) {
|
|
|
- $list.list(1,3,5,7,9).into(target);
|
|
|
-
|
|
|
- assertEquals(-1, target.subList(1, 3).indexOf($list.item(9).value()));
|
|
|
- assertEquals(-1, target.subList(1, 3).indexOf($list.item(1).value()));
|
|
|
- assertEquals(1, target.subList(1, 3).indexOf($list.item(5).value()));
|
|
|
- }
|
|
|
-
|
|
|
- @InterfaceTest
|
|
|
- public void basicSublist_lastIndexOf(List<T> target) {
|
|
|
- $list.list(1,3,5,7,9).into(target);
|
|
|
-
|
|
|
- assertEquals(-1, target.subList(1, 3).lastIndexOf($list.item(9).value()));
|
|
|
- assertEquals(-1, target.subList(1, 3).lastIndexOf($list.item(1).value()));
|
|
|
- assertEquals(1, target.subList(1, 3).lastIndexOf($list.item(5).value()));
|
|
|
- }
|
|
|
-
|
|
|
- @InterfaceTest
|
|
|
- public void basicSublist_add(List<T> target) {
|
|
|
- $list.list(1,3,5,7,9).into(target);
|
|
|
- List<T> sub = target.subList(1, 3);
|
|
|
-
|
|
|
- assertEquals($values(3,5), sub);
|
|
|
- assertEquals($values(1,3,5,7,9), target);
|
|
|
-
|
|
|
- sub.add(1, $list.item(21).value());
|
|
|
- assertEquals($values(3,21,5), sub);
|
|
|
- assertEquals($values(1,3,21,5,7,9), target);
|
|
|
-
|
|
|
- sub.add($list.item(31).value());
|
|
|
- assertEquals($values(3,21,5,31), sub);
|
|
|
- assertEquals($values(1,3,21,5,31,7,9), target);
|
|
|
- }
|
|
|
-
|
|
|
- @InterfaceTest
|
|
|
- public void basicSublist_addAll(List<T> target) {
|
|
|
- $list.list(1,3,5,7,9).into(target);
|
|
|
- List<T> sub = target.subList(1, 3);
|
|
|
-
|
|
|
- assertEquals($values(3,5), sub);
|
|
|
- assertEquals($values(1,3,5,7,9), target);
|
|
|
-
|
|
|
- sub.addAll(1, $values(21,22));
|
|
|
- assertEquals($values(3,21,22,5), sub);
|
|
|
- assertEquals($values(1,3,21,22,5,7,9), target);
|
|
|
-
|
|
|
- sub.addAll($values(31,32));
|
|
|
- assertEquals($values(3,21,22,5,31,32), sub);
|
|
|
- assertEquals($values(1,3,21,22,5,31,32,7,9), target);
|
|
|
- }
|
|
|
-
|
|
|
- @InterfaceTest
|
|
|
- public void basicSublist_clear(List<T> target) {
|
|
|
- $list.list(1,3,5,7,9).into(target);
|
|
|
- List<T> sub = target.subList(1, 3);
|
|
|
-
|
|
|
- sub.clear();
|
|
|
- assertEquals(Collections.emptyList(), sub);
|
|
|
- assertEquals($values(1,7,9), target);
|
|
|
-
|
|
|
- sub.addAll($values(31,32));
|
|
|
- assertEquals($values(31,32), sub);
|
|
|
- assertEquals($values(1,31,32,7,9), target);
|
|
|
- }
|
|
|
-
|
|
|
- @InterfaceTest
|
|
|
- public void basicSublist_set(List<T> target) {
|
|
|
- $list.list(1,3,5,7,9).into(target);
|
|
|
- List<T> sub = target.subList(1, 3);
|
|
|
-
|
|
|
- assertEquals($list.item(3).value(), sub.set(0, $list.item(21).value()));
|
|
|
- assertEquals($list.item(5).value(), sub.set(1, $list.item(22).value()));
|
|
|
-
|
|
|
- assertEquals($list.item(21).value(), sub.get(0));
|
|
|
- assertEquals($list.item(22).value(), sub.get(1));
|
|
|
-
|
|
|
- assertEquals($values(21,22), sub);
|
|
|
- assertEquals($values(1,21,22,7,9), target);
|
|
|
- }
|
|
|
-
|
|
|
- @SuppressWarnings("unchecked")
|
|
|
- @InterfaceTest
|
|
|
- public void basicIterator(List<T> target) {
|
|
|
- TItems<T> list1 = $list.list();
|
|
|
- TItems<T> list2 = $list.list(3, 4, 5, 6, 7);
|
|
|
-
|
|
|
- IteratorTester.listIterator(target.listIterator(), 0, list1.values());
|
|
|
-
|
|
|
- list2.into(target);
|
|
|
-
|
|
|
- IteratorTester.listIterator(target.listIterator(), 0, list2.values());
|
|
|
- }
|
|
|
-
|
|
|
- @InterfaceTest
|
|
|
- public void basicIteratorFrom(List<T> target) {
|
|
|
- TItems<T> list1 = $list.list();
|
|
|
- TItems<T> list2 = $list.list(3, 4, 5, 6, 7);
|
|
|
-
|
|
|
- IteratorTester.listIterator(target.listIterator(0), 0, list1.values());
|
|
|
-
|
|
|
- list2.into(target);
|
|
|
- IteratorTester.listIterator(target.listIterator(2), 2, list2.values());
|
|
|
- }
|
|
|
-
|
|
|
- @InterfaceTest
|
|
|
- public void basicIterator_Remove(List<T> target) {
|
|
|
- assertEquals(0, target.size());
|
|
|
-
|
|
|
- $list.list(1,2,3,5).into(target);
|
|
|
- T v1 = $list.item(1).value();
|
|
|
- T v2 = $list.item(3).value();
|
|
|
-
|
|
|
- Iterator<T> iterator = target.iterator();
|
|
|
- while(iterator.hasNext()) {
|
|
|
- T var = iterator.next();
|
|
|
- if(v1.equals(var)) {
|
|
|
- iterator.remove();
|
|
|
- }
|
|
|
- if(v2.equals(var)) {
|
|
|
- iterator.remove();
|
|
|
- assertThrows(IllegalStateException.class, ()-> iterator.remove());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- assertEquals(2, target.size());
|
|
|
- assertEquals(-1, target.indexOf(v1));
|
|
|
- assertEquals(-1, target.indexOf(v2));
|
|
|
- assertEquals($values(2,5), target);
|
|
|
-
|
|
|
- target.clear();
|
|
|
- assertEquals(0, target.size());
|
|
|
- }
|
|
|
-
|
|
|
- @InterfaceTest
|
|
|
- public void basicIterator_Set(List<T> target) {
|
|
|
- assertEquals(0, target.size());
|
|
|
-
|
|
|
- $list.list(1,2,3,5).into(target);
|
|
|
- T v1 = $list.item(1).value();
|
|
|
- T v2 = $list.item(3).value();
|
|
|
-
|
|
|
- ListIterator<T> iterator = target.listIterator();
|
|
|
-
|
|
|
- assertThrows(IllegalStateException.class, ()->{
|
|
|
- iterator.set($list.item(41).value());
|
|
|
- });
|
|
|
-
|
|
|
- while(iterator.hasNext()) {
|
|
|
- T var = iterator.next();
|
|
|
- if(v1.equals(var)) {
|
|
|
- iterator.set($list.item(21).value());
|
|
|
- }
|
|
|
- if(v2.equals(var)) {
|
|
|
- iterator.set($list.item(31).value());
|
|
|
- iterator.set($list.item(32).value());
|
|
|
- }
|
|
|
- }
|
|
|
- assertEquals($values(21,2,32,5), target);
|
|
|
- }
|
|
|
-
|
|
|
- @InterfaceTest
|
|
|
- public void basicIterator_Add(List<T> target) {
|
|
|
- assertEquals(0, target.size());
|
|
|
-
|
|
|
- $list.list(1,2,3,5).into(target);
|
|
|
- T v1 = $list.item(1).value();
|
|
|
- T v2 = $list.item(3).value();
|
|
|
-
|
|
|
- ListIterator<T> iterator = target.listIterator();
|
|
|
-
|
|
|
- iterator.add($list.item(41).value());
|
|
|
-
|
|
|
- while(iterator.hasNext()) {
|
|
|
- T var = iterator.next();
|
|
|
- if(v1.equals(var)) {
|
|
|
- iterator.add($list.item(21).value());
|
|
|
- }
|
|
|
- if(v2.equals(var)) {
|
|
|
- iterator.add($list.item(31).value());
|
|
|
- iterator.add($list.item(32).value());
|
|
|
- }
|
|
|
- }
|
|
|
- assertEquals($values(41, 1, 21, 2, 3, 31, 32, 5), target);
|
|
|
- }
|
|
|
-
|
|
|
- @InterfaceTest
|
|
|
- public void nestedSublistTest(Supplier<List<T>> target) {
|
|
|
- if(!$nest) {
|
|
|
- throw new UnsupportedOperationException("TEST.SILENT");
|
|
|
- }
|
|
|
- new InterfaceSuite(System.err)
|
|
|
- .append(new ListTester<>())
|
|
|
- .append(new IntListTester())
|
|
|
- .param("list!", $list)
|
|
|
- .run(()->target.get().subList(0, 0));
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- private List<T> $values(int... values) {
|
|
|
- return $list.list(values).into(new ArrayList<>());
|
|
|
- }
|
|
|
-}
|
|
|
+/*
|
|
|
+ * @author Ranides Atterwim <ranides@gmail.com>
|
|
|
+ * @copyright Ranides Atterwim
|
|
|
+ * @license WTFPL
|
|
|
+ * @url http://ranides.net/projects/assira
|
|
|
+ */
|
|
|
+package net.ranides.assira.collection.suite.lists;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.Iterator;
|
|
|
+import java.util.List;
|
|
|
+import java.util.ListIterator;
|
|
|
+import java.util.function.Supplier;
|
|
|
+import javax.annotation.Resource;
|
|
|
+import net.ranides.assira.collection.suite.IteratorTester;
|
|
|
+import net.ranides.assira.junit.InterfaceSuite;
|
|
|
+import net.ranides.assira.junit.InterfaceTest;
|
|
|
+import net.ranides.assira.test.TCollection;
|
|
|
+import net.ranides.assira.test.TCollection.TItems;
|
|
|
+import static net.ranides.assira.junit.NewAssert.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ * @author Ranides Atterwim <ranides@gmail.com>
|
|
|
+ */
|
|
|
+public class ListTester<T> {
|
|
|
+
|
|
|
+ @Resource(name = "list!")
|
|
|
+ private TCollection<T> $list;
|
|
|
+
|
|
|
+ @Resource(name = "nest!")
|
|
|
+ private boolean $nest = false;
|
|
|
+
|
|
|
+ @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());
|
|
|
+
|
|
|
+ assertTrue(target.addAll($list.range(0,8).into(new ArrayList<>())));
|
|
|
+ assertTrue(target.addAll(4, $list.range(10,18).into(new ArrayList<>())));
|
|
|
+ assertFalse(target.addAll(4, 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 basicGet(List<T> target) {
|
|
|
+ assertEquals(0, target.size());
|
|
|
+ $list.range(0,8).into(target);
|
|
|
+
|
|
|
+ assertEquals(8, target.size());
|
|
|
+
|
|
|
+ assertEquals($list.item(3).value(), target.get(3));
|
|
|
+ assertEquals($list.item(5).value(), target.get(5));
|
|
|
+ assertEquals($list.item(7).value(), target.get(7));
|
|
|
+ assertThrows(IndexOutOfBoundsException.class, ()->{
|
|
|
+ target.get(-1);
|
|
|
+ });
|
|
|
+ assertThrows(IndexOutOfBoundsException.class, ()->{
|
|
|
+ target.get(20);
|
|
|
+ });
|
|
|
+ assertThrows(IndexOutOfBoundsException.class, ()->{
|
|
|
+ target.get(8);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ @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(6, target.lastIndexOf(3));
|
|
|
+ assertEquals(0, target.lastIndexOf(1));
|
|
|
+ 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 basicClear(List<T> target) {
|
|
|
+ $list.list(1,3,5,7,9,11).into(target);
|
|
|
+ assertEquals(6, target.size());
|
|
|
+ assertFalse(target.isEmpty());
|
|
|
+
|
|
|
+ target.clear();
|
|
|
+ assertEquals(0, target.size());
|
|
|
+ assertTrue(target.isEmpty());
|
|
|
+
|
|
|
+ $list.list(21,22).into(target);
|
|
|
+ assertEquals(2, target.size());
|
|
|
+ assertFalse(target.isEmpty());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicSerializable(List<T> target) {
|
|
|
+ $list.list(1,2,3,4).into(target);
|
|
|
+ assertSerializable(target);
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicEquals(Supplier<List<T>> generator) {
|
|
|
+ List<T> list1 = $list.list(1,2,3,4).into(generator.get());
|
|
|
+ List<T> list2 = $list.list(1,2,3,4).into(generator.get());
|
|
|
+ List<T> list3 = $list.list(1,5,6,8).into(generator.get());
|
|
|
+ List<T> list4 = $list.list(1,2,3).into(generator.get());
|
|
|
+ List<T> list5 = $list.list(1,2,4,3).into(generator.get());
|
|
|
+
|
|
|
+ assertEquality(list1, list2, list3);
|
|
|
+ assertEquality(list1, list2, list4);
|
|
|
+ assertEquality(list1, list2, list5);
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicSublist(List<T> target) {
|
|
|
+ $list.list(1,3,5,7,9).into(target);
|
|
|
+
|
|
|
+ assertEquals($values(3,5,7,9), target.subList(1, 5));
|
|
|
+ assertEquals($values(3,5,7), target.subList(1, 4));
|
|
|
+ assertEquals($values(1,3,5,7,9), target.subList(0, 5));
|
|
|
+
|
|
|
+ assertThrows(IndexOutOfBoundsException.class, ()->{
|
|
|
+ target.subList(-1, 3);
|
|
|
+ });
|
|
|
+ assertThrows(IndexOutOfBoundsException.class, ()->{
|
|
|
+ target.subList(1, 30);
|
|
|
+ });
|
|
|
+ assertThrows(IndexOutOfBoundsException.class, ()->{
|
|
|
+ target.subList(0, 6);
|
|
|
+ });
|
|
|
+ assertThrows(IllegalArgumentException.class, ()->{
|
|
|
+ target.subList(4, 1);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicSublist_indexOf(List<T> target) {
|
|
|
+ $list.list(1,3,5,7,9).into(target);
|
|
|
+
|
|
|
+ assertEquals(-1, target.subList(1, 3).indexOf($list.item(9).value()));
|
|
|
+ assertEquals(-1, target.subList(1, 3).indexOf($list.item(1).value()));
|
|
|
+ assertEquals(1, target.subList(1, 3).indexOf($list.item(5).value()));
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicSublist_lastIndexOf(List<T> target) {
|
|
|
+ $list.list(1,3,5,7,9).into(target);
|
|
|
+
|
|
|
+ assertEquals(-1, target.subList(1, 3).lastIndexOf($list.item(9).value()));
|
|
|
+ assertEquals(-1, target.subList(1, 3).lastIndexOf($list.item(1).value()));
|
|
|
+ assertEquals(1, target.subList(1, 3).lastIndexOf($list.item(5).value()));
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicSublist_add(List<T> target) {
|
|
|
+ $list.list(1,3,5,7,9).into(target);
|
|
|
+ List<T> sub = target.subList(1, 3);
|
|
|
+
|
|
|
+ assertEquals($values(3,5), sub);
|
|
|
+ assertEquals($values(1,3,5,7,9), target);
|
|
|
+
|
|
|
+ sub.add(1, $list.item(21).value());
|
|
|
+ assertEquals($values(3,21,5), sub);
|
|
|
+ assertEquals($values(1,3,21,5,7,9), target);
|
|
|
+
|
|
|
+ sub.add($list.item(31).value());
|
|
|
+ assertEquals($values(3,21,5,31), sub);
|
|
|
+ assertEquals($values(1,3,21,5,31,7,9), target);
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicSublist_addAll(List<T> target) {
|
|
|
+ $list.list(1,3,5,7,9).into(target);
|
|
|
+ List<T> sub = target.subList(1, 3);
|
|
|
+
|
|
|
+ assertEquals($values(3,5), sub);
|
|
|
+ assertEquals($values(1,3,5,7,9), target);
|
|
|
+
|
|
|
+ sub.addAll(1, $values(21,22));
|
|
|
+ assertEquals($values(3,21,22,5), sub);
|
|
|
+ assertEquals($values(1,3,21,22,5,7,9), target);
|
|
|
+
|
|
|
+ sub.addAll($values(31,32));
|
|
|
+ assertEquals($values(3,21,22,5,31,32), sub);
|
|
|
+ assertEquals($values(1,3,21,22,5,31,32,7,9), target);
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicSublist_clear(List<T> target) {
|
|
|
+ $list.list(1,3,5,7,9).into(target);
|
|
|
+ List<T> sub = target.subList(1, 3);
|
|
|
+
|
|
|
+ sub.clear();
|
|
|
+ assertEquals(Collections.emptyList(), sub);
|
|
|
+ assertEquals($values(1,7,9), target);
|
|
|
+
|
|
|
+ sub.addAll($values(31,32));
|
|
|
+ assertEquals($values(31,32), sub);
|
|
|
+ assertEquals($values(1,31,32,7,9), target);
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicSublist_set(List<T> target) {
|
|
|
+ $list.list(1,3,5,7,9).into(target);
|
|
|
+ List<T> sub = target.subList(1, 3);
|
|
|
+
|
|
|
+ assertEquals($list.item(3).value(), sub.set(0, $list.item(21).value()));
|
|
|
+ assertEquals($list.item(5).value(), sub.set(1, $list.item(22).value()));
|
|
|
+
|
|
|
+ assertEquals($list.item(21).value(), sub.get(0));
|
|
|
+ assertEquals($list.item(22).value(), sub.get(1));
|
|
|
+
|
|
|
+ assertEquals($values(21,22), sub);
|
|
|
+ assertEquals($values(1,21,22,7,9), target);
|
|
|
+ }
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicIterator(List<T> target) {
|
|
|
+ TItems<T> list1 = $list.list();
|
|
|
+ TItems<T> list2 = $list.list(3, 4, 5, 6, 7);
|
|
|
+
|
|
|
+ IteratorTester.listIterator(target.listIterator(), 0, list1.values());
|
|
|
+
|
|
|
+ list2.into(target);
|
|
|
+
|
|
|
+ IteratorTester.listIterator(target.listIterator(), 0, list2.values());
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicIteratorFrom(List<T> target) {
|
|
|
+ TItems<T> list1 = $list.list();
|
|
|
+ TItems<T> list2 = $list.list(3, 4, 5, 6, 7);
|
|
|
+
|
|
|
+ IteratorTester.listIterator(target.listIterator(0), 0, list1.values());
|
|
|
+
|
|
|
+ list2.into(target);
|
|
|
+ IteratorTester.listIterator(target.listIterator(2), 2, list2.values());
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicIterator_Remove(List<T> target) {
|
|
|
+ assertEquals(0, target.size());
|
|
|
+
|
|
|
+ $list.list(1,2,3,5).into(target);
|
|
|
+ T v1 = $list.item(1).value();
|
|
|
+ T v2 = $list.item(3).value();
|
|
|
+
|
|
|
+ Iterator<T> iterator = target.iterator();
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ T var = iterator.next();
|
|
|
+ if(v1.equals(var)) {
|
|
|
+ iterator.remove();
|
|
|
+ }
|
|
|
+ if(v2.equals(var)) {
|
|
|
+ iterator.remove();
|
|
|
+ assertThrows(IllegalStateException.class, ()-> iterator.remove());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ assertEquals(2, target.size());
|
|
|
+ assertEquals(-1, target.indexOf(v1));
|
|
|
+ assertEquals(-1, target.indexOf(v2));
|
|
|
+ assertEquals($values(2,5), target);
|
|
|
+
|
|
|
+ target.clear();
|
|
|
+ assertEquals(0, target.size());
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicIterator_Set(List<T> target) {
|
|
|
+ assertEquals(0, target.size());
|
|
|
+
|
|
|
+ $list.list(1,2,3,5).into(target);
|
|
|
+ T v1 = $list.item(1).value();
|
|
|
+ T v2 = $list.item(3).value();
|
|
|
+
|
|
|
+ ListIterator<T> iterator = target.listIterator();
|
|
|
+
|
|
|
+ assertThrows(IllegalStateException.class, ()->{
|
|
|
+ iterator.set($list.item(41).value());
|
|
|
+ });
|
|
|
+
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ T var = iterator.next();
|
|
|
+ if(v1.equals(var)) {
|
|
|
+ iterator.set($list.item(21).value());
|
|
|
+ }
|
|
|
+ if(v2.equals(var)) {
|
|
|
+ iterator.set($list.item(31).value());
|
|
|
+ iterator.set($list.item(32).value());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ assertEquals($values(21,2,32,5), target);
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void basicIterator_Add(List<T> target) {
|
|
|
+ assertEquals(0, target.size());
|
|
|
+
|
|
|
+ $list.list(1,2,3,5).into(target);
|
|
|
+ T v1 = $list.item(1).value();
|
|
|
+ T v2 = $list.item(3).value();
|
|
|
+
|
|
|
+ ListIterator<T> iterator = target.listIterator();
|
|
|
+
|
|
|
+ iterator.add($list.item(41).value());
|
|
|
+
|
|
|
+ while(iterator.hasNext()) {
|
|
|
+ T var = iterator.next();
|
|
|
+ if(v1.equals(var)) {
|
|
|
+ iterator.add($list.item(21).value());
|
|
|
+ }
|
|
|
+ if(v2.equals(var)) {
|
|
|
+ iterator.add($list.item(31).value());
|
|
|
+ iterator.add($list.item(32).value());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ assertEquals($values(41, 1, 21, 2, 3, 31, 32, 5), target);
|
|
|
+ }
|
|
|
+
|
|
|
+ @InterfaceTest
|
|
|
+ public void nestedSublistTest(Supplier<List<T>> target) {
|
|
|
+ if(!$nest) {
|
|
|
+ throw new UnsupportedOperationException("TEST.SILENT");
|
|
|
+ }
|
|
|
+ new InterfaceSuite(System.err)
|
|
|
+ .append(new ListTester<>())
|
|
|
+ .append(new IntListTester())
|
|
|
+ .param("list!", $list)
|
|
|
+ .run(()->target.get().subList(0, 0));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<T> $values(int... values) {
|
|
|
+ return $list.list(values).into(new ArrayList<>());
|
|
|
+ }
|
|
|
+}
|