package com.ldbc.driver.generator; import com.ldbc.driver.util.NumberHelper; import org.junit.Test; import java.util.Iterator; import java.util.List; import static java.lang.String.format; import static org.junit.Assert.assertEquals; public abstract class NumberGeneratorTest<GENERATE_TYPE extends Number, COUNT extends Number> extends GeneratorTest<GENERATE_TYPE,COUNT> { public abstract double getExpectedMean(); public abstract double getMeanTolerance(); @Test public final void meanTest() { // Given Iterator<GENERATE_TYPE> generator = getGeneratorImpl( getGeneratorFactory() ); Double expectedMean = getExpectedMean(); // When List<GENERATE_TYPE> sequence = generateSequence( generator, getSampleSize() ); Double actualMean = getSequenceMean( sequence ); // Then String assertMessage = format( "Mean values should be within tolerance[%s]\nExpected mean[%s]\n Actual mean[%s]", getMeanTolerance(), expectedMean, actualMean ); assertEquals( assertMessage, true, NumberHelper.withinTolerance( expectedMean, actualMean, getMeanTolerance() ) ); } public final Double getSequenceMean( List<GENERATE_TYPE> sequence ) { int sequenceLength = sequence.size(); double sum = 0d; for ( GENERATE_TYPE number : sequence ) { sum += number.doubleValue(); } return sum / sequenceLength; } }