package com.ldbc.driver.generator;
import com.google.common.collect.Lists;
import com.ldbc.driver.util.Function0;
import org.junit.Before;
import org.junit.Test;
import java.util.Iterator;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
public class InterleaveGeneratorTest
{
GeneratorFactory generators;
@Before
public void initGenerators()
{
generators = new GeneratorFactory( new RandomDataGeneratorFactory( 42L ) );
}
@Test
public void shouldBeExhaustedIfInterleaveGeneratorIsExhaustedFirstWithIntLimit()
{
// Given
Iterator<Long> oneAsLongs = generators.limit( generators.constant( 1L ), 2 );
Iterator<Integer> twoAsIntegers = generators.constant( 2 );
// When
Iterator<Number> interleaved = generators.<Number>interleave( oneAsLongs, twoAsIntegers, 2 );
List<Number> interleavedList = Lists.newArrayList( interleaved );
// Then
assertThat( interleavedList.size(), is( 6 ) );
assertThat( interleavedList.get( 0 ).longValue(), is( 1L ) );
assertThat( interleavedList.get( 1 ).longValue(), is( 2L ) );
assertThat( interleavedList.get( 2 ).longValue(), is( 2L ) );
assertThat( interleavedList.get( 3 ).longValue(), is( 1L ) );
assertThat( interleavedList.get( 4 ).longValue(), is( 2L ) );
assertThat( interleavedList.get( 5 ).longValue(), is( 2L ) );
}
@Test
public void shouldBeExhaustedIfInterleaveGeneratorIsExhaustedFirstWithFunctionLimit()
{
// Given
Iterator<Long> oneAsLongs = generators.limit( generators.constant( 1L ), 2 );
Iterator<Integer> twoAsIntegers = generators.constant( 2 );
Function0<Integer,RuntimeException> amountToInterleaveFun = new Function0<Integer,RuntimeException>()
{
@Override
public Integer apply()
{
return 2;
}
};
// When
Iterator<Number> interleaved =
generators.<Number>interleave( oneAsLongs, twoAsIntegers, amountToInterleaveFun );
List<Number> interleavedList = Lists.newArrayList( interleaved );
// Then
assertThat( interleavedList.size(), is( 6 ) );
assertThat( interleavedList.get( 0 ).longValue(), is( 1L ) );
assertThat( interleavedList.get( 1 ).longValue(), is( 2L ) );
assertThat( interleavedList.get( 2 ).longValue(), is( 2L ) );
assertThat( interleavedList.get( 3 ).longValue(), is( 1L ) );
assertThat( interleavedList.get( 4 ).longValue(), is( 2L ) );
assertThat( interleavedList.get( 5 ).longValue(), is( 2L ) );
}
@Test
public void shouldBeExhaustedIfInterleaveGeneratorIsExhaustedFirst()
{
// Given
Iterator<Long> oneAsLongs = generators.limit( generators.constant( 1L ), 2 );
Iterator<Integer> twoAsIntegers = generators.limit( generators.constant( 2 ), 2 );
// When
Iterator<Number> interleaved = generators.<Number>interleave( oneAsLongs, twoAsIntegers, 2 );
// Then
assertThat( interleaved.hasNext(), is( true ) );
assertThat( interleaved.next().intValue(), is( 1 ) );
assertThat( interleaved.hasNext(), is( true ) );
assertThat( interleaved.next().intValue(), is( 2 ) );
assertThat( interleaved.hasNext(), is( true ) );
assertThat( interleaved.next().intValue(), is( 2 ) );
assertThat( interleaved.hasNext(), is( true ) );
assertThat( interleaved.next().intValue(), is( 1 ) );
assertThat( interleaved.hasNext(), is( false ) );
}
}