package jetbrains.mps.closures.test;
/*Generated by MPS */
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import java.util.List;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.Iterator;
import jetbrains.mps.baseLanguage.closures.runtime.YieldingIterator;
import java.util.Arrays;
import java.util.ArrayList;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.internal.collections.runtime.IListSequence;
import jetbrains.mps.internal.collections.runtime.ISequence;
import jetbrains.mps.internal.collections.runtime.ISelector;
import junit.framework.Assert;
import jetbrains.mps.internal.collections.runtime.ISequenceClosure;
import jetbrains.mps.internal.collections.runtime.IterableUtils;
import java.util.NoSuchElementException;
import jetbrains.mps.baseLanguage.closures.runtime.DelayedException;
public class YieldClosures_Test extends ClosuresBase_Test {
public void test_ifStatement() throws Exception {
this.assertResultsEqual(new _FunctionTypes._void_P1_E0<List<Integer>>() {
public void invoke(List<Integer> exp) {
ListSequence.fromList(exp).addElement(1);
if (true) {
ListSequence.fromList(exp).addElement(2);
}
if (0 == 1) {
ListSequence.fromList(exp).addElement(3);
} else {
ListSequence.fromList(exp).addElement(4);
}
ListSequence.fromList(exp).addElement(5);
if (0 == 1) {
ListSequence.fromList(exp).addElement(6);
}
}
}, new _FunctionTypes._return_P0_E0<Iterable<Integer>>() {
public Iterable<Integer> invoke() {
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 3:
if (0 == 0) {
this.__CP__ = 4;
break;
}
this.__CP__ = 5;
break;
case 5:
if (0 == 1) {
this.__CP__ = 7;
break;
}
this.__CP__ = 10;
break;
case 12:
if (0 == 1) {
this.__CP__ = 13;
break;
}
this.__CP__ = 1;
break;
case 2:
this.__CP__ = 3;
this.yield(1);
return true;
case 6:
this.__CP__ = 5;
this.yield(2);
return true;
case 9:
this.__CP__ = 8;
this.yield(3);
return true;
case 11:
this.__CP__ = 8;
this.yield(4);
return true;
case 8:
this.__CP__ = 12;
this.yield(5);
return true;
case 14:
this.__CP__ = 1;
this.yield(6);
return true;
case 0:
this.__CP__ = 2;
break;
case 4:
this.__CP__ = 6;
break;
case 7:
this.__CP__ = 9;
break;
case 10:
this.__CP__ = 11;
break;
case 13:
this.__CP__ = 14;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
}
public void test_whileStatement() throws Exception {
this.assertResultsEqual(new _FunctionTypes._void_P1_E0<List<Integer>>() {
public void invoke(List<Integer> exp) {
int i = 3;
ListSequence.fromList(exp).addElement(i);
while (i > 0) {
int j = 1;
ListSequence.fromList(exp).addElement(j);
while (j <= 3) {
ListSequence.fromList(exp).addElement(i * j);
j++;
}
ListSequence.fromList(exp).addElement(j);
i--;
}
ListSequence.fromList(exp).addElement(i);
// must not return anything
}
}, new _FunctionTypes._return_P0_E0<Iterable<Integer>>() {
public Iterable<Integer> invoke() {
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 5:
if (_3_i > 0) {
this.__CP__ = 6;
break;
}
this.__CP__ = 7;
break;
case 11:
if (_9_j <= 3) {
this.__CP__ = 12;
break;
}
this.__CP__ = 13;
break;
case 4:
this.__CP__ = 5;
this.yield(_3_i);
return true;
case 10:
this.__CP__ = 11;
this.yield(_9_j);
return true;
case 14:
this.__CP__ = 15;
this.yield(_3_i * _9_j);
return true;
case 13:
this.__CP__ = 16;
this.yield(_9_j);
return true;
case 7:
this.__CP__ = 17;
this.yield(_3_i);
return true;
case 0:
this._3_i = 3;
this.__CP__ = 4;
break;
case 17:
// placeholder
this.__CP__ = 1;
break;
case 6:
this._9_j = 1;
this.__CP__ = 10;
break;
case 16:
_3_i--;
this.__CP__ = 5;
break;
case 12:
this.__CP__ = 14;
break;
case 15:
_9_j++;
this.__CP__ = 11;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private int _3_i;
private int _9_j;
};
}
};
}
});
}
public void test_doWhileStatement() throws Exception {
this.assertResultsEqual(new _FunctionTypes._void_P1_E0<List<Integer>>() {
public void invoke(List<Integer> exp) {
ListSequence.fromList(exp).addElement(-1);
int i = 3;
ListSequence.fromList(exp).addElement(i);
do {
int j = i;
ListSequence.fromList(exp).addElement(j);
do {
ListSequence.fromList(exp).addElement(j * i);
j--;
ListSequence.fromList(exp).addElement(j + i);
} while (j > 0);
i--;
} while (i > 0);
i = 0;
ListSequence.fromList(exp).addElement(i);
// must not return value
}
}, new _FunctionTypes._return_P0_E0<Iterable<Integer>>() {
public Iterable<Integer> invoke() {
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 7:
if (_4_i > 0) {
this.__CP__ = 6;
break;
}
this.__CP__ = 8;
break;
case 13:
if (_10_j > 0) {
this.__CP__ = 12;
break;
}
this.__CP__ = 14;
break;
case 2:
this.__CP__ = 3;
this.yield(-1);
return true;
case 5:
this.__CP__ = 6;
this.yield(_4_i);
return true;
case 11:
this.__CP__ = 12;
this.yield(_10_j);
return true;
case 15:
this.__CP__ = 16;
this.yield(_10_j * _4_i);
return true;
case 17:
this.__CP__ = 13;
this.yield(_10_j + _4_i);
return true;
case 18:
this.__CP__ = 19;
this.yield(_4_i);
return true;
case 0:
this.__CP__ = 2;
break;
case 3:
this._4_i = 3;
this.__CP__ = 5;
break;
case 8:
_4_i = 0;
this.__CP__ = 18;
break;
case 19:
// placeholder
this.__CP__ = 1;
break;
case 6:
this._10_j = _4_i;
this.__CP__ = 11;
break;
case 14:
_4_i--;
this.__CP__ = 7;
break;
case 12:
this.__CP__ = 15;
break;
case 16:
_10_j--;
this.__CP__ = 17;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private int _4_i;
private int _10_j;
};
}
};
}
});
}
public void test_forStatement() throws Exception {
this.assertResultsEqual(new _FunctionTypes._void_P1_E0<List<Integer>>() {
public void invoke(List<Integer> exp) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
ListSequence.fromList(exp).addElement(i);
ListSequence.fromList(exp).addElement(j);
}
}
}
}, new _FunctionTypes._return_P0_E0<Iterable<Integer>>() {
public Iterable<Integer> invoke() {
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._2_i = 0;
case 3:
if (!(_2_i < 3)) {
this.__CP__ = 1;
break;
}
this.__CP__ = 4;
break;
case 5:
_2_i++;
this.__CP__ = 3;
break;
case 6:
this._6_j = 0;
case 7:
if (!(_6_j < 3)) {
this.__CP__ = 5;
break;
}
this.__CP__ = 8;
break;
case 9:
_6_j++;
this.__CP__ = 7;
break;
case 10:
this.__CP__ = 11;
this.yield(_2_i);
return true;
case 11:
this.__CP__ = 9;
this.yield(_6_j);
return true;
case 0:
this.__CP__ = 2;
break;
case 4:
this.__CP__ = 6;
break;
case 8:
this.__CP__ = 10;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private int _2_i;
private int _6_j;
};
}
};
}
});
}
public void test_foreachStatement() throws Exception {
final List<Integer> data1 = (List<Integer>) Arrays.asList(1, 2, 3, 4, 5);
final List<Integer> data2 = (List<Integer>) Arrays.asList(1, 2, 3, 4, 5);
this.assertResultsEqual(new _FunctionTypes._void_P1_E0<List<Integer>>() {
public void invoke(List<Integer> exp) {
for (int i : data1) {
ListSequence.fromList(exp).addElement(i);
for (int j : data2) {
ListSequence.fromList(exp).addElement(j);
ListSequence.fromList(exp).addElement(i + j);
}
ListSequence.fromList(exp).addElement(i * i);
}
}
}, new _FunctionTypes._return_P0_E0<Iterable<Integer>>() {
public Iterable<Integer> invoke() {
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._2_i_it = data1.iterator();
case 3:
if (!(this._2_i_it.hasNext())) {
this.__CP__ = 1;
break;
}
this._2_i = this._2_i_it.next();
this.__CP__ = 4;
break;
case 6:
this._6_j_it = data2.iterator();
case 7:
if (!(this._6_j_it.hasNext())) {
this.__CP__ = 9;
break;
}
this._6_j = this._6_j_it.next();
this.__CP__ = 8;
break;
case 5:
this.__CP__ = 6;
this.yield(_2_i);
return true;
case 10:
this.__CP__ = 11;
this.yield(_6_j);
return true;
case 11:
this.__CP__ = 7;
this.yield(_2_i + _6_j);
return true;
case 9:
this.__CP__ = 3;
this.yield(_2_i * _2_i);
return true;
case 0:
this.__CP__ = 2;
break;
case 4:
this.__CP__ = 5;
break;
case 8:
this.__CP__ = 10;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private int _2_i;
private Iterator<Integer> _2_i_it;
private int _6_j;
private Iterator<Integer> _6_j_it;
};
}
};
}
});
}
public void test_dmitriev() throws Exception {
this.assertResultsEqual(new _FunctionTypes._void_P1_E0<List<Integer>>() {
public void invoke(List<Integer> exp) {
int a = 0;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (i + j < 5) {
continue;
}
if (i < j) {
a = a + i + j;
ListSequence.fromList(exp).addElement(a);
}
}
}
}
}, new _FunctionTypes._return_P0_E0<Iterable<Integer>>() {
public Iterable<Integer> invoke() {
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:
this._4_i = 0;
case 5:
if (!(_4_i < 10)) {
this.__CP__ = 1;
break;
}
this.__CP__ = 6;
break;
case 7:
_4_i++;
this.__CP__ = 5;
break;
case 8:
this._8_j = 0;
case 9:
if (!(_8_j < 10)) {
this.__CP__ = 7;
break;
}
this.__CP__ = 10;
break;
case 11:
_8_j++;
this.__CP__ = 9;
break;
case 12:
if (_4_i + _8_j < 5) {
this.__CP__ = 13;
break;
}
this.__CP__ = 14;
break;
case 14:
if (_4_i < _8_j) {
this.__CP__ = 16;
break;
}
this.__CP__ = 11;
break;
case 18:
this.__CP__ = 11;
this.yield(_3_a);
return true;
case 0:
this._3_a = 0;
this.__CP__ = 4;
break;
case 6:
this.__CP__ = 8;
break;
case 10:
this.__CP__ = 12;
break;
case 13:
this.__CP__ = 11;
break;
case 16:
_3_a = _3_a + _4_i + _8_j;
this.__CP__ = 18;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private int _3_a;
private int _8_j;
private int _4_i;
};
}
};
}
});
}
public void test_switchStatement() throws Exception {
this.assertResultsEqual(new _FunctionTypes._void_P1_E0<List<Integer>>() {
public void invoke(List<Integer> exp) {
for (Fruits fr : Arrays.asList(new Fruits[]{Fruits.APPLES, Fruits.ORANGES, Fruits.CARS})) {
switch (fr) {
case APPLES:
ListSequence.fromList(exp).addElement(1);
ListSequence.fromList(exp).addElement(2);
// fall through
case ORANGES:
ListSequence.fromList(exp).addElement(3);
break;
default:
ListSequence.fromList(exp).addElement(-1);
break;
}
}
}
}, new _FunctionTypes._return_P0_E0<Iterable<Integer>>() {
public Iterable<Integer> invoke() {
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._2_fr_it = Arrays.asList(new Fruits[]{Fruits.APPLES, Fruits.ORANGES, Fruits.CARS}).iterator();
case 3:
if (!(this._2_fr_it.hasNext())) {
this.__CP__ = 1;
break;
}
this._2_fr = this._2_fr_it.next();
this.__CP__ = 4;
break;
case 5:
switch (_2_fr) {
case APPLES:
this.__CP__ = 6;
break __switch__;
case ORANGES:
this.__CP__ = 7;
break __switch__;
default:
this.__CP__ = 14;
break __switch__;
}
case 8:
this.__CP__ = 9;
this.yield(1);
return true;
case 9:
this.__CP__ = 10;
this.yield(2);
return true;
case 12:
this.__CP__ = 13;
this.yield(3);
return true;
case 15:
this.__CP__ = 16;
this.yield(-1);
return true;
case 0:
this.__CP__ = 2;
break;
case 4:
this.__CP__ = 5;
break;
case 6:
this.__CP__ = 8;
break;
case 10:
// fall through
this.__CP__ = 7;
break;
case 7:
this.__CP__ = 12;
break;
case 13:
this.__CP__ = 3;
break;
case 14:
this.__CP__ = 15;
break;
case 16:
this.__CP__ = 3;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private Fruits _2_fr;
private Iterator<Fruits> _2_fr_it;
};
}
};
}
});
}
public void test_elseIfClauses() throws Exception {
this.assertResultsEqual(new _FunctionTypes._void_P1_E0<List<Integer>>() {
public void invoke(List<Integer> exp) {
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
ListSequence.fromList(exp).addElement(i * 10);
} else if (i % 3 == 0) {
ListSequence.fromList(exp).addElement(i * 100);
} else if (i % 5 == 0) {
ListSequence.fromList(exp).addElement(i * 1000);
} else {
ListSequence.fromList(exp).addElement(i * 10000);
if (true) {
ListSequence.fromList(exp).addElement(i * 100000);
}
}
}
}
}, new _FunctionTypes._return_P0_E0<Iterable<Integer>>() {
public Iterable<Integer> invoke() {
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._2_i = 1;
case 3:
if (!(_2_i <= 10)) {
this.__CP__ = 1;
break;
}
this.__CP__ = 4;
break;
case 5:
_2_i++;
this.__CP__ = 3;
break;
case 6:
if (_2_i % 2 == 0) {
this.__CP__ = 7;
break;
} else if (_2_i % 3 == 0) {
this.__CP__ = 9;
break;
} else if (_2_i % 5 == 0) {
this.__CP__ = 11;
break;
}
this.__CP__ = 13;
break;
case 16:
if (true) {
this.__CP__ = 17;
break;
}
this.__CP__ = 5;
break;
case 8:
this.__CP__ = 5;
this.yield(_2_i * 10);
return true;
case 10:
this.__CP__ = 5;
this.yield(_2_i * 100);
return true;
case 12:
this.__CP__ = 5;
this.yield(_2_i * 1000);
return true;
case 14:
this.__CP__ = 15;
this.yield(_2_i * 10000);
return true;
case 18:
this.__CP__ = 5;
this.yield(_2_i * 100000);
return true;
case 0:
this.__CP__ = 2;
break;
case 4:
this.__CP__ = 6;
break;
case 7:
this.__CP__ = 8;
break;
case 9:
this.__CP__ = 10;
break;
case 11:
this.__CP__ = 12;
break;
case 13:
this.__CP__ = 14;
break;
case 15:
this.__CP__ = 16;
break;
case 17:
this.__CP__ = 18;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private int _2_i;
};
}
};
}
});
}
public void test_mps7920() throws Exception {
final boolean cond1 = false;
final boolean cond2 = false;
this.assertResultsEqual(new _FunctionTypes._void_P1_E0<List<Integer>>() {
public void invoke(List<Integer> exp) {
if (cond1) {
ListSequence.fromList(exp).addElement(13);
} else {
List<Integer> ll = ListSequence.fromListAndArray(new ArrayList<Integer>(), 21, 34, 55, 89);
if (cond2) {
ll = ListSequence.fromList(ll).reversedList();
} else {
ll = ll;
}
for (Integer ii : ll) {
ListSequence.fromList(exp).addSequence(ListSequence.fromList(ll).subListSequence(ListSequence.fromList(ll).indexOf(ii), ListSequence.fromList(ll).count()));
}
}
}
}, new _FunctionTypes._return_P0_E0<Iterable<Integer>>() {
public Iterable<Integer> invoke() {
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 10:
this._13_ii_it = _7_ll.iterator();
case 14:
if (!(this._13_ii_it.hasNext())) {
this.__CP__ = 1;
break;
}
this._13_ii = this._13_ii_it.next();
this.__CP__ = 15;
break;
case 16:
this._16__yield_75e5vq_a0c0a0a1a0c0i0_it = Sequence.fromIterable(ListSequence.fromList(_7_ll).subListSequence(ListSequence.fromList(_7_ll).indexOf(_13_ii), ListSequence.fromList(_7_ll).count())).iterator();
case 17:
if (!(this._16__yield_75e5vq_a0c0a0a1a0c0i0_it.hasNext())) {
this.__CP__ = 14;
break;
}
this._16__yield_75e5vq_a0c0a0a1a0c0i0 = this._16__yield_75e5vq_a0c0a0a1a0c0i0_it.next();
this.__CP__ = 18;
break;
case 2:
if (cond1) {
this.__CP__ = 3;
break;
}
this.__CP__ = 5;
break;
case 8:
if (cond2) {
this.__CP__ = 9;
break;
}
this.__CP__ = 12;
break;
case 4:
this.__CP__ = 1;
this.yield(13);
return true;
case 19:
this.__CP__ = 17;
this.yield(_16__yield_75e5vq_a0c0a0a1a0c0i0);
return true;
case 0:
this.__CP__ = 2;
break;
case 3:
this.__CP__ = 4;
break;
case 5:
this._7_ll = ListSequence.fromListAndArray(new ArrayList<Integer>(), 21, 34, 55, 89);
this.__CP__ = 8;
break;
case 9:
_7_ll = ListSequence.fromList(_7_ll).reversedList();
this.__CP__ = 10;
break;
case 12:
_7_ll = _7_ll;
this.__CP__ = 10;
break;
case 15:
this.__CP__ = 16;
break;
case 18:
this.__CP__ = 19;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private List<Integer> _7_ll;
private Integer _16__yield_75e5vq_a0c0a0a1a0c0i0;
private Iterator<Integer> _16__yield_75e5vq_a0c0a0a1a0c0i0_it;
private Integer _13_ii;
private Iterator<Integer> _13_ii_it;
};
}
};
}
});
}
public void test_mps_1503() throws Exception {
this.assertResultsEqual(new _FunctionTypes._void_P1_E0<List<Integer>>() {
public void invoke(List<Integer> exp) {
int val = 0;
if (0 == 1) {
val = 42;
} else
if (true) {
int foo = -1;
val = 24;
}
if (val != 0) {
ListSequence.fromList(exp).addElement(val);
}
}
}, new _FunctionTypes._return_P0_E0<Iterable<Integer>>() {
public Iterable<Integer> invoke() {
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 (0 == 1) {
this.__CP__ = 5;
break;
}
this.__CP__ = 8;
break;
case 8:
if (true) {
this.__CP__ = 9;
break;
}
this.__CP__ = 6;
break;
case 6:
if (_3_val != 0) {
this.__CP__ = 12;
break;
}
this.__CP__ = 1;
break;
case 13:
this.__CP__ = 1;
this.yield(_3_val);
return true;
case 0:
this._3_val = 0;
this.__CP__ = 4;
break;
case 5:
_3_val = 42;
this.__CP__ = 6;
break;
case 9:
this._11_foo = -1;
_3_val = 24;
this.__CP__ = 6;
break;
case 12:
this.__CP__ = 13;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private int _3_val;
private int _11_foo;
};
}
};
}
});
}
public void test_allKindsOfLoopLabels() throws Exception {
this.assertResultsEqual(new _FunctionTypes._void_P1_E0<List<Integer>>() {
public void invoke(List<Integer> exp) {
int i = 10;
label1:
while (i > 0) {
label2:
for (int j = i % 5; j >= 0; j--) {
label3:
do {
if (i % 2 > j) {
continue label2;
}
ListSequence.fromList(exp).addElement(i + j);
i--;
} while ((i + j) % 3 == 2);
switch (j) {
case 1:
continue;
case 2:
break;
case 3:
continue label1;
default:
break label2;
}
ListSequence.fromList(exp).addElement(j);
}
ListSequence.fromList(exp).addElement(i);
i--;
}
}
}, new _FunctionTypes._return_P0_E0<Iterable<Integer>>() {
public Iterable<Integer> invoke() {
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 6:
this._6_j = _3_i % 5;
case 7:
if (!(_6_j >= 0)) {
this.__CP__ = 10;
break;
}
this.__CP__ = 8;
break;
case 9:
_6_j--;
this.__CP__ = 7;
break;
case 14:
if (_3_i % 2 > _6_j) {
this.__CP__ = 15;
break;
}
this.__CP__ = 16;
break;
case 13:
switch (_6_j) {
case 1:
this.__CP__ = 20;
break __switch__;
case 2:
this.__CP__ = 21;
break __switch__;
case 3:
this.__CP__ = 23;
break __switch__;
default:
this.__CP__ = 27;
break __switch__;
}
case 4:
if (_3_i > 0) {
this.__CP__ = 5;
break;
}
this.__CP__ = 1;
break;
case 12:
if ((_3_i + _6_j) % 3 == 2) {
this.__CP__ = 11;
break;
}
this.__CP__ = 13;
break;
case 16:
this.__CP__ = 18;
this.yield(_3_i + _6_j);
return true;
case 19:
this.__CP__ = 9;
this.yield(_6_j);
return true;
case 10:
this.__CP__ = 29;
this.yield(_3_i);
return true;
case 0:
this._3_i = 10;
this.__CP__ = 4;
break;
case 5:
this.__CP__ = 6;
break;
case 29:
_3_i--;
this.__CP__ = 4;
break;
case 8:
this.__CP__ = 11;
break;
case 11:
this.__CP__ = 14;
break;
case 18:
_3_i--;
this.__CP__ = 12;
break;
case 15:
this.__CP__ = 12;
break;
case 20:
this.__CP__ = 9;
break;
case 21:
this.__CP__ = 19;
break;
case 23:
this.__CP__ = 9;
break;
case 27:
this.__CP__ = 10;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private int _3_i;
private int _6_j;
};
}
};
}
});
}
public void test_yieldAllLast() throws Exception {
this.assertResultsEqual2(new _FunctionTypes._return_P0_E0<IListSequence<Integer>>() {
public IListSequence<Integer> invoke() {
return ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3);
}
}, new _FunctionTypes._return_P0_E0<IListSequence<Integer>>() {
public IListSequence<Integer> invoke() {
// some statements
return ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3);
}
});
}
public void test_yieldAll() throws Exception {
this.assertResultsEqual2(new _FunctionTypes._return_P0_E0<IListSequence<Integer>>() {
public IListSequence<Integer> invoke() {
return ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3);
}
}, new _FunctionTypes._return_P0_E0<Iterable<Integer>>() {
public Iterable<Integer> invoke() {
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._2__yield_75e5vq_a0b0a0a21a_it = Sequence.fromIterable(ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3)).iterator();
case 3:
if (!(this._2__yield_75e5vq_a0b0a0a21a_it.hasNext())) {
this.__CP__ = 5;
break;
}
this._2__yield_75e5vq_a0b0a0a21a = this._2__yield_75e5vq_a0b0a0a21a_it.next();
this.__CP__ = 4;
break;
case 6:
this.__CP__ = 3;
this.yield(_2__yield_75e5vq_a0b0a0a21a);
return true;
case 0:
this.__CP__ = 2;
break;
case 5:
// last statement
this.__CP__ = 1;
break;
case 4:
this.__CP__ = 6;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private Integer _2__yield_75e5vq_a0b0a0a21a;
private Iterator<Integer> _2__yield_75e5vq_a0b0a0a21a_it;
};
}
};
}
});
}
public void test_yieldYieldAll() throws Exception {
this.assertResultsEqual2(new _FunctionTypes._return_P0_E0<IListSequence<Integer>>() {
public IListSequence<Integer> invoke() {
return ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3);
}
}, new _FunctionTypes._return_P0_E0<Iterable<Integer>>() {
public Iterable<Integer> invoke() {
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 3:
this._3__yield_75e5vq_b0b0a0a31a_it = Sequence.fromIterable(ListSequence.fromListAndArray(new ArrayList<Integer>(), 2, 3)).iterator();
case 4:
if (!(this._3__yield_75e5vq_b0b0a0a31a_it.hasNext())) {
this.__CP__ = 1;
break;
}
this._3__yield_75e5vq_b0b0a0a31a = this._3__yield_75e5vq_b0b0a0a31a_it.next();
this.__CP__ = 5;
break;
case 2:
this.__CP__ = 3;
this.yield(1);
return true;
case 6:
this.__CP__ = 4;
this.yield(_3__yield_75e5vq_b0b0a0a31a);
return true;
case 0:
this.__CP__ = 2;
break;
case 5:
this.__CP__ = 6;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private Integer _3__yield_75e5vq_b0b0a0a31a;
private Iterator<Integer> _3__yield_75e5vq_b0b0a0a31a_it;
};
}
};
}
});
}
public void test_yieldAllYieldAll() throws Exception {
this.assertResultsEqual2(new _FunctionTypes._return_P0_E0<IListSequence<Integer>>() {
public IListSequence<Integer> invoke() {
return ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3, 4);
}
}, new _FunctionTypes._return_P0_E0<Iterable<Integer>>() {
public Iterable<Integer> invoke() {
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._2__yield_75e5vq_a0b0a0a41a_it = Sequence.fromIterable(ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2)).iterator();
case 3:
if (!(this._2__yield_75e5vq_a0b0a0a41a_it.hasNext())) {
this.__CP__ = 5;
break;
}
this._2__yield_75e5vq_a0b0a0a41a = this._2__yield_75e5vq_a0b0a0a41a_it.next();
this.__CP__ = 4;
break;
case 5:
this._6__yield_75e5vq_b0b0a0a41a_it = Sequence.fromIterable(ListSequence.fromListAndArray(new ArrayList<Integer>(), 3, 4)).iterator();
case 7:
if (!(this._6__yield_75e5vq_b0b0a0a41a_it.hasNext())) {
this.__CP__ = 1;
break;
}
this._6__yield_75e5vq_b0b0a0a41a = this._6__yield_75e5vq_b0b0a0a41a_it.next();
this.__CP__ = 8;
break;
case 6:
this.__CP__ = 3;
this.yield(_2__yield_75e5vq_a0b0a0a41a);
return true;
case 9:
this.__CP__ = 7;
this.yield(_6__yield_75e5vq_b0b0a0a41a);
return true;
case 0:
this.__CP__ = 2;
break;
case 4:
this.__CP__ = 6;
break;
case 8:
this.__CP__ = 9;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private Integer _2__yield_75e5vq_a0b0a0a41a;
private Iterator<Integer> _2__yield_75e5vq_a0b0a0a41a_it;
private Integer _6__yield_75e5vq_b0b0a0a41a;
private Iterator<Integer> _6__yield_75e5vq_b0b0a0a41a_it;
};
}
};
}
});
}
public void test_yieldAllInCycle() throws Exception {
this.assertResultsEqual2(new _FunctionTypes._return_P0_E0<IListSequence<Integer>>() {
public IListSequence<Integer> invoke() {
return ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3, 4);
}
}, new _FunctionTypes._return_P0_E0<Iterable<Integer>>() {
public Iterable<Integer> invoke() {
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._2_i = 1;
case 3:
if (!(_2_i <= 4)) {
this.__CP__ = 1;
break;
}
this.__CP__ = 4;
break;
case 5:
_2_i++;
this.__CP__ = 3;
break;
case 6:
this._6__yield_75e5vq_a0a0b0a0a51a_it = Sequence.fromIterable(ListSequence.fromListAndArray(new ArrayList<Integer>(), _2_i)).iterator();
case 7:
if (!(this._6__yield_75e5vq_a0a0b0a0a51a_it.hasNext())) {
this.__CP__ = 5;
break;
}
this._6__yield_75e5vq_a0a0b0a0a51a = this._6__yield_75e5vq_a0a0b0a0a51a_it.next();
this.__CP__ = 8;
break;
case 9:
this.__CP__ = 7;
this.yield(_6__yield_75e5vq_a0a0b0a0a51a);
return true;
case 0:
this.__CP__ = 2;
break;
case 4:
this.__CP__ = 6;
break;
case 8:
this.__CP__ = 9;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private Integer _6__yield_75e5vq_a0a0b0a0a51a;
private Iterator<Integer> _6__yield_75e5vq_a0a0b0a0a51a_it;
private int _2_i;
};
}
};
}
});
}
public void test_timur1() throws Exception {
// {1, 2, 3}.select{ it => yield 4; yield 5; }
final List<Integer> input = ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3);
List<Iterable<Integer>> exp = ListSequence.fromListAndArray(new ArrayList<Iterable<Integer>>(), ListSequence.fromListAndArray(new ArrayList<Integer>(), 4, 5), ListSequence.fromListAndArray(new ArrayList<Integer>(), 4, 5), ListSequence.fromListAndArray(new ArrayList<Integer>(), 4, 5));
List<Iterable<Integer>> res = ListSequence.fromList(new ArrayList<Iterable<Integer>>());
ListSequence.fromList(res).addSequence(Sequence.fromIterable(new _FunctionTypes._return_P0_E0<ISequence<Iterable<Integer>>>() {
public ISequence<Iterable<Integer>> invoke() {
return ListSequence.fromList(input).select(new ISelector<Integer, Iterable<Integer>>() {
public Iterable<Integer> select(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(4);
return true;
case 3:
this.__CP__ = 1;
this.yield(5);
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
}
}.invoke()));
this.assertEquals(exp, res);
}
public void test_timur2() throws Exception {
// {1, 2, 3}.select{ it => if (it == 2) {yield 4;}; }
final List<Integer> input = ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3);
List<Iterable<Integer>> exp = ListSequence.fromListAndArray(new ArrayList<Iterable<Integer>>(), ListSequence.fromList(new ArrayList<Integer>()), ListSequence.fromListAndArray(new ArrayList<Integer>(), 4), ListSequence.fromList(new ArrayList<Integer>()));
List<Iterable<Integer>> res = ListSequence.fromList(new ArrayList<Iterable<Integer>>());
ListSequence.fromList(res).addSequence(Sequence.fromIterable(new _FunctionTypes._return_P0_E0<ISequence<Iterable<Integer>>>() {
public ISequence<Iterable<Integer>> invoke() {
return ListSequence.fromList(input).select(new ISelector<Integer, Iterable<Integer>>() {
public Iterable<Integer> select(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:
if (it == 2) {
this.__CP__ = 3;
break;
}
this.__CP__ = 1;
break;
case 4:
this.__CP__ = 1;
this.yield(4);
return true;
case 0:
this.__CP__ = 2;
break;
case 3:
this.__CP__ = 4;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
}
}.invoke()));
this.assertEquals(exp, res);
}
public void test_mps3477() throws Exception {
List<Integer> exp = ListSequence.fromListAndArray(new ArrayList<Integer>(), 10, 0, 20, 11, 1, 21, 12, 2, 22, 13, 3, 23, 14, 4, 24, 15, 5, 25, 16, 6, 26, 17, 7, 27, 18, 8, 28, 19, 9, 29);
final List<Integer> res = ListSequence.fromList(new ArrayList<Integer>());
_FunctionTypes._return_P2_E0<? extends Iterable<Integer>, ? super Integer, ? super Integer> foo = new _FunctionTypes._return_P2_E0<Iterable<Integer>, Integer, Integer>() {
public Iterable<Integer> invoke(final Integer start, final Integer end) {
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._2_i = start;
case 3:
if (!(_2_i < end)) {
this.__CP__ = 1;
break;
}
this.__CP__ = 4;
break;
case 5:
_2_i++;
this.__CP__ = 3;
break;
case 7:
this.__CP__ = 8;
this.yield(_2_i);
return true;
case 0:
this.__CP__ = 2;
break;
case 4:
ListSequence.fromList(res).addElement(_2_i + 10);
this.__CP__ = 7;
break;
case 8:
ListSequence.fromList(res).addElement(_2_i + 20);
this.__CP__ = 5;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private int _2_i;
};
}
};
}
};
Iterable<Integer> out = foo.invoke(0, 10);
for (int k : out) {
ListSequence.fromList(res).addElement(k);
}
Assert.assertEquals(exp, res);
}
public void test_mps10427() throws Exception {
final Iterable<String> s1 = Sequence.fromClosure(new ISequenceClosure<String>() {
public Iterable<String> iterable() {
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("foo");
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
final Iterable<String> s2 = null;
final Iterable<String> s3 = Sequence.<String>singleton("bar");
String s = IterableUtils.join(Sequence.fromIterable(Sequence.fromClosure(new ISequenceClosure<String>() {
public Iterable<String> iterable() {
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._2__yield_75e5vq_a0a0a0a3a91a_it = Sequence.fromIterable(s1).iterator();
case 3:
if (!(this._2__yield_75e5vq_a0a0a0a3a91a_it.hasNext())) {
this.__CP__ = 5;
break;
}
this._2__yield_75e5vq_a0a0a0a3a91a = this._2__yield_75e5vq_a0a0a0a3a91a_it.next();
this.__CP__ = 4;
break;
case 5:
this._6__yield_75e5vq_b0a0a0a3a91a_it = Sequence.fromIterable(s2).iterator();
case 7:
if (!(this._6__yield_75e5vq_b0a0a0a3a91a_it.hasNext())) {
this.__CP__ = 9;
break;
}
this._6__yield_75e5vq_b0a0a0a3a91a = this._6__yield_75e5vq_b0a0a0a3a91a_it.next();
this.__CP__ = 8;
break;
case 9:
this._10__yield_75e5vq_c0a0a0a3a91a_it = Sequence.fromIterable(s3).iterator();
case 11:
if (!(this._10__yield_75e5vq_c0a0a0a3a91a_it.hasNext())) {
this.__CP__ = 1;
break;
}
this._10__yield_75e5vq_c0a0a0a3a91a = this._10__yield_75e5vq_c0a0a0a3a91a_it.next();
this.__CP__ = 12;
break;
case 6:
this.__CP__ = 3;
this.yield(_2__yield_75e5vq_a0a0a0a3a91a);
return true;
case 10:
this.__CP__ = 7;
this.yield(_6__yield_75e5vq_b0a0a0a3a91a);
return true;
case 13:
this.__CP__ = 11;
this.yield(_10__yield_75e5vq_c0a0a0a3a91a);
return true;
case 0:
this.__CP__ = 2;
break;
case 4:
this.__CP__ = 6;
break;
case 8:
this.__CP__ = 10;
break;
case 12:
this.__CP__ = 13;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private String _2__yield_75e5vq_a0a0a0a3a91a;
private Iterator<String> _2__yield_75e5vq_a0a0a0a3a91a_it;
private String _6__yield_75e5vq_b0a0a0a3a91a;
private Iterator<String> _6__yield_75e5vq_b0a0a0a3a91a_it;
private String _10__yield_75e5vq_c0a0a0a3a91a;
private Iterator<String> _10__yield_75e5vq_c0a0a0a3a91a_it;
};
}
};
}
})), ", ");
Assert.assertEquals("foo, bar", s);
}
public void test_yieldNext() throws Exception {
Iterable<Integer> test = 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 2:
this.__CP__ = 3;
this.yield(42);
return true;
case 3:
this.__CP__ = 1;
this.yield(24);
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
Iterator<Integer> it = test.iterator();
Assert.assertTrue(it.hasNext());
Assert.assertSame(42, it.next());
// don't call hasNext, must still yield result
Assert.assertSame(24, it.next());
try {
it.next();
Assert.assertTrue(false);
} catch (NoSuchElementException e) {
// ok
}
Assert.assertFalse(it.hasNext());
}
public void test_delayedException() throws Exception {
Iterable<Integer> seq = 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 3:
if (0 == 0) {
this.__CP__ = 4;
break;
}
this.__CP__ = 5;
break;
case 2:
this.__CP__ = 3;
this.yield(1);
return true;
case 5:
this.__CP__ = 1;
this.yield(-1);
return true;
case 0:
this.__CP__ = 2;
break;
case 4:
throw new DelayedException();
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
Iterator<Integer> it = seq.iterator();
Assert.assertSame(1, it.next());
try {
it.next();
Assert.assertTrue(false);
} catch (NoSuchElementException e) {
// ok
}
try {
Assert.assertFalse(it.hasNext());
Assert.assertTrue(false);
} catch (DelayedException e) {
// ok
}
it = seq.iterator();
Assert.assertSame(1, it.next());
try {
Assert.assertFalse(it.hasNext());
Assert.assertTrue(false);
} catch (DelayedException e) {
// ok
}
try {
it.next();
Assert.assertTrue(false);
} catch (NoSuchElementException e) {
// ok
}
}
public void test_mps10640() throws Exception {
Object input = new Object[]{"a", "b", new Object[]{"c", "d"}};
Iterable<Object> output = new _FunctionTypes._return_P1_E0<Iterable<Object>, Object>() {
public Iterable<Object> invoke(final Object o) {
return new Iterable<Object>() {
public Iterator<Object> iterator() {
return new YieldingIterator<Object>() {
private int __CP__ = 0;
protected boolean moveToNext() {
__loop__:
do {
__switch__:
switch (this.__CP__) {
case -1:
assert false : "Internal error";
return false;
case 8:
this._8__yield_75e5vq_a0a0b0a0a1a22a_it = Sequence.fromIterable(invoke(_5_os)).iterator();
case 9:
if (!(this._8__yield_75e5vq_a0a0b0a0a1a22a_it.hasNext())) {
this.__CP__ = 6;
break;
}
this._8__yield_75e5vq_a0a0b0a0a1a22a = this._8__yield_75e5vq_a0a0b0a0a1a22a_it.next();
this.__CP__ = 10;
break;
case 5:
this._5_os_idx = 0;
case 6:
if (this._5_os_idx >= ((Object[]) o).length) {
this.__CP__ = 1;
break;
}
this._5_os = ((Object[]) o)[this._5_os_idx++];
this.__CP__ = 7;
break;
case 3:
if (o instanceof Object[]) {
this.__CP__ = 4;
break;
}
this.__CP__ = 1;
break;
case 2:
this.__CP__ = 3;
this.yield(o);
return true;
case 11:
this.__CP__ = 9;
this.yield(_8__yield_75e5vq_a0a0b0a0a1a22a);
return true;
case 0:
this.__CP__ = 2;
break;
case 4:
this.__CP__ = 5;
break;
case 7:
this.__CP__ = 8;
break;
case 10:
this.__CP__ = 11;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private Object _5_os;
private int _5_os_idx;
private Object _8__yield_75e5vq_a0a0b0a0a1a22a;
private Iterator<Object> _8__yield_75e5vq_a0a0b0a0a1a22a_it;
};
}
};
}
}.invoke(input);
Sequence.fromIterable(output).disjunction(ListSequence.fromList(ListSequence.fromListAndArray(new ArrayList(), "a", "b", "c", "d"))).isEmpty();
}
public void test_mps15041() throws Exception {
Iterable<? extends Number> seq = new _FunctionTypes._return_P0_E0<Iterable<? extends Number>>() {
public Iterable<Number> invoke() {
return new Iterable<Number>() {
public Iterator<Number> iterator() {
return new YieldingIterator<Number>() {
private int __CP__ = 0;
protected boolean moveToNext() {
__loop__:
do {
__switch__:
switch (this.__CP__) {
case -1:
assert false : "Internal error";
return false;
case 5:
this._5__yield_75e5vq_d0a0a0a32a_it = Sequence.fromIterable(numberSubtypes()).iterator();
case 6:
if (!(this._5__yield_75e5vq_d0a0a0a32a_it.hasNext())) {
this.__CP__ = 1;
break;
}
this._5__yield_75e5vq_d0a0a0a32a = this._5__yield_75e5vq_d0a0a0a32a_it.next();
this.__CP__ = 7;
break;
case 2:
this.__CP__ = 3;
this.yield(ListSequence.fromList(numberSubtypes()).getElement(0));
return true;
case 3:
this.__CP__ = 4;
this.yield(ListSequence.fromList(numberSubtypes()).getElement(1));
return true;
case 4:
this.__CP__ = 5;
this.yield(ListSequence.fromList(numberSubtypes()).getElement(2));
return true;
case 8:
this.__CP__ = 6;
this.yield(_5__yield_75e5vq_d0a0a0a32a);
return true;
case 0:
this.__CP__ = 2;
break;
case 7:
this.__CP__ = 8;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private Number _5__yield_75e5vq_d0a0a0a32a;
private Iterator<? extends Number> _5__yield_75e5vq_d0a0a0a32a_it;
};
}
};
}
}.invoke();
Assert.assertEquals(Integer.valueOf(42), Sequence.fromIterable(seq).first());
Assert.assertEquals(Long.valueOf(100500L), Sequence.fromIterable(seq).skip(1).first());
Assert.assertEquals(Double.valueOf(2.718281828), Sequence.fromIterable(seq).skip(2).first());
Assert.assertEquals(Integer.valueOf(42), Sequence.fromIterable(seq).first());
Assert.assertEquals(Long.valueOf(100500L), Sequence.fromIterable(seq).skip(1).first());
Assert.assertEquals(Double.valueOf(2.718281828), Sequence.fromIterable(seq).skip(2).first());
Iterable<? extends Number> seq2 = new _FunctionTypes._return_P0_E0<List<? extends Number>>() {
public List<? extends Number> invoke() {
return numberSubtypes();
}
}.invoke();
Assert.assertEquals(Integer.valueOf(42), Sequence.fromIterable(seq).first());
Assert.assertEquals(Long.valueOf(100500L), Sequence.fromIterable(seq).skip(1).first());
Assert.assertEquals(Double.valueOf(2.718281828), Sequence.fromIterable(seq).skip(2).first());
}
public YieldClosures_Test() {
}
private List<? extends Number> numberSubtypes() {
return Sequence.fromIterable(Sequence.fromArray(new Number[]{Integer.valueOf(42), Long.valueOf(100500L), Double.valueOf(2.718281828)})).toListSequence();
}
private void assertEquals(List<Iterable<Integer>> exp, List<Iterable<Integer>> res) {
Assert.assertSame(ListSequence.fromList(exp).count(), ListSequence.fromList(res).count());
{
Iterator<Iterable<Integer>> foo_it = ListSequence.fromList(exp).iterator();
Iterator<Iterable<Integer>> bar_it = ListSequence.fromList(res).iterator();
Iterable<Integer> foo_var;
Iterable<Integer> bar_var;
while (foo_it.hasNext() && bar_it.hasNext()) {
foo_var = foo_it.next();
bar_var = bar_it.next();
Assert.assertSame(Sequence.fromIterable(foo_var).count(), Sequence.fromIterable(bar_var).count());
{
Iterator<Integer> a_it = Sequence.fromIterable(foo_var).iterator();
Iterator<Integer> b_it = Sequence.fromIterable(bar_var).iterator();
int a_var;
int b_var;
while (a_it.hasNext() && b_it.hasNext()) {
a_var = a_it.next();
b_var = b_it.next();
Assert.assertSame(a_var, b_var);
}
}
}
}
}
}