package jetbrains.mps.internalCollections.test.basicOperations;
/*Generated by MPS */
import jetbrains.mps.internalCollections.test.closures.Util_Test;
import jetbrains.mps.internal.collections.runtime.ISequence;
import jetbrains.mps.internal.collections.runtime.Sequence;
import java.util.Arrays;
import jetbrains.mps.internal.collections.runtime.ISequenceClosure;
import java.util.Iterator;
import jetbrains.mps.baseLanguage.closures.runtime.YieldingIterator;
import junit.framework.Assert;
import java.util.List;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
public class Chunks_Test extends Util_Test {
public void test_chunkMethods() throws Exception {
ISequence<Integer> input = Sequence.fromIterable(this.input10());
this.assertIterableEquals(Arrays.asList(1, 2, 3), input.take(3));
this.assertIterableEquals(Arrays.asList(8, 9, 10), input.skip(7));
this.assertIterableEquals(Arrays.asList(1, 2, 3), input.cut(7));
this.assertIterableEquals(Arrays.asList(8, 9, 10), input.tail(3));
this.assertIterableEquals(Arrays.asList(5, 6, 7), input.page(4, 7));
this.assertIterableEquals(input.skip(3).take(5), input.page(3, 8));
}
public void test_chunkOperations() throws Exception {
Iterable<Integer> input = this.input10();
this.assertIterableEquals(Arrays.asList(1, 2, 3), Sequence.fromIterable(input).take(3));
this.assertIterableEquals(Arrays.asList(8, 9, 10), Sequence.fromIterable(input).skip(7));
this.assertIterableEquals(Arrays.asList(1, 2, 3), Sequence.fromIterable(input).cut(7));
this.assertIterableEquals(Arrays.asList(8, 9, 10), Sequence.fromIterable(input).tail(3));
this.assertIterableEquals(Arrays.asList(5, 6, 7), Sequence.fromIterable(input).page(4, 7));
this.assertIterableEquals(Sequence.fromIterable(input).skip(3).take(5), Sequence.fromIterable(input).page(3, 8));
}
public void test_pageOperationNoSideEffects() throws Exception {
Iterable<Integer> input = this.input10();
int from = 3;
int to = 8;
this.assertIterableEquals(Arrays.asList(5, 6, 7), Sequence.fromIterable(input).page(from = from + 1, to = to - 1));
}
public void test_takeAll() 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._2_i = 0;
case 3:
if (!(_2_i < 100)) {
this.__CP__ = 1;
break;
}
this.__CP__ = 4;
break;
case 5:
_2_i++;
this.__CP__ = 3;
break;
case 6:
this.__CP__ = 5;
this.yield(_2_i);
return true;
case 0:
this.__CP__ = 2;
break;
case 4:
this.__CP__ = 6;
break;
default:
break __loop__;
}
} while (true);
return false;
}
private int _2_i;
};
}
};
}
});
Assert.assertSame(100, Sequence.fromIterable(test).take(Integer.MAX_VALUE).count());
}
public void test_nextWithoutHasNext() throws Exception {
List<Integer> test = ListSequence.fromListAndArray(new ArrayList<Integer>(), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
this.assertIteratorYields(ListSequence.fromList(test).take(3).iterator(), 1, 2, 3);
this.assertIteratorYields(ListSequence.fromList(test).skip(7).iterator(), 8, 9, 10);
this.assertIteratorYields(ListSequence.fromList(test).cut(4).iterator(), 1, 2, 3, 4, 5, 6);
this.assertIteratorYields(ListSequence.fromList(test).tail(5).iterator(), 6, 7, 8, 9, 10);
this.assertIteratorYields(ListSequence.fromList(test).page(4, 7).iterator(), 5, 6, 7);
}
}