// Path: com.grack.adventure.logic/src/main/java/com/grack/adventure/util/RestartableTypeFilteringListIterator.java
// public class RestartableTypeFilteringListIterator<U, T extends U> implements Iterator<T> {
// 	private final Predicate<? super U> isOfT;
// 	private int index;
// 	private boolean needNext = true;
// 	private final List<U> list;
// 
// 	public RestartableTypeFilteringListIterator(List<U> list, Predicate<? super U> isOfT) {
// 		this(list, isOfT, 0);
// 	}
// 
// 	public RestartableTypeFilteringListIterator(List<U> list, Predicate<? super U> isOfT, int startIndex) {
// 		this.list = list;
// 		this.isOfT = isOfT;
// 		this.index = startIndex;
// 	}
// 
// 	private void prepareNext() {
// 		if (needNext) {
// 			needNext = false;
// 
// 			for (; index < list.size(); index++) {
// 				if (isOfT.apply(list.get(index))) {
// 					return;
// 				}
// 			}
// 
// 			index = list.size();
// 		}
// 	}
// 
// 	public boolean hasNext() {
// 		prepareNext();
// 		return index < list.size();
// 	}
// 
// 	@SuppressWarnings("unchecked")
// 	public T next() {
// 		prepareNext();
// 		if (index >= list.size())
// 			throw new IllegalStateException("Past end of list");
// 		needNext = true;
// 		return (T) list.get(index++);
// 	}
// 
// 	public int getNextIndex() {
// 		return index;
// 	}
// 
// 	public void remove() {
// 		throw new UnsupportedOperationException();
// 	}
// }


import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.junit.Test;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Lists;
import com.grack.adventure.util.RestartableTypeFilteringListIterator;
package com.grack.adventure.util;





public class RestartableTypeFilteringListIteratorTest {
	@Test
	public void filterNumbers() {
		List<Number> list = Lists.newArrayList();
		list.add((int) 1);
		list.add((double) 1);
		list.add((int) 2);

// Path: com.grack.adventure.logic/src/main/java/com/grack/adventure/util/RestartableTypeFilteringListIterator.java
// public class RestartableTypeFilteringListIterator<U, T extends U> implements Iterator<T> {
// 	private final Predicate<? super U> isOfT;
// 	private int index;
// 	private boolean needNext = true;
// 	private final List<U> list;
// 
// 	public RestartableTypeFilteringListIterator(List<U> list, Predicate<? super U> isOfT) {
// 		this(list, isOfT, 0);
// 	}
// 
// 	public RestartableTypeFilteringListIterator(List<U> list, Predicate<? super U> isOfT, int startIndex) {
// 		this.list = list;
// 		this.isOfT = isOfT;
// 		this.index = startIndex;
// 	}
// 
// 	private void prepareNext() {
// 		if (needNext) {
// 			needNext = false;
// 
// 			for (; index < list.size(); index++) {
// 				if (isOfT.apply(list.get(index))) {
// 					return;
// 				}
// 			}
// 
// 			index = list.size();
// 		}
// 	}
// 
// 	public boolean hasNext() {
// 		prepareNext();
// 		return index < list.size();
// 	}
// 
// 	@SuppressWarnings("unchecked")
// 	public T next() {
// 		prepareNext();
// 		if (index >= list.size())
// 			throw new IllegalStateException("Past end of list");
// 		needNext = true;
// 		return (T) list.get(index++);
// 	}
// 
// 	public int getNextIndex() {
// 		return index;
// 	}
// 
// 	public void remove() {
// 		throw new UnsupportedOperationException();
// 	}
// }


// Path: com.grack.adventure.logic/src/test/java/com/grack/adventure/util/RestartableTypeFilteringListIteratorTest.java
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.junit.Test;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Lists;
import com.grack.adventure.util.RestartableTypeFilteringListIterator;

package com.grack.adventure.util;





public class RestartableTypeFilteringListIteratorTest {
	@Test
	public void filterNumbers() {
		List<Number> list = Lists.newArrayList();
		list.add((int) 1);
		list.add((double) 1);
		list.add((int) 2);

		RestartableTypeFilteringListIterator<Number, Integer> iterator = 