/** * Creates a new data set that contains a sequence of numbers. The data set will be created in parallel, * so there is no guarantee about the oder of the elements. * * @param from The number to start at (inclusive). * @param to The number to stop at (inclusive). * @return A DataSet, containing all number in the {@code [from, to]} interval. */ public DataSource<Long> generateSequence(long from, long to) { return fromParallelCollection(new NumberSequenceIterator(from, to), BasicTypeInfo.LONG_TYPE_INFO); }
return new NumberSequenceIterator[] { new NumberSequenceIterator(current, to) }; for (; i < numWithExtra; i++) { long next = curr + elementsPerSplit + 1; iters[i] = new NumberSequenceIterator(curr, next-1); curr = next; iters[i] = new NumberSequenceIterator(curr, next-1, true); curr = next; new NumberSequenceIterator(current, current + elementsPerSplit), new NumberSequenceIterator(current + elementsPerSplit, to) };
return new NumberSequenceIterator[] { new NumberSequenceIterator(current, to) }; for (; i < numWithExtra; i++) { long next = curr + elementsPerSplit + 1; iters[i] = new NumberSequenceIterator(curr, next-1); curr = next; iters[i] = new NumberSequenceIterator(curr, next-1, true); curr = next; new NumberSequenceIterator(current, current + elementsPerSplit), new NumberSequenceIterator(current + elementsPerSplit, to) };
@Test public void testSplitRegular() { testSplitting(new NumberSequenceIterator(0, 10), 2); testSplitting(new NumberSequenceIterator(100, 100000), 7); testSplitting(new NumberSequenceIterator(-100, 0), 5); testSplitting(new NumberSequenceIterator(-100, 100), 3); }
@Test public void testSplittingTooSmallRanges() { testSplitting(new NumberSequenceIterator(0, 0), 2); testSplitting(new NumberSequenceIterator(-5, -5), 2); testSplitting(new NumberSequenceIterator(-5, -4), 3); testSplitting(new NumberSequenceIterator(10, 15), 10); }
@Test public void testSplittingLargeRangesBy2() { testSplitting(new NumberSequenceIterator(0, Long.MAX_VALUE), 2); testSplitting(new NumberSequenceIterator(-1000000000L, Long.MAX_VALUE), 2); testSplitting(new NumberSequenceIterator(Long.MIN_VALUE, Long.MAX_VALUE), 2); }