package ngenes2.individual.generator.integer;
import java.util.List;
import java.util.Random;
import ngenes2.util.Properties;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
public class RandomIntegerGeneratorTest {
private final int size = 100;
@Test
public void testGenerate() {
Random rng = mock(Random.class);
when( rng.nextInt(anyInt()) ).thenReturn(3);
Properties props = mock(Properties.class);
when( props.getInt("chromosome_size")).thenReturn(size);
RandomIntegerGenerator gen = new RandomIntegerGenerator(rng, props);
List<Integer> lst = gen.generate();
assertEquals(size, lst.size());
verify( rng, times(size) ).nextInt(anyInt());
}
@Test
public void testGenerateConstrained() {
Random rng = mock(Random.class);
final int min = -3;
final int max = 100;
when( rng.nextInt(max-min) ).thenReturn((min+max)/2);
Properties props = mock(Properties.class);
when( props.getInt("chromosome_size")).thenReturn(size);
when( props.getInt("min_gene_value")).thenReturn(min);
when( props.getInt("max_gene_value")).thenReturn(max);
when( props.contains(anyString())).thenReturn(Boolean.TRUE);
RandomIntegerGenerator gen = new RandomIntegerGenerator(rng, props);
List<Integer> lst = gen.generate();
assertEquals(size, lst.size());
verify( rng, times(size) ).nextInt(max-min);
}
}