package com.annimon.stream.streamtests;
import com.annimon.stream.Functions;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import com.annimon.stream.function.BiFunction;
import org.junit.Test;
import static com.annimon.stream.test.hamcrest.OptionalMatcher.isEmpty;
import static com.annimon.stream.test.hamcrest.OptionalMatcher.isPresent;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
public final class ReduceTest {
@Test
public void testReduceSumFromZero() {
int result = Stream.range(0, 10)
.reduce(0, Functions.addition());
assertEquals(45, result);
}
@Test
public void testReduceSumFromMinus45() {
int result = Stream.range(0, 10)
.reduce(-45, Functions.addition());
assertEquals(0, result);
}
@Test
public void testReduceWithAnotherType() {
int result = Stream.of("a", "bb", "ccc", "dddd")
.reduce(0, new BiFunction<Integer, String, Integer>() {
@Override
public Integer apply(Integer length, String s) {
return length + s.length();
}
});
assertEquals(10, result);
}
@Test
public void testReduceOptional() {
Optional<Integer> result = Stream.range(0, 10)
.reduce(Functions.addition());
assertThat(result, isPresent());
assertNotNull(result.get());
assertEquals(45, (int) result.get());
}
@Test
public void testReduceOptionalOnEmptyStream() {
Optional<Integer> result = Stream.<Integer>empty()
.reduce(Functions.addition());
assertThat(result, isEmpty());
assertEquals(119, (int) result.orElse(119));
}
}