package br.com.six2six.fixturefactory.function;
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;
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);
for(int i = 0; i <= 1000; i++) {
Object value = function.generateValue();
integers.remove((Integer) value);
}
assertTrue("Not all generated integers were unique", integers.isEmpty());
}
@Test
public void shouldGenerate10UniqueCountries() {
String[] countriesArray = new String[]{
"Brazil",
"Argentina",
"Chile",
"Uruguay",
"Germany",
"Colombia",
"Australia",
"Canada",
"United States",
"France"};
Set<String> countriesSet = new HashSet<String>(Arrays.asList(countriesArray));
UniqueRandomFunction function = new UniqueRandomFunction(countriesArray);
for(int i = 0; i < 10; i++) {
Object value = function.generateValue();
countriesSet.remove((String) value);
}
assertTrue("Not all generated values were unique.", countriesSet.isEmpty());
}
@Test
public void shouldGenerateUniqueEnumValues() {
UniqueRandomFunction function = new UniqueRandomFunction(EnumMock.class);
EnumMock[] enumMockConstants = EnumMock.class.getEnumConstants();
Set<EnumMock> enumValuesSet = new HashSet<EnumMock>(Arrays.asList(enumMockConstants));
for(int i = 0; i < enumMockConstants.length; i++) {
EnumMock enumMock = function.generateValue();
enumValuesSet.remove(enumMock);
}
assertTrue("Not all generated enum values were unique.", enumValuesSet.isEmpty());
}
@Test
public void shouldCycleValuesWhenNoMoreIntegerValuesExist() {
UniqueRandomFunction function = new UniqueRandomFunction(0, 9);
Integer firstResult = function.generateValue();
for(int i = 0; i < 9; i++) {
function.generateValue();
}
Integer lastResult = function.generateValue();
assertTrue(firstResult.equals(lastResult));
}
@Test
public void shouldCycleValuesWhenNoMoreFixedValuesExist() {
UniqueRandomFunction function = new UniqueRandomFunction(new String[]{
"Brazil",
"Argentina",
"Chile",
"Uruguay",
"Germany",
"Colombia",
"Australia",
"Canada",
"United States",
"France"});
String firstResult = function.generateValue();
for(int i = 0; i < 9; i++) {
function.generateValue();
}
String lastResult = function.generateValue();
assertTrue(firstResult.equals(lastResult));
}
@Test
public void shouldCycleValuesWhenNoMoreEnumValuesExist() {
UniqueRandomFunction function = new UniqueRandomFunction(EnumMock.class);
EnumMock firstResult = function.generateValue();
for(int i = 0; i < 9; i++) {
function.generateValue();
}
EnumMock lastResult = function.generateValue();
assertTrue(firstResult.equals(lastResult));
}
}