package com.annimon.stream.longstreamtests;
import com.annimon.stream.LongStream;
import com.annimon.stream.function.LongBinaryOperator;
import org.junit.Test;
import static com.annimon.stream.test.hamcrest.LongStreamMatcher.assertElements;
import static com.annimon.stream.test.hamcrest.LongStreamMatcher.assertIsEmpty;
import static org.hamcrest.Matchers.arrayContaining;
public final class ScanTest {
@Test
public void testScan() {
LongStream.of(1, 2, 3)
.scan(new LongBinaryOperator() {
@Override
public long applyAsLong(long left, long right) {
return left + right;
}
})
.custom(assertElements(arrayContaining(
1L, 3L, 6L
)));
}
@Test
public void testScanNonAssociative() {
LongStream.of(1800L, 2, 3, 5)
.scan(new LongBinaryOperator() {
@Override
public long applyAsLong(long value1, long value2) {
return value1 / value2;
}
})
.custom(assertElements(arrayContaining(
1800L,
1800L / 2,
1800L / 2 / 3,
1800L / 2 / 3 / 5
)));
}
@Test
public void testScanOnEmptyStream() {
LongStream.empty()
.scan(new LongBinaryOperator() {
@Override
public long applyAsLong(long left, long right) {
return left + right;
}
})
.custom(assertIsEmpty());
}
@Test
public void testScanWithIdentity() {
LongStream.of(1, 2, 3)
.scan(0, new LongBinaryOperator() {
@Override
public long applyAsLong(long left, long right) {
return left + right;
}
})
.custom(assertElements(arrayContaining(
0L, 1L, 3L, 6L
)));
}
@Test
public void testScanWithIdentityNonAssociative() {
LongStream.of(2, 3, 5)
.scan(1800L, new LongBinaryOperator() {
@Override
public long applyAsLong(long value1, long value2) {
return value1 / value2;
}
})
.custom(assertElements(arrayContaining(
1800L,
1800L / 2,
1800L / 2 / 3,
1800L / 2 / 3 / 5
)));
}
@Test
public void testScanWithIdentityOnEmptyStream() {
LongStream.empty()
.scan(9, new LongBinaryOperator() {
@Override
public long applyAsLong(long left, long right) {
return left + right;
}
})
.custom(assertElements(arrayContaining(
9L
)));
}
}