package com.flextrade.jfixture.builders;
import com.flextrade.jfixture.NoSpecimen;
import org.junit.Before;
import org.junit.Test;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.HashSet;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.number.OrderingComparison.greaterThan;
import static org.hamcrest.number.OrderingComparison.lessThanOrEqualTo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class TestNumberInRangeGenerator {
private NumberInRangeGenerator generator;
@Before
public void initialise() {
this.generator = new NumberInRangeGenerator();
}
@Test
public void non_number_request_returns_no_specimen() {
assertTrue(this.generator.create(String.class, null).equals(new NoSpecimen()));
assertTrue(this.generator.create("string", null).equals(new NoSpecimen()));
}
@Test
public void resolves_bytes() {
Byte result = (Byte)this.generator.create(Byte.class, null);
assertTrue(result > 0 && result < 127);
}
@Test
public void resolves_shorts() {
Short result = (Short)this.generator.create(Short.class, null);
assertTrue(result > 0 && result < 127);
}
@Test
public void resolves_integers() {
Integer result = (Integer)this.generator.create(Integer.class, null);
assertTrue(result > 0 && result < 127);
}
@Test
public void resolves_floats() {
Float result = (Float)this.generator.create(Float.class, null);
assertTrue(result > 0 && result < 127);
}
@Test
public void resolves_doubles() {
Double result = (Double)this.generator.create(Double.class, null);
assertTrue(result > 0 && result < 127);
}
@Test
public void resolves_big_decimals() {
BigDecimal result = (BigDecimal)this.generator.create(BigDecimal.class, null);
assertTrue(result.longValue() > 0 && result.longValue() < 127);
}
@Test
public void resolves_big_integers() {
BigInteger result = (BigInteger)this.generator.create(BigInteger.class, null);
assertTrue(result.longValue() > 0 && result.longValue() < 127);
}
@Test
public void generates_number_in_the_expected_ranges() {
for(int i = 0; i < Byte.MAX_VALUE; i++) {
Long byteLong = (Long)this.generator.create(Long.class, null);
assertThat(byteLong, is(greaterThan((long)0)));
assertThat(byteLong, is(lessThanOrEqualTo((long) Byte.MAX_VALUE)));
}
for(int i = Byte.MAX_VALUE; i < Short.MAX_VALUE; i++) {
Long shortLong = (Long)this.generator.create(Long.class, null);
assertThat(shortLong, is(greaterThan((long)Byte.MAX_VALUE)));
assertThat(shortLong, is(lessThanOrEqualTo((long)Short.MAX_VALUE)));
}
// Can't do it for higher numbers as the test runtime is too high
}
@Test
public void should_create_numbers_in_specified_range() {
int min = 10;
int max = 100;
this.generator = new NumberInRangeGenerator(min, max);
for (int i = 0; i < max - min; i++) {
Integer value = (Integer) this.generator.create(Integer.class, null);
assertTrue(value.toString(), value >= 10);
assertTrue(value.toString(), value <= 100);
}
}
@Test
public void should_not_repeat_values_in_range() {
int min = 10;
int max = 100;
HashSet<Integer> seenValues = new HashSet<Integer>();
this.generator = new NumberInRangeGenerator(min, max);
for (int i = 0; i < max - min; i++) {
Integer value = (Integer) this.generator.create(Integer.class, null);
assertTrue(seenValues.add(value));
}
assertEquals(max - min, seenValues.size());
}
}