package com.annimon.stream.doublestreamtests;
import com.annimon.stream.CustomOperators;
import com.annimon.stream.DoubleStream;
import com.annimon.stream.IntStream;
import com.annimon.stream.function.DoubleBinaryOperator;
import org.junit.Test;
import static com.annimon.stream.test.hamcrest.DoubleStreamMatcher.elements;
import static org.hamcrest.Matchers.arrayContaining;
import static org.hamcrest.Matchers.closeTo;
import static org.junit.Assert.assertThat;
public final class CustomTest {
@Test(expected = NullPointerException.class)
public void testCustom() {
DoubleStream.empty().custom(null);
}
@Test
@SuppressWarnings("unchecked")
public void testCustomIntermediateOperator_Zip() {
final DoubleBinaryOperator op = new DoubleBinaryOperator() {
@Override
public double applyAsDouble(double left, double right) {
return left * right;
}
};
DoubleStream s1 = DoubleStream.of(1.01, 2.02, 3.03);
IntStream s2 = IntStream.range(2, 5);
DoubleStream result = s1.custom(new CustomOperators.ZipWithIntStream(s2, op));
assertThat(result, elements(arrayContaining(
closeTo(2.02, 0.00001),
closeTo(6.06, 0.00001),
closeTo(12.12, 0.00001)
)));
}
@Test
public void testCustomTerminalOperator_DoubleSummaryStatistics() {
double[] result = DoubleStream.of(0.1, 0.02, 0.003).custom(new CustomOperators.DoubleSummaryStatistics());
double count = result[0], sum = result[1], average = result[2];
assertThat(count, closeTo(3, 0.0001));
assertThat(sum, closeTo(0.123, 0.0001));
assertThat(average, closeTo(0.041, 0.0001));
}
}