package com.annimon.stream.longstreamtests;
import com.annimon.stream.LongStream;
import com.annimon.stream.function.LongFunction;
import com.annimon.stream.function.LongPredicate;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
public class OnCloseTest {
@Test
public void testOnClose() {
final boolean[] state = new boolean[] { false };
LongStream stream = LongStream.of(0, 1, 2)
.onClose(new Runnable() {
@Override
public void run() {
state[0] = true;
}
});
stream.findFirst();
stream.close();
assertTrue(state[0]);
}
@Test
public void testOnCloseWithOtherOperators() {
final boolean[] state = new boolean[] { false };
LongStream stream = LongStream.of(0, 1, 2, 2, 3, 4, 4, 5)
.filter(new LongPredicate() {
@Override
public boolean test(long value) {
return value < 4;
}
})
.onClose(new Runnable() {
@Override
public void run() {
state[0] = true;
}
})
.distinct()
.limit(2);
stream.findFirst();
stream.close();
assertTrue(state[0]);
}
@Test
public void testOnCloseFlatMap() {
final int[] counter = new int[] { 0 };
final Runnable runnable = new Runnable() {
@Override
public void run() {
counter[0]++;
}
};
LongStream stream = LongStream.rangeClosed(2, 4)
.onClose(runnable)
.onClose(runnable)
.flatMap(new LongFunction<LongStream>() {
@Override
public LongStream apply(final long i) {
return LongStream.rangeClosed(2, 4)
.onClose(runnable);
}
});
stream.count();
assertThat(counter[0], is(3));
stream.close();
assertThat(counter[0], is(5));
}
@Test
public void testOnCloseConcat() {
final int[] counter = new int[] { 0 };
final Runnable runnable = new Runnable() {
@Override
public void run() {
counter[0]++;
}
};
LongStream stream1 = LongStream.range(0, 2).onClose(runnable);
LongStream stream2 = LongStream.range(0, 2).onClose(runnable);
LongStream stream = LongStream.concat(stream1, stream2)
.onClose(runnable);
stream.count();
assertThat(counter[0], is(0));
stream.close();
assertThat(counter[0], is(3));
}
}