package rabbitescape.engine.util;
import static rabbitescape.engine.Tools.*;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.*;
import static org.junit.Assert.fail;
import org.junit.Test;
public class TestVariantGenerator
{
@Test
public void Generates_integer_variant()
{
VariantGenerator gen = new VariantGenerator( 0 );
int ans = gen.next( 4 );
assertThat( ans, greaterThan( -1 ) );
}
@Test
public void Answers_are_between_zero_and_max()
{
VariantGenerator gen = new VariantGenerator( 0 );
for ( int i = 0; i < 200; ++i )
{
int ans = gen.next( 6 );
assertThat( ans, greaterThan( -1 ) );
assertThat( ans, lessThan( 6 ) );
}
}
@Test
public void Answers_cover_all_in_range()
{
// Array to store what answers got hit
boolean[] hits = new boolean[10];
for ( int i = 0; i < hits.length; ++i )
{
hits[i] = false;
}
VariantGenerator gen = new VariantGenerator( 0 );
// Generate lots and capture which answers were hit
for ( int i = 0; i < 20000; ++i )
{
int ans = gen.next( hits.length );
hits[ans] = true;
}
// All were hit
for ( int i = 0; i < hits.length; ++i )
{
assertThat( hits[i], is( true ) );
}
}
@Test
public void Seed_varies_answers()
{
VariantGenerator gen0 = new VariantGenerator( 0 );
VariantGenerator gen1 = new VariantGenerator( 1 );
for ( int i = 0; i < 200; ++i )
{
int ans0 = gen0.next( 5 );
int ans1 = gen1.next( 5 );
if ( ans0 != ans1 )
{
return;
}
}
fail( "All 200 answers were the same, for different seeds!" );
}
}