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.ISelector;
import java.util.Arrays;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import java.util.List;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import jetbrains.mps.internal.collections.runtime.ISequenceClosure;
import java.util.Iterator;
import jetbrains.mps.baseLanguage.closures.runtime.YieldingIterator;
import junit.framework.Assert;
import jetbrains.mps.baseLanguage.closures.runtime.Wrappers;
import jetbrains.mps.internal.collections.runtime.IVisitor;
import jetbrains.mps.internal.collections.runtime.IterableUtils;
import jetbrains.mps.internal.collections.runtime.ITranslator2;
public class SelectTest_Test extends Util_Test {
public void test_selectMethod() throws Exception {
ISequence<Integer> seq = Sequence.fromIterable(this.input5());
ISequence<Integer> test = seq.select(new ISelector<Integer, Integer>() {
public Integer select(Integer it) {
return (Integer) ((it % 2 == 1 ? it * 2 : it * 3));
}
});
this.assertIterableEquals(Arrays.asList(2, 6, 6, 12, 10), test.toIterable());
}
public void test_selectMethod2() throws Exception {
int a = Character.valueOf('a').charValue();
Iterable<Integer> input = Arrays.asList(a, a + 1, a + 2, a + 3, a + 4);
ISequence<Integer> seq = Sequence.fromIterable(input);
ISequence<String> test = seq.select(new ISelector<Integer, String>() {
public String select(Integer it) {
return Character.valueOf((char) it.intValue()).toString();
}
});
this.assertIterableEquals(Arrays.asList("a", "b", "c", "d", "e"), test.toIterable());
}
public void test_selectorVar() throws Exception {
ISequence<Integer> seq = Sequence.fromIterable(this.input5());
ISelector<Integer, Integer> selector = new ISelector<Integer, Integer>() {
public Integer select(Integer it) {
return (it % 2 == 1 ? it * 2 : it * 3);
}
};
ISequence<Integer> test = seq.select(selector);
this.assertIterableEquals(Arrays.asList(2, 6, 6, 12, 10), test.toIterable());
}
public void test_selectOperation() throws Exception {
this.assertIterableEquals(this.expectEven10(), Sequence.fromIterable(this.input5()).select(new ISelector<Integer, Integer>() {
public Integer select(Integer it) {
return it * 2;
}
}));
_FunctionTypes._return_P1_E0<? extends Integer, ? super Integer> cl = new _FunctionTypes._return_P1_E0<Integer, Integer>() {
public Integer invoke(Integer it) {
return it * 2;
}
};
this.assertIterableEquals(this.expectEven10(), Sequence.fromIterable(this.input5()).select(cl));
}
public void test_legacySelector() throws Exception {
Iterable<Integer> test = Sequence.fromIterable(this.input5()).select(new ISelector<Integer, Integer>() {
public Integer select(Integer it) {
return it * 2;
}
});
this.assertIterableEquals(this.expectEven10(), test);
}
public void test_selectMany() throws Exception {
final List<Integer> list = ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3);
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__ = 1;
this.yield(0);
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
Sequence.fromIterable(test).select(new ISelector<Integer, List<Integer>>() {
public List<Integer> select(Integer it) {
return list;
}
});
Iterable<List<Integer>> result = Sequence.fromIterable(test).select(new ISelector<Integer, List<Integer>>() {
public List<Integer> select(Integer it) {
return list;
}
});
Assert.assertEquals(list, Sequence.fromIterable(result).first());
}
public void test_nextWithoutHasNext() throws Exception {
this.assertIteratorYields(ListSequence.fromList(ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3)).select(new ISelector<Integer, Integer>() {
public Integer select(Integer i) {
return i * 2;
}
}).iterator(), 2, 4, 6);
}
public void test_selectAdvancesTooEarly() 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).select(new ISelector<Integer, Integer>() {
public Integer select(Integer i) {
return i;
}
}).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);
}
public void test_ofType() throws Exception {
List<Object> lo = ListSequence.fromListAndArray(new ArrayList<Object>(), 1, "foo", Boolean.TRUE, -1L, "bar", ListSequence.fromListAndArray(new ArrayList<String>(), "baz"));
Iterable<String> seqs = ListSequence.fromList(lo).ofType(String.class);
Assert.assertEquals("foo bar", IterableUtils.join(Sequence.fromIterable(seqs), " "));
Iterable<Long> seql = ListSequence.fromList(lo).ofType(Long.class);
Assert.assertTrue(Sequence.fromIterable(seql).count() == 1 && (long) Sequence.fromIterable(seql).first() == -1L);
Assert.assertTrue(ListSequence.fromList(lo).ofType(Boolean.class).count() == 1);
Assert.assertTrue(ListSequence.fromList(lo).ofType(Float.class).isEmpty());
}
public void test_mps19134() throws Exception {
// testing compilation
ListSequence.fromList(ListSequence.fromListAndArray(new ArrayList<Integer>(), 111, 112, 113)).translate(new ITranslator2<Integer, String>() {
public Iterable<String> translate(Integer it) {
return ListSequence.fromList(ListSequence.fromListAndArray(new ArrayList<String>(), "foo", "bar")).select(new ISelector<String, String>() {
public String select(String it) {
return ((true ? "" : "")) + "";
}
});
}
});
}
}