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); } }