package jetbrains.mps.baseLanguage.collections.unittest.query_operations; /*Generated by MPS */ import junit.framework.TestCase; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.internal.collections.runtime.ISequenceClosure; import java.util.Iterator; import jetbrains.mps.baseLanguage.closures.runtime.YieldingIterator; import jetbrains.mps.baseLanguage.closures.runtime.Wrappers; import jetbrains.mps.internal.collections.runtime.ITranslator2; import jetbrains.mps.internal.collections.runtime.StopIteratingException; import junit.framework.Assert; import java.util.List; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; public class Mapping_Test1_Test extends TestCase { public void test__1() throws Exception { Iterable<Integer> nums = Sequence.fromClosure(new ISequenceClosure<Integer>() { public Iterable<Integer> iterable() { 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 (true) { this.__CP__ = 5; break; } this.__CP__ = 1; break; case 6: this.__CP__ = 7; this.yield(_3_num); return true; case 0: this._3_num = 0; this.__CP__ = 4; break; case 5: this.__CP__ = 6; break; case 7: _3_num++; this.__CP__ = 4; break; default: break __loop__; } } while (true); return false; } private int _3_num; }; } }; } }); // from infinite sequence take first 10 numbers, // ignore odd numbers, // map each even number to two strings: // "num:<n>" // "num:<n*100>" final Wrappers._int count = new Wrappers._int(0); Iterable<String> strings = Sequence.fromIterable(nums).translate(new ITranslator2<Integer, String>() { public Iterable<String> translate(final Integer n) { return new Iterable<String>() { public Iterator<String> iterator() { return new YieldingIterator<String>() { private int __CP__ = 0; protected boolean moveToNext() { __loop__: do { __switch__: switch (this.__CP__) { case -1: assert false : "Internal error"; return false; case 4: if (n >= 10) { this.__CP__ = 5; break; } this.__CP__ = 6; break; case 6: if (n % 2 != 0) { this.__CP__ = 9; break; } this.__CP__ = 10; break; case 3: if (false) { this.__CP__ = 2; break; } this.__CP__ = 1; break; case 8: this.__CP__ = 6; this.yield("this never yielded"); return true; case 10: this.__CP__ = 12; this.yield("num:" + n); return true; case 12: this.__CP__ = 13; this.yield("num:" + (n * 100)); return true; case 0: this.__CP__ = 2; break; case 2: this.__CP__ = 4; break; case 13: count.value++; this.__CP__ = 3; break; case 5: throw new StopIteratingException(); case 9: this.__CP__ = 1; break; default: break __loop__; } } while (true); return false; } }; } }; } }); Assert.assertEquals(0, count.value); int resultCount = 0; for (String s : strings) { String expected = "num:" + resultCount; if (resultCount % 2 != 0) { expected = "num:" + ((resultCount - 1) * 100); } Assert.assertEquals(expected, s); resultCount++; } Assert.assertEquals(5, count.value); } public void test__yieldNull() throws Exception { if (Sequence.IGNORE_NULL_VALUES) { List<String> strings = ListSequence.fromListAndArray(new ArrayList<String>(), "a"); List<String> strings2 = ListSequence.fromList(strings).translate(new ITranslator2<String, String>() { public Iterable<String> translate(final String it) { return new Iterable<String>() { public Iterator<String> iterator() { return new YieldingIterator<String>() { 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((String) null); return true; case 0: this.__CP__ = 2; break; default: break __loop__; } } while (true); return false; } }; } }; } }).toListSequence(); Assert.assertEquals(0, ListSequence.fromList(strings2).count()); } else { List<String> strings = ListSequence.fromListAndArray(new ArrayList<String>(), "a"); List<String> strings2 = ListSequence.fromList(strings).translate(new ITranslator2<String, String>() { public Iterable<String> translate(final String it) { return new Iterable<String>() { public Iterator<String> iterator() { return new YieldingIterator<String>() { 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((String) null); return true; case 0: this.__CP__ = 2; break; default: break __loop__; } } while (true); return false; } }; } }; } }).toListSequence(); Assert.assertEquals(1, ListSequence.fromList(strings2).count()); Assert.assertNull(ListSequence.fromList(strings2).first()); Assert.assertNull(ListSequence.fromList(strings2).last()); } } public void test__null() throws Exception { List<String> s1 = null; Iterable<String> s2 = ListSequence.fromList(s1).translate(new ITranslator2<String, String>() { public Iterable<String> translate(final String it) { return new Iterable<String>() { public Iterator<String> iterator() { return new YieldingIterator<String>() { 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(it.substring(10)); return true; case 0: this.__CP__ = 2; break; default: break __loop__; } } while (true); return false; } }; } }; } }); Assert.assertEquals(0, Sequence.fromIterable(s2).count()); } public Mapping_Test1_Test() { } }