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.ITranslator2; import java.util.Iterator; import jetbrains.mps.baseLanguage.closures.runtime.YieldingIterator; import java.util.Arrays; import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes; import jetbrains.mps.internal.collections.runtime.StopIteratingException; import junit.framework.Assert; import java.util.Collections; import java.util.List; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import jetbrains.mps.baseLanguage.closures.runtime.Wrappers; import jetbrains.mps.internal.collections.runtime.IVisitor; public class Mapper_Test extends Util_Test { public void test_mapMethod() throws Exception { ISequence<Integer> seq = Sequence.fromIterable(this.input5()); ISequence<Integer> test = seq.translate(new ITranslator2<Integer, Integer>() { public Iterable<Integer> translate(final Integer it1) { return new Iterable<Integer>() { public Iterator<Integer> iterator() { return new YieldingIterator<Integer>() { private int __CP__ = 0; protected boolean moveToNext() { __loop__: do { __switch__: switch (this.__CP__) { case -1: assert false : "Internal error"; return false; case 2: this.__CP__ = 3; this.yield(it1); return true; case 3: this.__CP__ = 1; this.yield(it1 * 2); return true; case 0: this.__CP__ = 2; break; default: break __loop__; } } while (true); return false; } }; } }; } }); Iterable<Integer> expected = Arrays.asList(1, 2, 2, 4, 3, 6, 4, 8, 5, 10); this.assertIterableEquals(expected, test.toIterable()); } public void test_mapperVar() throws Exception { ISequence<Integer> seq = Sequence.fromIterable(this.input5()); _FunctionTypes._return_P1_E0<? extends Iterable<Integer>, ? super Integer> trans = new _FunctionTypes._return_P1_E0<Iterable<Integer>, Integer>() { public Iterable<Integer> invoke(final Integer i) { return new Iterable<Integer>() { public Iterator<Integer> iterator() { return new YieldingIterator<Integer>() { private int __CP__ = 0; protected boolean moveToNext() { __loop__: do { __switch__: switch (this.__CP__) { case -1: assert false : "Internal error"; return false; case 2: this.__CP__ = 3; this.yield(i); return true; case 3: this.__CP__ = 1; this.yield(i * 2); return true; case 0: this.__CP__ = 2; break; default: break __loop__; } } while (true); return false; } }; } }; } }; Iterable<Integer> expected = Arrays.asList(1, 2, 2, 4, 3, 6, 4, 8, 5, 10); this.assertIterableEquals(expected, seq.translate(trans).toIterable()); this.assertIterableEquals(expected, seq.translate(trans).toIterable()); } public void test_mappingOperation() throws Exception { Iterable<Integer> test = Sequence.fromIterable(this.input5()).translate(new ITranslator2<Integer, Integer>() { public Iterable<Integer> translate(final Integer i) { return new Iterable<Integer>() { public Iterator<Integer> iterator() { return new YieldingIterator<Integer>() { private int __CP__ = 0; protected boolean moveToNext() { __loop__: do { __switch__: switch (this.__CP__) { case -1: assert false : "Internal error"; return false; case 2: this.__CP__ = 3; this.yield(i); return true; case 3: this.__CP__ = 1; this.yield(i * 2); return true; case 0: this.__CP__ = 2; break; default: break __loop__; } } while (true); return false; } }; } }; } }); this.assertIterableEquals(Arrays.asList(1, 2, 2, 4, 3, 6, 4, 8, 5, 10), test); } public void test_legacyMapper() throws Exception { Iterable<Integer> test = Sequence.fromIterable(this.input5()).translate(new ITranslator2<Integer, Integer>() { public Iterable<Integer> translate(final Integer it) { return new Iterable<Integer>() { public Iterator<Integer> iterator() { return new YieldingIterator<Integer>() { private int __CP__ = 0; protected boolean moveToNext() { __loop__: do { __switch__: switch (this.__CP__) { case -1: assert false : "Internal error"; return false; case 2: this.__CP__ = 3; this.yield(it); return true; case 3: this.__CP__ = 1; this.yield(it * 2); return true; case 0: this.__CP__ = 2; break; default: break __loop__; } } while (true); return false; } }; } }; } }); this.assertIterableEquals(Arrays.asList(1, 2, 2, 4, 3, 6, 4, 8, 5, 10), test); } public void test_stopSkip() throws Exception { Iterable<Integer> test = Sequence.fromIterable(this.input10()).translate(new ITranslator2<Integer, Integer>() { public Iterable<Integer> translate(final Integer it) { return new Iterable<Integer>() { public Iterator<Integer> iterator() { return new YieldingIterator<Integer>() { private int __CP__ = 0; protected boolean moveToNext() { __loop__: do { __switch__: switch (this.__CP__) { case -1: assert false : "Internal error"; return false; case 4: if (it % 2 == 1) { this.__CP__ = 5; break; } this.__CP__ = 6; break; case 8: if (it > 5) { this.__CP__ = 9; break; } this.__CP__ = 3; break; case 3: if (false) { this.__CP__ = 2; break; } this.__CP__ = 1; break; case 6: this.__CP__ = 8; this.yield(it); return true; case 0: this.__CP__ = 2; break; case 2: this.__CP__ = 4; break; case 5: this.__CP__ = 1; break; case 9: throw new StopIteratingException(); default: break __loop__; } } while (true); return false; } }; } }; } }); this.assertIterableEquals(Arrays.asList(2, 4, 6), test); Iterable<Integer> test2 = Sequence.fromIterable(this.input10()).translate(new ITranslator2<Integer, Integer>() { public Iterable<Integer> translate(final Integer it) { return new Iterable<Integer>() { public Iterator<Integer> iterator() { return new YieldingIterator<Integer>() { private int __CP__ = 0; protected boolean moveToNext() { __loop__: do { __switch__: switch (this.__CP__) { case -1: assert false : "Internal error"; return false; case 4: if (it % 2 == 1) { this.__CP__ = 5; break; } this.__CP__ = 6; break; case 8: if (it > 5) { this.__CP__ = 9; break; } this.__CP__ = 3; break; case 3: if (false) { this.__CP__ = 2; break; } this.__CP__ = 1; break; case 6: this.__CP__ = 8; this.yield(it); return true; case 0: this.__CP__ = 2; break; case 2: this.__CP__ = 4; break; case 5: this.__CP__ = 1; break; case 9: throw new StopIteratingException(); default: break __loop__; } } while (true); return false; } }; } }; } }); this.assertIterableEquals(Arrays.asList(2, 4, 6), test2); } public void test_stopBug() throws Exception { Iterable<Integer> test = Sequence.fromIterable(this.input5()).translate(new ITranslator2<Integer, Integer>() { public Iterable<Integer> translate(final Integer it) { return new Iterable<Integer>() { public Iterator<Integer> iterator() { return new YieldingIterator<Integer>() { private int __CP__ = 0; protected boolean moveToNext() { __loop__: do { __switch__: switch (this.__CP__) { case -1: assert false : "Internal error"; return false; case 4: if (it == 5) { this.__CP__ = 5; break; } this.__CP__ = 3; break; case 3: if (false) { this.__CP__ = 2; break; } this.__CP__ = 1; break; case 6: this.__CP__ = 7; this.yield(5); return true; case 0: this.__CP__ = 2; break; case 2: this.__CP__ = 4; break; case 5: this.__CP__ = 6; break; case 7: throw new StopIteratingException(); default: break __loop__; } } while (true); return false; } }; } }; } }); this.assertIterableEquals(Arrays.asList(5), test); Iterable<Integer> test2 = Sequence.fromIterable(this.input5()).translate(new ITranslator2<Integer, Integer>() { public Iterable<Integer> translate(final Integer it) { return new Iterable<Integer>() { public Iterator<Integer> iterator() { return new YieldingIterator<Integer>() { private int __CP__ = 0; protected boolean moveToNext() { __loop__: do { __switch__: switch (this.__CP__) { case -1: assert false : "Internal error"; return false; case 4: if (false) { this.__CP__ = 5; break; } this.__CP__ = 6; break; case 3: if (false) { this.__CP__ = 2; break; } this.__CP__ = 1; break; case 7: this.__CP__ = 6; this.yield(999); return true; case 0: this.__CP__ = 2; break; case 2: this.__CP__ = 4; break; case 6: throw new StopIteratingException(); case 5: this.__CP__ = 7; break; default: break __loop__; } } while (true); return false; } }; } }; } }); Assert.assertTrue(Sequence.fromIterable(test2).isEmpty()); Iterable<Integer> test3 = Sequence.fromIterable(this.input5()).translate(new ITranslator2<Integer, Integer>() { public Iterable<Integer> translate(final Integer it) { return new Iterable<Integer>() { public Iterator<Integer> iterator() { return new YieldingIterator<Integer>() { private int __CP__ = 0; protected boolean moveToNext() { __loop__: do { __switch__: switch (this.__CP__) { case -1: assert false : "Internal error"; return false; case 4: if (it == 5) { this.__CP__ = 5; break; } this.__CP__ = 3; break; case 3: if (false) { this.__CP__ = 2; break; } this.__CP__ = 1; break; case 6: this.__CP__ = 7; this.yield(5); return true; case 0: this.__CP__ = 2; break; case 2: this.__CP__ = 4; break; case 5: this.__CP__ = 6; break; case 7: throw new StopIteratingException(); default: break __loop__; } } while (true); return false; } }; } }; } }); this.assertIterableEquals(Arrays.asList(5), test3); Iterable<Integer> test4 = Sequence.fromIterable(this.input5()).translate(new ITranslator2<Integer, Integer>() { public Iterable<Integer> translate(final Integer it) { return new Iterable<Integer>() { public Iterator<Integer> iterator() { return new YieldingIterator<Integer>() { private int __CP__ = 0; protected boolean moveToNext() { __loop__: do { __switch__: switch (this.__CP__) { case -1: assert false : "Internal error"; return false; case 4: if (false) { this.__CP__ = 5; break; } this.__CP__ = 6; break; case 3: if (false) { this.__CP__ = 2; break; } this.__CP__ = 1; break; case 7: this.__CP__ = 6; this.yield(999); return true; case 0: this.__CP__ = 2; break; case 2: this.__CP__ = 4; break; case 6: throw new StopIteratingException(); case 5: this.__CP__ = 7; break; default: break __loop__; } } while (true); return false; } }; } }; } }); Assert.assertTrue(Sequence.fromIterable(test4).isEmpty()); } public void test_selectMany() throws Exception { // only testing compileability of the generated code Iterable<B> bs = Sequence.fromIterable(Collections.<B>emptyList()); Sequence.fromIterable(bs).translate(new ITranslator2<B, A>() { public Iterable<A> translate(B it) { return it.as; } }); _FunctionTypes._return_P1_E0<? extends List<A>, ? super B> cl = new _FunctionTypes._return_P1_E0<List<A>, B>() { public List<A> invoke(B it) { return it.as; } }; Sequence.fromIterable(bs).translate(cl); Sequence.fromIterable(bs).translate(new ITranslator2<B, A>() { public Iterable<A> translate(B it) { return it.listofa; } }); _FunctionTypes._return_P1_E0<? extends List<A>, ? super B> cl2 = new _FunctionTypes._return_P1_E0<List<A>, B>() { public List<A> invoke(B it) { return it.listofa; } }; Sequence.fromIterable(bs).translate(cl2); Sequence.fromIterable(bs).translate(new ITranslator2<B, A>() { public Iterable<A> translate(B it) { return it.seqofa; } }); _FunctionTypes._return_P1_E0<? extends Iterable<A>, ? super B> cl3 = new _FunctionTypes._return_P1_E0<Iterable<A>, B>() { public Iterable<A> invoke(B it) { return it.seqofa; } }; Sequence.fromIterable(bs).translate(cl3); Sequence.fromIterable(bs).translate(new ITranslator2<B, A>() { public Iterable<A> translate(B it) { return it.iterableofa; } }); _FunctionTypes._return_P1_E0<? extends Iterable<A>, ? super B> cl4 = new _FunctionTypes._return_P1_E0<Iterable<A>, B>() { public Iterable<A> invoke(B it) { return it.iterableofa; } }; Sequence.fromIterable(bs).translate(cl4); } public void test_nextWithoutHasNext() throws Exception { this.assertIteratorYields(ListSequence.fromList(ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 3)).translate(new ITranslator2<Integer, Integer>() { public Iterable<Integer> translate(final Integer i) { return new Iterable<Integer>() { public Iterator<Integer> iterator() { return new YieldingIterator<Integer>() { private int __CP__ = 0; protected boolean moveToNext() { __loop__: do { __switch__: switch (this.__CP__) { case -1: assert false : "Internal error"; return false; case 2: this.__CP__ = 3; this.yield(i); return true; case 3: this.__CP__ = 1; this.yield(i + 1); return true; case 0: this.__CP__ = 2; break; default: break __loop__; } } while (true); return false; } }; } }; } }).iterator(), 1, 2, 3, 4); } public void test_selectManyAdvancesTooEarly() throws Exception { final List<Integer> test = ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3, 4, 5, 6, 7, 8, 9); final List<Integer> plusten = ListSequence.fromList(new ArrayList<Integer>()); final Wrappers._int idx = new Wrappers._int(0); ListSequence.fromList(test).translate(new ITranslator2<Integer, Integer>() { public Iterable<Integer> translate(final Integer i) { return new Iterable<Integer>() { public Iterator<Integer> iterator() { return new YieldingIterator<Integer>() { private int __CP__ = 0; protected boolean moveToNext() { __loop__: do { __switch__: switch (this.__CP__) { case -1: assert false : "Internal error"; return false; case 2: this.__CP__ = 1; this.yield(i); return true; case 0: this.__CP__ = 2; break; default: break __loop__; } } while (true); return false; } }; } }; } }).visitAll(new IVisitor<Integer>() { public void visit(Integer i) { if (++idx.value < ListSequence.fromList(test).count()) { ListSequence.fromList(test).setElement(idx.value, ListSequence.fromList(test).getElement(idx.value) - idx.value); } ListSequence.fromList(plusten).addElement(i + 10); } }); Assert.assertEquals(ListSequence.fromListAndArray(new ArrayList<Integer>(), 11, 11, 11, 11, 11, 11, 11, 11, 11), plusten); } }