@Test public void drop() { Assert.assertEquals(FastList.newListWith(3, 4), Interval.fromTo(1, 4).drop(2)); Verify.assertIterableEmpty(Interval.fromTo(1, 2).drop(3)); Verify.assertThrows(IllegalArgumentException.class, () -> Interval.fromTo(1, 3).drop(-1)); }
@Test public void take() { Assert.assertEquals(FastList.newListWith(1, 2), Interval.fromTo(1, 3).take(2)); Assert.assertEquals(FastList.newListWith(1, 2), Interval.fromTo(1, 2).take(3)); Verify.assertThrows(IllegalArgumentException.class, () -> Interval.fromTo(1, 3).take(-1)); }
@Test public void lastIndexOf() { Interval interval = Interval.fromTo(-10, 12).by(5); Assert.assertEquals(0, interval.lastIndexOf(-10)); Assert.assertEquals(1, interval.lastIndexOf(-5)); Assert.assertEquals(2, interval.lastIndexOf(0)); Assert.assertEquals(3, interval.lastIndexOf(5)); Assert.assertEquals(4, interval.lastIndexOf(10)); Assert.assertEquals(-1, interval.lastIndexOf(-15)); Assert.assertEquals(-1, interval.lastIndexOf(-11)); Assert.assertEquals(-1, interval.lastIndexOf(-9)); Assert.assertEquals(-1, interval.lastIndexOf(11)); Assert.assertEquals(-1, interval.lastIndexOf(15)); Assert.assertEquals(-1, interval.lastIndexOf(new Object())); Interval backwardsInterval = Interval.fromTo(10, -12).by(-5); Assert.assertEquals(0, backwardsInterval.lastIndexOf(10)); Assert.assertEquals(1, backwardsInterval.lastIndexOf(5)); Assert.assertEquals(2, backwardsInterval.lastIndexOf(0)); Assert.assertEquals(3, backwardsInterval.lastIndexOf(-5)); Assert.assertEquals(4, backwardsInterval.lastIndexOf(-10)); Assert.assertEquals(-1, backwardsInterval.lastIndexOf(15)); Assert.assertEquals(-1, backwardsInterval.lastIndexOf(11)); Assert.assertEquals(-1, backwardsInterval.lastIndexOf(9)); Assert.assertEquals(-1, backwardsInterval.lastIndexOf(-11)); Assert.assertEquals(-1, backwardsInterval.lastIndexOf(-15)); }
@Test public void getLast() { Assert.assertEquals(Integer.valueOf(-10), Interval.fromTo(10, -10).by(-5).getLast()); Assert.assertEquals(Integer.valueOf(-10), Interval.fromTo(10, -12).by(-5).getLast()); Assert.assertEquals(Integer.valueOf(10), Interval.fromTo(-10, 10).by(5).getLast()); Assert.assertEquals(Integer.valueOf(10), Interval.fromTo(-10, 12).by(5).getLast()); Assert.assertEquals(Integer.valueOf(0), Interval.zero().getLast()); }
@Test public void fromAndToAndBy() { Interval interval = Interval.from(1); Interval interval2 = interval.to(10); Interval interval3 = interval2.by(2); Verify.assertEqualsAndHashCode(interval, Interval.fromTo(1, 1)); Verify.assertEqualsAndHashCode(interval2, Interval.fromTo(1, 10)); Verify.assertEqualsAndHashCode(interval3, Interval.fromToBy(1, 10, 2)); }
@Test public void product() { Assert.assertEquals(0, Interval.zero().product().intValue()); Assert.assertEquals(0, Interval.fromTo(-1, 1).product().intValue()); Assert.assertEquals(2, Interval.fromTo(-2, -1).product().intValue()); Assert.assertEquals(-6, Interval.fromTo(-3, -1).product().intValue()); Assert.assertEquals(200, Interval.fromToBy(10, 20, 10).product().intValue()); Assert.assertEquals(200, Interval.fromToBy(-10, -20, -10).product().intValue()); Assert.assertEquals(-6000, Interval.fromToBy(-10, -30, -10).product().intValue()); Assert.assertEquals(6000, Interval.fromToBy(30, 10, -10).product().intValue()); Assert.assertEquals(6000, Interval.fromToBy(30, 10, -10).reverseThis().product().intValue()); }
@Test public void iterator() { Interval zero = Interval.zero(); Iterator<Integer> zeroIterator = zero.iterator(); Assert.assertTrue(zeroIterator.hasNext()); Assert.assertEquals(Integer.valueOf(0), zeroIterator.next()); Assert.assertFalse(zeroIterator.hasNext()); Interval oneToFive = Interval.oneTo(5); Iterator<Integer> oneToFiveIterator = oneToFive.iterator(); for (int i = 1; i < 6; i++) { Assert.assertTrue(oneToFiveIterator.hasNext()); Assert.assertEquals(Integer.valueOf(i), oneToFiveIterator.next()); } Verify.assertThrows(NoSuchElementException.class, (Runnable) oneToFiveIterator::next); Interval threeToNegativeThree = Interval.fromTo(3, -3); Iterator<Integer> threeToNegativeThreeIterator = threeToNegativeThree.iterator(); for (int i = 3; i > -4; i--) { Assert.assertTrue(threeToNegativeThreeIterator.hasNext()); Assert.assertEquals(Integer.valueOf(i), threeToNegativeThreeIterator.next()); } Verify.assertThrows( NoSuchElementException.class, (Runnable) threeToNegativeThreeIterator::next); Verify.assertThrows( UnsupportedOperationException.class, () -> Interval.zeroTo(10).iterator().remove()); }
@Test public void contains() { Assert.assertTrue(Interval.zero().contains(0)); Assert.assertTrue(Interval.oneTo(5).containsAll(1, 5)); Assert.assertTrue(Interval.oneTo(5).containsNone(6, 7)); Assert.assertFalse(Interval.oneTo(5).containsAll(1, 6)); Assert.assertFalse(Interval.oneTo(5).containsNone(1, 6)); Assert.assertFalse(Interval.oneTo(5).contains(0)); Assert.assertTrue(Interval.fromTo(-1, -5).containsAll(-1, -5)); Assert.assertFalse(Interval.fromTo(-1, -5).contains(1)); Assert.assertTrue(Interval.zero().contains(Integer.valueOf(0))); Assert.assertFalse(Interval.oneTo(5).contains(Integer.valueOf(0))); Assert.assertFalse(Interval.fromTo(-1, -5).contains(Integer.valueOf(1))); Assert.assertFalse(Interval.zeroTo(5).contains(new Object())); }
@Test public void tap() { MutableList<Integer> tapResult = Lists.mutable.of(); Interval interval = Interval.fromTo(10, -10).by(-5); LazyIterable<Integer> lazyTapIterable = interval.tap(tapResult::add); lazyTapIterable.each(x -> {}); // force evaluation Assert.assertEquals(interval, tapResult); }
@Test public void reject() { Interval interval = Interval.fromTo(10, -10).by(-5); MutableList<Integer> expected = FastList.newListWith(5, -5); Assert.assertEquals( expected, interval.reject(IntegerPredicates.isEven(), FastList.<Integer>newList())); }
@Test public void collect() { Interval interval = Interval.fromTo(10, -10).by(-5); MutableList<String> expected = FastList.newListWith("10", "5", "0", "-5", "-10"); Assert.assertEquals(expected, interval.collect(String::valueOf).toList()); Assert.assertEquals(expected, interval.collect(String::valueOf, FastList.<String>newList())); }
@Test public void run() { IntegerSum sum = new IntegerSum(0); Interval.oneTo(5).run(() -> sum.add(1)); Assert.assertEquals(5, sum.getIntSum()); IntegerSum sum2 = new IntegerSum(0); Interval.fromTo(5, 1).run(() -> sum2.add(1)); Assert.assertEquals(5, sum2.getIntSum()); }
@Test public void size() { Assert.assertEquals(100, Interval.fromTo(1, 100).size()); Assert.assertEquals(50, Interval.fromToBy(1, 100, 2).size()); Assert.assertEquals(34, Interval.fromToBy(1, 100, 3).size()); Assert.assertEquals(25, Interval.fromToBy(1, 100, 4).size()); Assert.assertEquals(20, Interval.fromToBy(1, 100, 5).size()); Assert.assertEquals(17, Interval.fromToBy(1, 100, 6).size()); Assert.assertEquals(15, Interval.fromToBy(1, 100, 7).size()); Assert.assertEquals(13, Interval.fromToBy(1, 100, 8).size()); Assert.assertEquals(12, Interval.fromToBy(1, 100, 9).size()); Assert.assertEquals(10, Interval.fromToBy(1, 100, 10).size()); Assert.assertEquals(11, Interval.fromTo(0, 10).size()); Assert.assertEquals(1, Interval.zero().size()); Assert.assertEquals(11, Interval.fromTo(0, -10).size()); Assert.assertEquals(3, Interval.evensFromTo(2, -2).size()); Assert.assertEquals(2, Interval.oddsFromTo(2, -2).size()); }
@Test public void runWithExecutorInReverse() throws InterruptedException { MutableList<String> result = Lists.mutable.of(); ExecutorService service = Executors.newSingleThreadExecutor(); Interval.fromTo(3, 1).run(() -> result.add(null), service); service.shutdown(); service.awaitTermination(20, TimeUnit.SECONDS); Assert.assertEquals(FastList.<String>newListWith(null, null, null), result); }
@Test public void forEachWith() { IntegerSum sum = new IntegerSum(0); Interval.oneTo(5) .forEachWith((Integer each, Integer parameter) -> sum.add(each + parameter), 0); Assert.assertEquals(15, sum.getIntSum()); IntegerSum sum2 = new IntegerSum(0); Interval.fromTo(5, 1) .forEachWith((Integer each, Integer parameter) -> sum2.add(each + parameter), 0); Assert.assertEquals(15, sum2.getIntSum()); }
@Test public void get() { Interval interval = Interval.fromTo(-10, 12).by(5); Assert.assertEquals(Integer.valueOf(-10), interval.get(0)); Assert.assertEquals(Integer.valueOf(-5), interval.get(1)); Assert.assertEquals(Integer.valueOf(0), interval.get(2)); Assert.assertEquals(Integer.valueOf(5), interval.get(3)); Assert.assertEquals(Integer.valueOf(10), interval.get(4)); Verify.assertThrows(IndexOutOfBoundsException.class, () -> interval.get(-1)); Verify.assertThrows(IndexOutOfBoundsException.class, () -> interval.get(5)); }
@Test public void factorial() { Verify.assertThrows(IllegalStateException.class, () -> Interval.fromTo(-1, -5).factorial()); Assert.assertEquals(1, Interval.zero().factorial().intValue()); Assert.assertEquals(1, Interval.oneTo(1).factorial().intValue()); Assert.assertEquals(6, Interval.oneTo(3).factorial().intValue()); Assert.assertEquals(2432902008176640000L, Interval.oneTo(20).factorial().longValue()); Assert.assertEquals(new BigInteger("51090942171709440000"), Interval.oneTo(21).factorial()); Assert.assertEquals( new BigInteger("1405006117752879898543142606244511569936384000000000"), Interval.oneTo(42).factorial()); }
@Test public void forEachWith_with_start_end() { Interval interval = Interval.fromTo(-10, 12).by(5); MutableList<Integer> forwardResult = Lists.mutable.of(); interval.forEachWithIndex(new AddParametersProcedure(forwardResult), 1, 3); Assert.assertEquals(FastList.newListWith(-4, 2, 8), forwardResult); MutableList<Integer> backwardsResult = Lists.mutable.of(); interval.forEachWithIndex(new AddParametersProcedure(backwardsResult), 3, 1); Assert.assertEquals(FastList.newListWith(8, 2, -4), backwardsResult); }
@Test public void forEachWithIndex() { IntegerSum sum = new IntegerSum(0); Interval.oneTo(5) .forEachWithIndex((ObjectIntProcedure<Integer>) (each, index) -> sum.add(each + index)); Assert.assertEquals(25, sum.getIntSum()); IntegerSum zeroSum = new IntegerSum(0); Interval.fromTo(0, -4) .forEachWithIndex((ObjectIntProcedure<Integer>) (each, index) -> zeroSum.add(each + index)); Assert.assertEquals(0, zeroSum.getIntSum()); Verify.assertThrows( IndexOutOfBoundsException.class, () -> Interval.zeroTo(10).forEachWithIndex(null, -1, 10)); }
@Test public void forEach_with_start_end() { Interval interval = Interval.fromTo(-10, 12).by(5); MutableList<Integer> forwardResult = Lists.mutable.of(); interval.forEach(CollectionAddProcedure.on(forwardResult), 1, 3); Assert.assertEquals(FastList.newListWith(-5, 0, 5), forwardResult); MutableList<Integer> backwardsResult = Lists.mutable.of(); interval.forEach(CollectionAddProcedure.on(backwardsResult), 3, 1); Assert.assertEquals(FastList.newListWith(5, 0, -5), backwardsResult); Verify.assertThrows(IndexOutOfBoundsException.class, () -> interval.forEach(null, -1, 3)); }
@Test public void equalsAndHashCode() { Interval interval1 = Interval.oneTo(5); Interval interval2 = Interval.oneTo(5); Interval interval3 = Interval.zeroTo(5); Verify.assertPostSerializedEqualsAndHashCode(interval1); Verify.assertEqualsAndHashCode(interval1, interval2); Assert.assertNotEquals(interval1, interval3); Assert.assertNotEquals(interval3, interval1); Verify.assertEqualsAndHashCode(Interval.fromToBy(1, 5, 2), Interval.fromToBy(1, 6, 2)); Verify.assertEqualsAndHashCode(FastList.newListWith(1, 2, 3), Interval.fromTo(1, 3)); Verify.assertEqualsAndHashCode(FastList.newListWith(3, 2, 1), Interval.fromTo(3, 1)); Assert.assertNotEquals(FastList.newListWith(1, 2, 3, 4), Interval.fromTo(1, 3)); Assert.assertNotEquals(FastList.newListWith(1, 2, 4), Interval.fromTo(1, 3)); Assert.assertNotEquals(FastList.newListWith(3, 2, 0), Interval.fromTo(3, 1)); Verify.assertEqualsAndHashCode(FastList.newListWith(-1, -2, -3), Interval.fromTo(-1, -3)); }
@Test(expected = UnsupportedOperationException.class) public void add_at_index() { Interval.fromTo(1, 3).add(0, 4); }
@Test(expected = UnsupportedOperationException.class) public void set() { Interval.fromTo(1, 3).set(0, 0); }
@Test(expected = UnsupportedOperationException.class) public void clear() { Interval.fromTo(1, 3).clear(); }
@Test(expected = UnsupportedOperationException.class) public void retainAll() { Interval.fromTo(1, 3).retainAll(FastList.newListWith(4, 5, 6)); }
@Test(expected = UnsupportedOperationException.class) public void addAll_at_index() { Interval.fromTo(1, 3).addAll(0, FastList.newListWith(4, 5, 6)); }
@Test(expected = UnsupportedOperationException.class) public void remove_at_index() { Interval.fromTo(1, 3).remove(0); }
@Test(expected = UnsupportedOperationException.class) public void remove() { Interval.fromTo(1, 3).remove(Integer.valueOf(4)); }
@Test public void containsAll() { Assert.assertTrue(Interval.fromTo(1, 3).containsAll(FastList.newListWith(1, 2, 3))); Assert.assertFalse(Interval.fromTo(1, 3).containsAll(FastList.newListWith(1, 2, 4))); }
@Test public void subList() { Interval interval = Interval.fromTo(1, 5); Assert.assertEquals(FastList.newListWith(2, 3), interval.subList(1, 3)); }