/* * Copyright 2015 Goldman Sachs. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.gs.collections.impl.list.primitive; import java.util.NoSuchElementException; import com.gs.collections.api.LazyIntIterable; import com.gs.collections.api.iterator.IntIterator; import com.gs.collections.impl.bag.mutable.primitive.IntHashBag; import com.gs.collections.impl.block.factory.primitive.IntPredicates; import com.gs.collections.impl.factory.primitive.BooleanLists; import com.gs.collections.impl.factory.primitive.ByteLists; import com.gs.collections.impl.factory.primitive.CharLists; import com.gs.collections.impl.factory.primitive.DoubleLists; import com.gs.collections.impl.factory.primitive.FloatLists; import com.gs.collections.impl.factory.primitive.IntLists; import com.gs.collections.impl.factory.primitive.LongLists; import com.gs.collections.impl.factory.primitive.ShortLists; import com.gs.collections.impl.list.mutable.FastList; import com.gs.collections.impl.list.mutable.primitive.IntArrayList; import com.gs.collections.impl.math.IntegerSum; import com.gs.collections.impl.math.MutableInteger; import com.gs.collections.impl.set.mutable.primitive.IntHashSet; import com.gs.collections.impl.test.Verify; import org.junit.Assert; import org.junit.Test; public class IntIntervalTest { private final IntInterval intInterval = IntInterval.oneTo(3); @Test public void fromAndToAndBy() { IntInterval interval = IntInterval.from(1); IntInterval interval2 = interval.to(10); IntInterval interval3 = interval2.by(2); Verify.assertEqualsAndHashCode(interval, IntInterval.fromTo(1, 1)); Verify.assertEqualsAndHashCode(interval2, IntInterval.fromTo(1, 10)); Verify.assertEqualsAndHashCode(interval3, IntInterval.fromToBy(1, 10, 2)); } @Test(expected = IllegalArgumentException.class) public void fromToBy_throws_step_size_zero() { IntInterval.fromToBy(0, 0, 0); } @Test(expected = IllegalArgumentException.class) public void oneToBy_throws_step_size_zero() { IntInterval.oneToBy(1, 0); } @Test(expected = IllegalArgumentException.class) public void zeroToBy_throws_step_size_zero() { IntInterval.zeroToBy(0, 0); } @Test public void equalsAndHashCode() { IntInterval interval1 = IntInterval.oneTo(5); IntInterval interval2 = IntInterval.oneTo(5); IntInterval interval3 = IntInterval.zeroTo(5); Verify.assertPostSerializedEqualsAndHashCode(interval1); Verify.assertEqualsAndHashCode(interval1, interval2); Assert.assertNotEquals(interval1, interval3); Assert.assertNotEquals(interval3, interval1); Verify.assertEqualsAndHashCode(IntInterval.fromToBy(1, 5, 2), IntInterval.fromToBy(1, 6, 2)); Verify.assertEqualsAndHashCode(IntArrayList.newListWith(1, 2, 3), IntInterval.fromTo(1, 3)); Verify.assertEqualsAndHashCode(IntArrayList.newListWith(3, 2, 1), IntInterval.fromTo(3, 1)); Assert.assertNotEquals(IntArrayList.newListWith(1, 2, 3, 4), IntInterval.fromTo(1, 3)); Assert.assertNotEquals(IntArrayList.newListWith(1, 2, 4), IntInterval.fromTo(1, 3)); Assert.assertNotEquals(IntArrayList.newListWith(3, 2, 0), IntInterval.fromTo(3, 1)); Verify.assertEqualsAndHashCode(IntArrayList.newListWith(-1, -2, -3), IntInterval.fromTo(-1, -3)); } @Test public void sumIntInterval() { Assert.assertEquals(15, (int) IntInterval.oneTo(5).sum()); } @Test public void maxIntInterval() { int value = IntInterval.oneTo(5).max(); Assert.assertEquals(5, value); } @Test public void iterator() { IntIterator iterator = this.intInterval.intIterator(); Assert.assertTrue(iterator.hasNext()); Assert.assertEquals(1L, iterator.next()); Assert.assertTrue(iterator.hasNext()); Assert.assertEquals(2L, iterator.next()); Assert.assertTrue(iterator.hasNext()); Assert.assertEquals(3L, iterator.next()); Assert.assertFalse(iterator.hasNext()); } @Test(expected = NoSuchElementException.class) public void iterator_throws() { IntIterator iterator = this.intInterval.intIterator(); while (iterator.hasNext()) { iterator.next(); } iterator.next(); } @Test public void forEach() { long[] sum = new long[1]; this.intInterval.forEach(each -> sum[0] += each); Assert.assertEquals(6L, sum[0]); } @Test public void injectInto() { IntInterval intInterval = IntInterval.oneTo(3); MutableInteger result = intInterval.injectInto(new MutableInteger(0), MutableInteger::add); Assert.assertEquals(new MutableInteger(6), result); } @Test public void injectIntoWithIndex() { IntInterval list1 = this.intInterval; IntInterval list2 = IntInterval.oneTo(3); MutableInteger result = list1.injectIntoWithIndex(new MutableInteger(0), (object, value, index) -> object.add(value * list2.get(index))); Assert.assertEquals(new MutableInteger(14), result); } @Test public void size() { Verify.assertSize(3, this.intInterval); } @Test(expected = UnsupportedOperationException.class) public void subList() { this.intInterval.subList(0, 1); } @Test public void dotProduct() { IntInterval list1 = this.intInterval; IntInterval list2 = IntInterval.oneTo(3); Assert.assertEquals(14, list1.dotProduct(list2)); } @Test(expected = IllegalArgumentException.class) public void dotProduct_throwsOnListsOfDifferentSizes() { IntInterval list1 = this.intInterval; IntInterval list2 = IntInterval.oneTo(4); list1.dotProduct(list2); } @Test public void empty() { Assert.assertTrue(this.intInterval.notEmpty()); Verify.assertNotEmpty(this.intInterval); } @Test public void count() { Assert.assertEquals(2L, IntInterval.zeroTo(2).count(IntPredicates.greaterThan(0))); } @Test public void anySatisfy() { Assert.assertTrue(IntInterval.fromTo(-1, 2).anySatisfy(IntPredicates.greaterThan(0))); Assert.assertFalse(IntInterval.oneTo(2).anySatisfy(IntPredicates.equal(0))); } @Test public void allSatisfy() { Assert.assertFalse(IntInterval.zeroTo(2).allSatisfy(IntPredicates.greaterThan(0))); Assert.assertTrue(IntInterval.oneTo(3).allSatisfy(IntPredicates.greaterThan(0))); } @Test public void noneSatisfy() { Assert.assertFalse(IntInterval.zeroTo(2).noneSatisfy(IntPredicates.isEven())); Assert.assertTrue(IntInterval.evensFromTo(2, 10).noneSatisfy(IntPredicates.isOdd())); } @Test public void select() { Verify.assertSize(3, this.intInterval.select(IntPredicates.lessThan(4))); Verify.assertSize(2, this.intInterval.select(IntPredicates.lessThan(3))); } @Test public void reject() { Verify.assertSize(0, this.intInterval.reject(IntPredicates.lessThan(4))); Verify.assertSize(1, this.intInterval.reject(IntPredicates.lessThan(3))); } @Test public void detectIfNone() { Assert.assertEquals(1L, this.intInterval.detectIfNone(IntPredicates.lessThan(4), 0)); Assert.assertEquals(0L, this.intInterval.detectIfNone(IntPredicates.greaterThan(3), 0)); } @Test public void collect() { Assert.assertEquals(FastList.newListWith(0, 1, 2), this.intInterval.collect(parameter -> parameter - 1).toList()); } @Test public void lazyCollectPrimitives() { Assert.assertEquals(BooleanLists.immutable.of(false, true, false), IntInterval.oneTo(3).asLazy().collectBoolean(e -> e % 2 == 0).toList()); Assert.assertEquals(CharLists.immutable.of((char) 2, (char) 3, (char) 4), IntInterval.oneTo(3).asLazy().collectChar(e -> (char) (e + 1)).toList()); Assert.assertEquals(ByteLists.immutable.of((byte) 2, (byte) 3, (byte) 4), IntInterval.oneTo(3).asLazy().collectByte(e -> (byte) (e + 1)).toList()); Assert.assertEquals(ShortLists.immutable.of((short) 2, (short) 3, (short) 4), IntInterval.oneTo(3).asLazy().collectShort(e -> (short) (e + 1)).toList()); Assert.assertEquals(IntLists.immutable.of(2, 3, 4), IntInterval.oneTo(3).asLazy().collectInt(e -> e + 1).toList()); Assert.assertEquals(FloatLists.immutable.of(2.0f, 3.0f, 4.0f), IntInterval.oneTo(3).asLazy().collectFloat(e -> (float) (e + 1)).toList()); Assert.assertEquals(LongLists.immutable.of(2L, 3L, 4L), IntInterval.oneTo(3).asLazy().collectLong(e -> (long) (e + 1)).toList()); Assert.assertEquals(DoubleLists.immutable.of(2.0, 3.0, 4.0), IntInterval.oneTo(3).asLazy().collectDouble(e -> (double) (e + 1)).toList()); } @Test public void binarySearch() { IntInterval interval1 = IntInterval.oneTo(3); Assert.assertEquals(-1, interval1.binarySearch(-1)); Assert.assertEquals(-1, interval1.binarySearch(0)); Assert.assertEquals(0, interval1.binarySearch(1)); Assert.assertEquals(1, interval1.binarySearch(2)); Assert.assertEquals(2, interval1.binarySearch(3)); Assert.assertEquals(-4, interval1.binarySearch(4)); Assert.assertEquals(-4, interval1.binarySearch(5)); IntInterval interval2 = IntInterval.fromTo(7, 17).by(3); Assert.assertEquals(0, interval2.binarySearch(7)); Assert.assertEquals(1, interval2.binarySearch(10)); Assert.assertEquals(2, interval2.binarySearch(13)); Assert.assertEquals(3, interval2.binarySearch(16)); Assert.assertEquals(-1, interval2.binarySearch(6)); Assert.assertEquals(-2, interval2.binarySearch(8)); Assert.assertEquals(-2, interval2.binarySearch(9)); Assert.assertEquals(-3, interval2.binarySearch(12)); Assert.assertEquals(-4, interval2.binarySearch(15)); Assert.assertEquals(-5, interval2.binarySearch(17)); Assert.assertEquals(-5, interval2.binarySearch(19)); IntInterval interval3 = IntInterval.fromTo(-21, -11).by(5); Assert.assertEquals(-1, interval3.binarySearch(-22)); Assert.assertEquals(0, interval3.binarySearch(-21)); Assert.assertEquals(-2, interval3.binarySearch(-17)); Assert.assertEquals(1, interval3.binarySearch(-16)); Assert.assertEquals(-3, interval3.binarySearch(-15)); Assert.assertEquals(2, interval3.binarySearch(-11)); Assert.assertEquals(-4, interval3.binarySearch(-9)); IntInterval interval4 = IntInterval.fromTo(50, 30).by(-10); Assert.assertEquals(-1, interval4.binarySearch(60)); Assert.assertEquals(0, interval4.binarySearch(50)); Assert.assertEquals(-2, interval4.binarySearch(45)); Assert.assertEquals(1, interval4.binarySearch(40)); Assert.assertEquals(-3, interval4.binarySearch(35)); Assert.assertEquals(2, interval4.binarySearch(30)); Assert.assertEquals(-4, interval4.binarySearch(25)); IntInterval interval5 = IntInterval.fromTo(-30, -50).by(-10); Assert.assertEquals(-1, interval5.binarySearch(-20)); Assert.assertEquals(0, interval5.binarySearch(-30)); Assert.assertEquals(-2, interval5.binarySearch(-35)); Assert.assertEquals(1, interval5.binarySearch(-40)); Assert.assertEquals(-3, interval5.binarySearch(-47)); Assert.assertEquals(2, interval5.binarySearch(-50)); Assert.assertEquals(-4, interval5.binarySearch(-65)); IntInterval interval6 = IntInterval.fromTo(27, -30).by(-9); Assert.assertEquals(-1, interval6.binarySearch(30)); Assert.assertEquals(0, interval6.binarySearch(27)); Assert.assertEquals(-2, interval6.binarySearch(20)); Assert.assertEquals(1, interval6.binarySearch(18)); Assert.assertEquals(-3, interval6.binarySearch(15)); Assert.assertEquals(2, interval6.binarySearch(9)); Assert.assertEquals(-4, interval6.binarySearch(2)); Assert.assertEquals(3, interval6.binarySearch(0)); Assert.assertEquals(-5, interval6.binarySearch(-7)); Assert.assertEquals(4, interval6.binarySearch(-9)); Assert.assertEquals(-6, interval6.binarySearch(-12)); Assert.assertEquals(5, interval6.binarySearch(-18)); Assert.assertEquals(-7, interval6.binarySearch(-23)); Assert.assertEquals(6, interval6.binarySearch(-27)); Assert.assertEquals(-8, interval6.binarySearch(-28)); Assert.assertEquals(-8, interval6.binarySearch(-30)); IntInterval interval7 = IntInterval.fromTo(-1, 1).by(1); Assert.assertEquals(-1, interval7.binarySearch(-2)); Assert.assertEquals(0, interval7.binarySearch(-1)); Assert.assertEquals(1, interval7.binarySearch(0)); Assert.assertEquals(2, interval7.binarySearch(1)); Assert.assertEquals(-4, interval7.binarySearch(2)); } @Test public void max() { Assert.assertEquals(9, IntInterval.oneTo(9).max()); } @Test public void min() { Assert.assertEquals(1, IntInterval.oneTo(9).min()); } @Test public void minIfEmpty() { Assert.assertEquals(1, IntInterval.oneTo(9).minIfEmpty(0)); } @Test public void maxIfEmpty() { Assert.assertEquals(9, IntInterval.oneTo(9).maxIfEmpty(0)); } @Test public void sum() { Assert.assertEquals(10L, IntInterval.oneTo(4).sum()); } @Test public void average() { Assert.assertEquals(2.5, IntInterval.oneTo(4).average(), 0.0); } @Test public void median() { Assert.assertEquals(2.5, IntInterval.oneTo(4).median(), 0.0); Assert.assertEquals(3.0, IntInterval.oneTo(5).median(), 0.0); } @Test public void toArray() { Assert.assertArrayEquals(new int[]{1, 2, 3, 4}, IntInterval.oneTo(4).toArray()); } @Test public void toList() { Assert.assertEquals(IntArrayList.newListWith(1, 2, 3, 4), IntInterval.oneTo(4).toList()); } @Test public void toSortedList() { Assert.assertEquals(IntArrayList.newListWith(1, 2, 3, 4), IntInterval.oneTo(4).toReversed().toSortedList()); } @Test public void toSet() { Assert.assertEquals(IntHashSet.newSetWith(1, 2, 3, 4), IntInterval.oneTo(4).toSet()); } @Test public void toBag() { Assert.assertEquals(IntHashBag.newBagWith(1, 2, 3, 4), IntInterval.oneTo(4).toBag()); } @Test public void asLazy() { Assert.assertEquals(IntInterval.oneTo(5).toSet(), IntInterval.oneTo(5).asLazy().toSet()); Verify.assertInstanceOf(LazyIntIterable.class, IntInterval.oneTo(5).asLazy()); } @Test public void toSortedArray() { Assert.assertArrayEquals(new int[]{1, 2, 3, 4}, IntInterval.fromTo(4, 1).toSortedArray()); } @Test public void testEquals() { IntInterval list1 = IntInterval.oneTo(4); IntInterval list2 = IntInterval.oneTo(4); IntInterval list3 = IntInterval.fromTo(4, 1); IntInterval list4 = IntInterval.fromTo(5, 8); IntInterval list5 = IntInterval.fromTo(5, 7); Verify.assertEqualsAndHashCode(list1, list2); Verify.assertPostSerializedEqualsAndHashCode(list1); Assert.assertNotEquals(list1, list3); Assert.assertNotEquals(list1, list4); Assert.assertNotEquals(list1, list5); } @Test public void testHashCode() { Assert.assertEquals(FastList.newListWith(1, 2, 3).hashCode(), IntInterval.oneTo(3).hashCode()); } @Test public void testToString() { Assert.assertEquals("[1, 2, 3]", this.intInterval.toString()); } @Test public void makeString() { Assert.assertEquals("1, 2, 3", this.intInterval.makeString()); Assert.assertEquals("1/2/3", this.intInterval.makeString("/")); Assert.assertEquals(this.intInterval.toString(), this.intInterval.makeString("[", ", ", "]")); } @Test public void appendString() { StringBuilder appendable2 = new StringBuilder(); this.intInterval.appendString(appendable2); Assert.assertEquals("1, 2, 3", appendable2.toString()); StringBuilder appendable3 = new StringBuilder(); this.intInterval.appendString(appendable3, "/"); Assert.assertEquals("1/2/3", appendable3.toString()); StringBuilder appendable4 = new StringBuilder(); this.intInterval.appendString(appendable4, "[", ", ", "]"); Assert.assertEquals(this.intInterval.toString(), appendable4.toString()); } @Test public void toReversed() { IntInterval forward = IntInterval.oneTo(5); IntInterval reverse = forward.toReversed(); Assert.assertEquals(IntArrayList.newListWith(5, 4, 3, 2, 1), reverse); } @Test public void evens() { IntInterval interval = IntInterval.evensFromTo(0, 10); int[] evens = {0, 2, 4, 6, 8, 10}; int[] odds = {1, 3, 5, 7, 9}; this.assertIntIntervalContainsAll(interval, evens); this.denyIntIntervalContainsAny(interval, odds); Assert.assertEquals(6, interval.size()); IntInterval reverseIntInterval = IntInterval.evensFromTo(10, 0); this.assertIntIntervalContainsAll(reverseIntInterval, evens); this.denyIntIntervalContainsAny(reverseIntInterval, odds); Assert.assertEquals(6, reverseIntInterval.size()); IntInterval negativeIntInterval = IntInterval.evensFromTo(-5, 5); int[] negativeEvens = {-4, -2, 0, 2, 4}; int[] negativeOdds = {-3, -1, 1, 3}; this.assertIntIntervalContainsAll(negativeIntInterval, negativeEvens); this.denyIntIntervalContainsAny(negativeIntInterval, negativeOdds); Assert.assertEquals(5, negativeIntInterval.size()); IntInterval reverseNegativeIntInterval = IntInterval.evensFromTo(5, -5); this.assertIntIntervalContainsAll(reverseNegativeIntInterval, negativeEvens); this.denyIntIntervalContainsAny(reverseNegativeIntInterval, negativeOdds); Assert.assertEquals(5, reverseNegativeIntInterval.size()); } private void assertIntIntervalContainsAll(IntInterval interval, int[] expectedValues) { for (int value : expectedValues) { Assert.assertTrue(interval.contains(value)); } } private void denyIntIntervalContainsAny(IntInterval interval, int[] expectedValues) { for (int value : expectedValues) { Assert.assertFalse(interval.contains(value)); } } @Test public void odds() { IntInterval interval1 = IntInterval.oddsFromTo(0, 10); Assert.assertTrue(interval1.containsAll(1, 3, 5, 7, 9)); Assert.assertTrue(interval1.containsNone(2, 4, 6, 8)); Assert.assertEquals(5, interval1.size()); IntInterval reverseIntInterval1 = IntInterval.oddsFromTo(10, 0); Assert.assertTrue(reverseIntInterval1.containsAll(1, 3, 5, 7, 9)); Assert.assertTrue(reverseIntInterval1.containsNone(0, 2, 4, 6, 8, 10)); Assert.assertEquals(5, reverseIntInterval1.size()); IntInterval interval2 = IntInterval.oddsFromTo(-5, 5); Assert.assertTrue(interval2.containsAll(-5, -3, -1, 1, 3, 5)); Assert.assertTrue(interval2.containsNone(-4, -2, 0, 2, 4)); Assert.assertEquals(6, interval2.size()); IntInterval reverseIntInterval2 = IntInterval.oddsFromTo(5, -5); Assert.assertTrue(reverseIntInterval2.containsAll(-5, -3, -1, 1, 3, 5)); Assert.assertTrue(reverseIntInterval2.containsNone(-4, -2, 0, 2, 4)); Assert.assertEquals(6, reverseIntInterval2.size()); } @Test public void intervalSize() { Assert.assertEquals(100, IntInterval.fromTo(1, 100).size()); Assert.assertEquals(50, IntInterval.fromToBy(1, 100, 2).size()); Assert.assertEquals(34, IntInterval.fromToBy(1, 100, 3).size()); Assert.assertEquals(25, IntInterval.fromToBy(1, 100, 4).size()); Assert.assertEquals(20, IntInterval.fromToBy(1, 100, 5).size()); Assert.assertEquals(17, IntInterval.fromToBy(1, 100, 6).size()); Assert.assertEquals(15, IntInterval.fromToBy(1, 100, 7).size()); Assert.assertEquals(13, IntInterval.fromToBy(1, 100, 8).size()); Assert.assertEquals(12, IntInterval.fromToBy(1, 100, 9).size()); Assert.assertEquals(10, IntInterval.fromToBy(1, 100, 10).size()); Assert.assertEquals(11, IntInterval.fromTo(0, 10).size()); Assert.assertEquals(1, IntInterval.zero().size()); Assert.assertEquals(11, IntInterval.fromTo(0, -10).size()); Assert.assertEquals(3, IntInterval.evensFromTo(2, -2).size()); Assert.assertEquals(2, IntInterval.oddsFromTo(2, -2).size()); } @Test public void contains() { Assert.assertTrue(IntInterval.zero().contains(0)); Assert.assertTrue(IntInterval.oneTo(5).containsAll(1, 5)); Assert.assertTrue(IntInterval.oneTo(5).containsNone(6, 7)); Assert.assertFalse(IntInterval.oneTo(5).containsAll(1, 6)); Assert.assertFalse(IntInterval.oneTo(5).containsNone(1, 6)); Assert.assertFalse(IntInterval.oneTo(5).contains(0)); Assert.assertTrue(IntInterval.fromTo(-1, -5).containsAll(-1, -5)); Assert.assertFalse(IntInterval.fromTo(-1, -5).contains(1)); Assert.assertTrue(IntInterval.zero().contains(Integer.valueOf(0))); Assert.assertFalse(IntInterval.oneTo(5).contains(Integer.valueOf(0))); Assert.assertFalse(IntInterval.fromTo(-1, -5).contains(Integer.valueOf(1))); } @Test public void intervalIterator() { IntInterval zero = IntInterval.zero(); IntIterator zeroIterator = zero.intIterator(); Assert.assertTrue(zeroIterator.hasNext()); Assert.assertEquals(0, zeroIterator.next()); Assert.assertFalse(zeroIterator.hasNext()); IntInterval oneToFive = IntInterval.oneTo(5); IntIterator oneToFiveIterator = oneToFive.intIterator(); for (int i = 1; i < 6; i++) { Assert.assertTrue(oneToFiveIterator.hasNext()); Assert.assertEquals(i, oneToFiveIterator.next()); } Verify.assertThrows(NoSuchElementException.class, (Runnable) oneToFiveIterator::next); IntInterval threeToNegativeThree = IntInterval.fromTo(3, -3); IntIterator threeToNegativeThreeIterator = threeToNegativeThree.intIterator(); for (int i = 3; i > -4; i--) { Assert.assertTrue(threeToNegativeThreeIterator.hasNext()); Assert.assertEquals(i, threeToNegativeThreeIterator.next()); } Verify.assertThrows(NoSuchElementException.class, (Runnable) threeToNegativeThreeIterator::next); } @Test public void forEachWithIndex() { IntegerSum sum = new IntegerSum(0); IntInterval.oneTo(5).forEachWithIndex((each, index) -> sum.add(each + index)); Assert.assertEquals(25, sum.getIntSum()); IntegerSum zeroSum = new IntegerSum(0); IntInterval.fromTo(0, -4).forEachWithIndex((each, index) -> zeroSum.add(each + index)); Assert.assertEquals(0, zeroSum.getIntSum()); } @Test public void getFirst() { Assert.assertEquals(10, IntInterval.fromTo(10, -10).by(-5).getFirst()); Assert.assertEquals(-10, IntInterval.fromTo(-10, 10).by(5).getFirst()); Assert.assertEquals(0, IntInterval.zero().getFirst()); } @Test public void getLast() { Assert.assertEquals(-10, IntInterval.fromTo(10, -10).by(-5).getLast()); Assert.assertEquals(-10, IntInterval.fromTo(10, -12).by(-5).getLast()); Assert.assertEquals(10, IntInterval.fromTo(-10, 10).by(5).getLast()); Assert.assertEquals(10, IntInterval.fromTo(-10, 12).by(5).getLast()); Assert.assertEquals(0, IntInterval.zero().getLast()); } @Test public void indexOf() { IntInterval interval = IntInterval.fromTo(-10, 12).by(5); Assert.assertEquals(0, interval.indexOf(-10)); Assert.assertEquals(1, interval.indexOf(-5)); Assert.assertEquals(2, interval.indexOf(0)); Assert.assertEquals(3, interval.indexOf(5)); Assert.assertEquals(4, interval.indexOf(10)); Assert.assertEquals(-1, interval.indexOf(-15)); Assert.assertEquals(-1, interval.indexOf(-11)); Assert.assertEquals(-1, interval.indexOf(-9)); Assert.assertEquals(-1, interval.indexOf(11)); Assert.assertEquals(-1, interval.indexOf(15)); IntInterval backwardsIntInterval = IntInterval.fromTo(10, -12).by(-5); Assert.assertEquals(0, backwardsIntInterval.indexOf(10)); Assert.assertEquals(1, backwardsIntInterval.indexOf(5)); Assert.assertEquals(2, backwardsIntInterval.indexOf(0)); Assert.assertEquals(3, backwardsIntInterval.indexOf(-5)); Assert.assertEquals(4, backwardsIntInterval.indexOf(-10)); Assert.assertEquals(-1, backwardsIntInterval.indexOf(15)); Assert.assertEquals(-1, backwardsIntInterval.indexOf(11)); Assert.assertEquals(-1, backwardsIntInterval.indexOf(9)); Assert.assertEquals(-1, backwardsIntInterval.indexOf(-11)); Assert.assertEquals(-1, backwardsIntInterval.indexOf(-15)); } @Test public void lastIndexOf() { IntInterval interval = IntInterval.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)); IntInterval backwardsIntInterval = IntInterval.fromTo(10, -12).by(-5); Assert.assertEquals(0, backwardsIntInterval.lastIndexOf(10)); Assert.assertEquals(1, backwardsIntInterval.lastIndexOf(5)); Assert.assertEquals(2, backwardsIntInterval.lastIndexOf(0)); Assert.assertEquals(3, backwardsIntInterval.lastIndexOf(-5)); Assert.assertEquals(4, backwardsIntInterval.lastIndexOf(-10)); Assert.assertEquals(-1, backwardsIntInterval.lastIndexOf(15)); Assert.assertEquals(-1, backwardsIntInterval.lastIndexOf(11)); Assert.assertEquals(-1, backwardsIntInterval.lastIndexOf(9)); Assert.assertEquals(-1, backwardsIntInterval.lastIndexOf(-11)); Assert.assertEquals(-1, backwardsIntInterval.lastIndexOf(-15)); } @Test public void get() { IntInterval interval = IntInterval.fromTo(-10, 12).by(5); Assert.assertEquals(-10, interval.get(0)); Assert.assertEquals(-5, interval.get(1)); Assert.assertEquals(0, interval.get(2)); Assert.assertEquals(5, interval.get(3)); Assert.assertEquals(10, interval.get(4)); Verify.assertThrows(IndexOutOfBoundsException.class, () -> interval.get(-1)); Verify.assertThrows(IndexOutOfBoundsException.class, () -> interval.get(5)); } @Test public void containsAll() { Assert.assertTrue(IntInterval.fromTo(1, 3).containsAll(1, 2, 3)); Assert.assertFalse(IntInterval.fromTo(1, 3).containsAll(1, 2, 4)); } }