// Path: src/org/hashtrees/util/FlattenIterator.java
// @NotThreadSafe
// public class FlattenIterator<T> implements Iterator<T> {
// 
// 	private final Iterator<Iterator<T>> itrs;
// 	private final Queue<Iterator<T>> intQue = new ArrayDeque<>(1);
// 
// 	public FlattenIterator(Iterator<Iterator<T>> itrs) {
// 		this.itrs = itrs;
// 	}
// 
// 	@Override
// 	public boolean hasNext() {
// 		loadNextElement();
// 		return !intQue.isEmpty();
// 	}
// 
// 	@Override
// 	public T next() {
// 		if (!hasNext())
// 			throw new NoSuchElementException(
// 					"No more elements exist to return.");
// 		return intQue.peek().next();
// 	}
// 
// 	@Override
// 	public void remove() {
// 		throw new UnsupportedOperationException();
// 	}
// 
// 	private void loadNextElement() {
// 		while (intQue.isEmpty() || !intQue.peek().hasNext()) {
// 			intQue.poll();
// 			if (itrs.hasNext())
// 				intQue.add(itrs.next());
// 			else
// 				return;
// 		}
// 	}
// 
// }


import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import junit.framework.Assert;
import org.hashtrees.util.FlattenIterator;
import org.junit.Test;
package org.hashtrees.utils.test;




public class FlattenIteratorTest {

	@Test
	public void testFlattenIteratorWithEmptyIterators() {
		List<Iterator<Integer>> emptyIteratorList = Collections.emptyList();
		Iterator<Iterator<Integer>> itrs = emptyIteratorList.iterator();
// Path: src/org/hashtrees/util/FlattenIterator.java
// @NotThreadSafe
// public class FlattenIterator<T> implements Iterator<T> {
// 
// 	private final Iterator<Iterator<T>> itrs;
// 	private final Queue<Iterator<T>> intQue = new ArrayDeque<>(1);
// 
// 	public FlattenIterator(Iterator<Iterator<T>> itrs) {
// 		this.itrs = itrs;
// 	}
// 
// 	@Override
// 	public boolean hasNext() {
// 		loadNextElement();
// 		return !intQue.isEmpty();
// 	}
// 
// 	@Override
// 	public T next() {
// 		if (!hasNext())
// 			throw new NoSuchElementException(
// 					"No more elements exist to return.");
// 		return intQue.peek().next();
// 	}
// 
// 	@Override
// 	public void remove() {
// 		throw new UnsupportedOperationException();
// 	}
// 
// 	private void loadNextElement() {
// 		while (intQue.isEmpty() || !intQue.peek().hasNext()) {
// 			intQue.poll();
// 			if (itrs.hasNext())
// 				intQue.add(itrs.next());
// 			else
// 				return;
// 		}
// 	}
// 
// }


// Path: test/org/hashtrees/utils/test/FlattenIteratorTest.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import junit.framework.Assert;
import org.hashtrees.util.FlattenIterator;
import org.junit.Test;

package org.hashtrees.utils.test;




public class FlattenIteratorTest {

	@Test
	public void testFlattenIteratorWithEmptyIterators() {
		List<Iterator<Integer>> emptyIteratorList = Collections.emptyList();
		Iterator<Iterator<Integer>> itrs = emptyIteratorList.iterator();
		Assert.assertFalse(new FlattenIterator<>(itrs).hasNext());