package org.oscim.utils.pool; import static java.lang.System.out; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import org.junit.Assert; import org.junit.Test; import org.oscim.utils.pool.Inlist.List; public class InlistTest { @Test public void shouldWork() { List<Thing> list = new List<Thing>(); list.reverse(); assertNull(list.pop()); list.push(new Thing(1)); list.push(new Thing(2)); list.push(new Thing(3)); list.push(new Thing(4)); list.push(new Thing(5)); /* iterate items */ int i = 5; for (Thing it : list) assertEquals(it.value, i--); assertEquals(i, 0); /* iterate with insertion order */ list.reverse(); i = 1; for (Thing it : list) assertEquals(it.value, i++); assertEquals(i, 6); list.reverse(); List<Thing> list2 = new List<Thing>(); /* pop list and append to list2 */ for (int j = 5; j > 0; j--) { Thing t = list.pop(); assertEquals(t.value, j); Assert.assertNull(t.next); list2.append(t); } /* check nothing to iterate */ for (Thing t : list) assert (t == null && t != null); assertNull(list.pop()); assertNull(list.head()); list.push(new Thing(6)); /* move items from list2 to list */ list.appendList(list2.clear()); assertNull(list2.head()); assertNull(list2.pop()); list.reverse(); list.push(new Thing(0)); i = 0; for (Thing t : list) assertEquals(t.value, i++); assertEquals(i, 7); } @Test public void shouldRemoveFirstInIterator() { List<Thing> list = new List<Thing>(); list.push(new Thing(1)); list.push(new Thing(2)); list.push(new Thing(3)); list.push(new Thing(4)); list.push(new Thing(5)); out.println("\n shouldRemoveFirstInIterator"); int cnt = 5; for (Thing t : list) { list.remove(); cnt--; assertEquals(cnt, list.size()); } } @Test public void shouldRemoveSomeInIterator() { List<Thing> list = new List<Thing>(); list.push(new Thing(1)); list.push(new Thing(2)); list.push(new Thing(3)); list.push(new Thing(4)); list.push(new Thing(5)); list.push(new Thing(6)); out.println("\n shouldRemoveSomeInIterator"); int pos = 0; for (Thing t : list) { if (pos++ % 2 == 0) { out.println(pos + " val:" + t.value); list.remove(); } } assertEquals(3, list.size()); for (Thing t : list) { out.println(t.value); } } @Test public void shouldRemoveLastInIterator() { List<Thing> list = new List<Thing>(); list.append(new Thing(1)); list.append(new Thing(2)); out.println("\n shouldRemoveLastInIterator"); int pos = 0; for (Thing t : list) { if (pos++ == 1) { out.println(pos + " val:" + t.value); list.remove(); } } assertEquals(1, list.size()); for (Thing t : list) { out.println(t.value); } } static class Thing extends Inlist<Thing> { final int value; public Thing(int val) { value = val; } }; }