package jetbrains.mps.internalCollections.test.closures;
/*Generated by MPS */
import jetbrains.mps.internal.collections.runtime.ISequence;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.internal.collections.runtime.IWhereFilter;
import java.util.Arrays;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import java.util.Iterator;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import junit.framework.Assert;
import java.util.NoSuchElementException;
import java.util.List;
import jetbrains.mps.internal.collections.runtime.IVisitor;
public class Where_Test extends Util_Test {
public void test_whereMethod() throws Exception {
ISequence<Integer> seq = Sequence.fromIterable(this.input5());
ISequence<Integer> test = seq.where(new IWhereFilter<Integer>() {
public boolean accept(Integer it) {
return it % 2 == 1;
}
});
this.assertIterableEquals(this.expectOdd5(), test.toIterable());
}
public void test_whereFilterVar() throws Exception {
ISequence<Integer> seq = Sequence.fromIterable(this.input5());
IWhereFilter<Integer> filter = new IWhereFilter<Integer>() {
public boolean accept(Integer it) {
return it % 2 == 1;
}
};
ISequence<Integer> test = seq.where(filter);
this.assertIterableEquals(this.expectOdd5(), test.toIterable());
}
public void test_whereOperation() throws Exception {
Iterable<Integer> seq = this.input5();
Iterable<Integer> expected = Arrays.asList(1, 3, 5);
this.assertIterableEquals(expected, Sequence.fromIterable(seq).where(new IWhereFilter<Integer>() {
public boolean accept(Integer it) {
return it % 2 == 1;
}
}));
_FunctionTypes._return_P1_E0<? extends Boolean, ? super Integer> cl = new _FunctionTypes._return_P1_E0<Boolean, Integer>() {
public Boolean invoke(Integer it) {
return it % 2 == 1;
}
};
this.assertIterableEquals(expected, Sequence.fromIterable(seq).where(cl));
}
public void test_nextWithoutHasNext() throws Exception {
Iterator<Integer> it = ListSequence.fromList(ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3, 4, 5, 6)).where(new IWhereFilter<Integer>() {
public boolean accept(Integer i) {
return i % 2 == 0;
}
}).iterator();
Assert.assertSame(2, it.next());
Assert.assertSame(4, it.next());
Assert.assertSame(6, it.next());
Assert.assertFalse(it.hasNext());
try {
it.next();
Assert.fail();
} catch (NoSuchElementException e) {
// expected exception
}
}
public void test_whereAdvancesTooEarly() throws Exception {
final List<Integer> test = ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3, 4, 5, 6, 7, 8, 9);
final List<Integer> odd = ListSequence.fromList(new ArrayList<Integer>());
ListSequence.fromList(test).where(new IWhereFilter<Integer>() {
public boolean accept(Integer i) {
return i != 0;
}
}).visitAll(new IVisitor<Integer>() {
public void visit(Integer i) {
int idx = ListSequence.fromList(test).indexOf(i);
if (++idx < ListSequence.fromList(test).count()) {
ListSequence.fromList(test).setElement(idx, 0);
}
ListSequence.fromList(odd).addElement(i);
}
});
Assert.assertEquals(ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 3, 5, 7, 9), odd);
}
}