package jetbrains.mps.internalCollections.test.nullHacks;
/*Generated by MPS */
import jetbrains.mps.internalCollections.test.closures.Util_Test;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.internal.collections.runtime.ISelector;
import jetbrains.mps.internal.collections.runtime.ITranslator2;
import java.util.Iterator;
import jetbrains.mps.baseLanguage.closures.runtime.YieldingIterator;
import junit.framework.Assert;
import jetbrains.mps.internal.collections.runtime.IWhereFilter;
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.Arrays;
public class NullValues_Test extends Util_Test {
public void test_nullValues() throws Exception {
if (Sequence.IGNORE_NULL_VALUES) {
Iterable<Integer> input = this.input5();
this.assertIterableEquals(this.expectEmpty(), Sequence.fromIterable(input).select(new ISelector<Integer, Integer>() {
public Integer select(Integer it) {
return (Integer) null;
}
}));
this.assertIterableEquals(this.expectEmpty(), Sequence.fromIterable(input).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__ = 1;
this.yield((Integer) null);
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
}));
} else {
Iterable<Integer> input = this.input5();
Iterable<Integer> seqOfNulls = Sequence.fromIterable(input).select(new ISelector<Integer, Integer>() {
public Integer select(Integer it) {
return (Integer) null;
}
});
Assert.assertSame(Sequence.fromIterable(input).count(), Sequence.fromIterable(seqOfNulls).count());
Assert.assertTrue(Sequence.fromIterable(seqOfNulls).all(new IWhereFilter<Integer>() {
public boolean accept(Integer it) {
return it == null;
}
}));
Iterable<Integer> seqOfNulls2 = Sequence.fromIterable(input).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((Integer) null);
return true;
case 3:
this.__CP__ = 1;
this.yield((Integer) null);
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
});
Assert.assertSame(Sequence.fromIterable(input).count() * 2, Sequence.fromIterable(seqOfNulls2).count());
Assert.assertFalse(Sequence.fromIterable(seqOfNulls2).any(new IWhereFilter<Integer>() {
public boolean accept(Integer it) {
return it != null;
}
}));
}
}
public void test_nullElements() throws Exception {
if (Sequence.IGNORE_NULL_VALUES) {
List<Integer> list5 = ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3, 4, 5);
ListSequence.fromList(list5).addElement(null);
this.assertIterableEquals(this.expect5(), list5);
ListSequence.fromList(list5).removeElement(null);
this.assertIterableEquals(this.expect5(), list5);
ListSequence.fromList(list5).removeSequence(Sequence.fromIterable(this.input5()));
this.assertEmptyList(list5);
this.assertEmptyList(ListSequence.fromListAndArray(new ArrayList<Integer>(), null));
this.assertEmptyList(ListSequence.fromListAndArray(new ArrayList<Integer>(), null, null));
Integer nullvalue = null;
this.assertEmptyList(ListSequence.fromListAndArray(new ArrayList<Integer>(), nullvalue));
} else {
List<Integer> list5 = ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3, 4, 5);
ListSequence.fromList(list5).addElement(null);
this.assertIterableEquals(this.expect5(), ListSequence.fromList(list5).take(5));
Assert.assertSame(6, ListSequence.fromList(list5).count());
Assert.assertNull(ListSequence.fromList(list5).last());
ListSequence.fromList(list5).removeElement(null);
this.assertIterableEquals(this.expect5(), list5);
ListSequence.fromList(list5).removeSequence(Sequence.fromIterable(this.input5()));
Assert.assertSame(0, ListSequence.fromList(list5).count());
Assert.assertTrue(ListSequence.fromList(list5).isEmpty());
Assert.assertSame(1, ListSequence.fromList(ListSequence.fromListAndArray(new ArrayList<Integer>(), (Integer) null)).count());
Assert.assertSame(2, ListSequence.fromList(ListSequence.fromListAndArray(new ArrayList<Integer>(), null, null)).count());
Assert.assertSame(3, ListSequence.fromList(ListSequence.fromListAndArray(new ArrayList<Integer>(), null, null)).addSequence(Sequence.fromIterable(Sequence.fromArray(new Integer[]{null}))).count());
final Integer nullvalue = null;
Assert.assertSame(1, ListSequence.fromList(ListSequence.fromListAndArray(new ArrayList<Integer>(), nullvalue)).count());
Assert.assertSame(3, Sequence.fromIterable(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((Integer) null);
return true;
case 3:
this.__CP__ = 4;
this.yield((Integer) null);
return true;
case 4:
this.__CP__ = 1;
this.yield(nullvalue);
return true;
case 0:
this.__CP__ = 2;
break;
default:
break __loop__;
}
} while (true);
return false;
}
};
}
};
}
})).count());
}
}
public void test_nullsViaBackdoor() throws Exception {
if (Sequence.IGNORE_NULL_VALUES) {
List<String> listWithNulls = Arrays.asList("foo", null, "bar");
String[] arr = ListSequence.fromList(listWithNulls).toGenericArray(String.class);
Assert.assertSame(3, arr.length);
Assert.assertEquals("foo", arr[0]);
Assert.assertNull(arr[1]);
Assert.assertEquals("bar", arr[2]);
List<String> dlist = ListSequence.fromList(listWithNulls).distinct().toListSequence();
Assert.assertSame(2, ListSequence.fromList(dlist).count());
this.assertIterableEquals(Arrays.asList("foo", "bar"), dlist);
} else {
List<String> listWithNulls = Arrays.asList("foo", null, "bar");
String[] arr = ListSequence.fromList(listWithNulls).toGenericArray(String.class);
Assert.assertSame(3, arr.length);
Assert.assertEquals("foo", arr[0]);
Assert.assertNull(arr[1]);
Assert.assertEquals("bar", arr[2]);
List<String> dlist = ListSequence.fromList(listWithNulls).distinct().toListSequence();
Assert.assertSame(3, ListSequence.fromList(dlist).count());
this.assertIterableEquals(Arrays.asList("foo", null, "bar"), dlist);
}
}
private void assertEmptyList(List<Integer> emptyList) {
this.assertIterableEquals(this.expectEmpty(), emptyList);
ListSequence.fromList(emptyList).removeElement(null);
this.assertIterableEquals(this.expectEmpty(), emptyList);
ListSequence.fromList(emptyList).addElement(null);
this.assertIterableEquals(this.expectEmpty(), emptyList);
ListSequence.fromList(emptyList).addSequence(Sequence.fromIterable(this.input5()));
this.assertIterableEquals(this.expect5(), emptyList);
}
}