// Path: src/main/java/br/com/six2six/fixturefactory/function/impl/UniqueRandomFunction.java
// public class UniqueRandomFunction implements AtomicFunction{
// 
// 	private Object[] dataset;
// 	
// 	private int nextValueIndex = 0;
// 	
// 	public UniqueRandomFunction(int minValue, int maxValue) {
// 		if(minValue >= maxValue) {
// 			throw new IllegalArgumentException("maxValue cannot be greater than minValue.");
// 		}
// 		this.dataset = this.initIntegerDataset(minValue, maxValue);
// 		this.shuffleDataset();
// 	}
// 	
// 	public UniqueRandomFunction(Object[] dataset) {
// 		if(dataset.length == 0) {
// 			throw new IllegalArgumentException("provided dataset has no elements.");
// 		}
// 		this.dataset = dataset;
// 		this.shuffleDataset();
// 	}
// 	
// 	public UniqueRandomFunction(Class<? extends Enum<?>> clazz) {
// 		if(clazz.getEnumConstants().length == 0) {
// 			throw new IllegalArgumentException("Enum has no values.");
// 		}
// 		this.dataset = clazz.getEnumConstants();
// 		this.shuffleDataset();
// 	}
// 	
// 	private Object[] initIntegerDataset(int minValue, int maxValue) {
// 		Integer[] dataset = new Integer[maxValue - minValue + 1];
// 		int currValue = minValue;
// 		for(int i = 0; i < dataset.length; i++) {
// 			dataset[i] = currValue;
// 			currValue ++;
// 		}
// 		
// 		return dataset;
// 	}
// 	
// 	private void shuffleDataset() {
// 		Random random = new Random();
// 		for(int shufflePosition = 0, iterator = dataset.length - 1; iterator > 0; iterator--) {
// 			shufflePosition = random.nextInt(iterator);
// 			Object temp = dataset[iterator];
// 			dataset[iterator] = dataset[shufflePosition];
// 			dataset[shufflePosition] = temp;
// 		}
// 	}
// 	
// 	@Override
// 	@SuppressWarnings("unchecked")
// 	public <T> T generateValue() {
// 		
// 		if(this.nextValueIndex >= this.dataset.length) {
// 			this.nextValueIndex = 0; 
// 		}
// 		
// 		Object nextValue = this.dataset[this.nextValueIndex];
// 		this.nextValueIndex ++;
// 		return (T)nextValue;
// 		
// 	}
// }


import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.junit.Test;
import br.com.six2six.fixturefactory.function.impl.UniqueRandomFunction;
package br.com.six2six.fixturefactory.function;





public class UniqueRandomFunctionTest {

	private enum EnumMock {
		A,
		B,
		C,
		D,
		E,
		F,
		G,
		H,
		I,
		J
	}
	
	@Test
	public void shouldGenerate1000UniqueIntegers() {
		Set<Integer> integers = new HashSet<Integer>();
		for(int i = 0; i <= 1000; i++) {
			integers.add(i);
		}
// Path: src/main/java/br/com/six2six/fixturefactory/function/impl/UniqueRandomFunction.java
// public class UniqueRandomFunction implements AtomicFunction{
// 
// 	private Object[] dataset;
// 	
// 	private int nextValueIndex = 0;
// 	
// 	public UniqueRandomFunction(int minValue, int maxValue) {
// 		if(minValue >= maxValue) {
// 			throw new IllegalArgumentException("maxValue cannot be greater than minValue.");
// 		}
// 		this.dataset = this.initIntegerDataset(minValue, maxValue);
// 		this.shuffleDataset();
// 	}
// 	
// 	public UniqueRandomFunction(Object[] dataset) {
// 		if(dataset.length == 0) {
// 			throw new IllegalArgumentException("provided dataset has no elements.");
// 		}
// 		this.dataset = dataset;
// 		this.shuffleDataset();
// 	}
// 	
// 	public UniqueRandomFunction(Class<? extends Enum<?>> clazz) {
// 		if(clazz.getEnumConstants().length == 0) {
// 			throw new IllegalArgumentException("Enum has no values.");
// 		}
// 		this.dataset = clazz.getEnumConstants();
// 		this.shuffleDataset();
// 	}
// 	
// 	private Object[] initIntegerDataset(int minValue, int maxValue) {
// 		Integer[] dataset = new Integer[maxValue - minValue + 1];
// 		int currValue = minValue;
// 		for(int i = 0; i < dataset.length; i++) {
// 			dataset[i] = currValue;
// 			currValue ++;
// 		}
// 		
// 		return dataset;
// 	}
// 	
// 	private void shuffleDataset() {
// 		Random random = new Random();
// 		for(int shufflePosition = 0, iterator = dataset.length - 1; iterator > 0; iterator--) {
// 			shufflePosition = random.nextInt(iterator);
// 			Object temp = dataset[iterator];
// 			dataset[iterator] = dataset[shufflePosition];
// 			dataset[shufflePosition] = temp;
// 		}
// 	}
// 	
// 	@Override
// 	@SuppressWarnings("unchecked")
// 	public <T> T generateValue() {
// 		
// 		if(this.nextValueIndex >= this.dataset.length) {
// 			this.nextValueIndex = 0; 
// 		}
// 		
// 		Object nextValue = this.dataset[this.nextValueIndex];
// 		this.nextValueIndex ++;
// 		return (T)nextValue;
// 		
// 	}
// }


// Path: src/test/java/br/com/six2six/fixturefactory/function/UniqueRandomFunctionTest.java
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.junit.Test;
import br.com.six2six.fixturefactory.function.impl.UniqueRandomFunction;

package br.com.six2six.fixturefactory.function;





public class UniqueRandomFunctionTest {

	private enum EnumMock {
		A,
		B,
		C,
		D,
		E,
		F,
		G,
		H,
		I,
		J
	}
	
	@Test
	public void shouldGenerate1000UniqueIntegers() {
		Set<Integer> integers = new HashSet<Integer>();
		for(int i = 0; i <= 1000; i++) {
			integers.add(i);
		}
		UniqueRandomFunction function = new UniqueRandomFunction(0, 1000);