package org.quaere; import org.junit.Test; import java.util.Iterator; import java.math.BigInteger; import java.math.BigDecimal; import junit.framework.Assert; public class NumberRangeTest { @Test public void canCreateByteRange() { NumberRange<Byte> r = new NumberRange<Byte>((byte) 0, (byte) 10); Iterator<Byte> riter = r.iterator(); for (Byte i = 0; i <= 10; i++) Assert.assertEquals(i, riter.next()); } @Test public void canCreateShortRange() { NumberRange<Short> r = new NumberRange<Short>((short) 0, (short) 10); Iterator<Short> riter = r.iterator(); for (Short i = 0; i <= 10; i++) Assert.assertEquals(i, riter.next()); } @Test public void canCreateIntegerRange() { NumberRange<Integer> r = new NumberRange<Integer>(0, 10); Iterator<Integer> riter = r.iterator(); for (Integer i = 0; i <= 10; i++) Assert.assertEquals(i, riter.next()); } @Test public void canCreateLongRange() { NumberRange<Long> r = new NumberRange<Long>(0L, 10L); Iterator<Long> riter = r.iterator(); for (Long i = 0L; i <= 10L; i++) Assert.assertEquals(i, riter.next()); } @Test public void canCreateFloatRange() { NumberRange<Float> r = new NumberRange<Float>(0.4F, 10F); Iterator<Float> riter = r.iterator(); for (Float i = 0.4F; i <= 10L; i++) Assert.assertEquals(i, riter.next()); } @Test public void canCreateDoubleRange() { NumberRange<Double> r = new NumberRange<Double>(0.4D, 10D); Iterator<Double> riter = r.iterator(); for (Double i = 0.4D; i <= 10D; i++) Assert.assertEquals(i, riter.next()); } @Test public void canCreateBigIntegerRange() { NumberRange<BigInteger> r = new NumberRange<BigInteger>(BigInteger.ZERO, BigInteger.TEN); Iterator<BigInteger> riter = r.iterator(); for (Long i = 0L; i <= 10L; i++) { Assert.assertEquals(BigInteger.valueOf(i), riter.next()); } } @Test public void canCreateBigDecimalRange() { NumberRange<BigDecimal> r = new NumberRange<BigDecimal>(BigDecimal.valueOf(0.4D), BigDecimal.TEN); Iterator<BigDecimal> riter = r.iterator(); for (Double i = 0.4; i <= 10D; i++) { Assert.assertEquals(BigDecimal.valueOf(i), riter.next()); } } @Test public void rangeEndsAtEnd() { NumberRange<Integer> r = new NumberRange<Integer>(0, 1); Iterator<Integer> riter = r.iterator(); riter.next(); riter.next(); Assert.assertFalse(riter.hasNext()); } @Test(expected = ArrayIndexOutOfBoundsException.class) public void arrayIndexOutOfBoundsExceptionIsThrownWhenIteratorPassesEndOfRange() { NumberRange<Integer> r = new NumberRange<Integer>(0, 1); Iterator<Integer> riter = r.iterator(); riter.next(); riter.next(); riter.next(); } @Test public void canCreateReversedByteRange() { NumberRange<Byte> r = new NumberRange<Byte>((byte) 10, (byte) 0); Iterator<Byte> riter = r.iterator(); for (Byte i = 10; i <= 0; i--) Assert.assertEquals(i, riter.next()); } @Test public void canCreateReversedShortRange() { NumberRange<Short> r = new NumberRange<Short>((short) 10, (short) 0); Iterator<Short> riter = r.iterator(); for (Short i = 10; i <= 0; i--) Assert.assertEquals(i, riter.next()); } @Test public void canCreateReversedIntegerRange() { NumberRange<Integer> r = new NumberRange<Integer>(10, 0); Iterator<Integer> riter = r.iterator(); for (Integer i = 10; i <= 0; i--) Assert.assertEquals(i, riter.next()); } @Test public void canCreateReversedLongRange() { NumberRange<Long> r = new NumberRange<Long>(10L, 0L); Iterator<Long> riter = r.iterator(); for (Long i = 10L; i <= 0L; i--) Assert.assertEquals(i, riter.next()); } @Test public void canCreateReversedFloatRange() { NumberRange<Float> r = new NumberRange<Float>(10.4F, 0F); Iterator<Float> riter = r.iterator(); for (Float i = 10.4F; i <= 0L; i--) Assert.assertEquals(i, riter.next()); } @Test public void canCreateReversedDoubleRange() { NumberRange<Double> r = new NumberRange<Double>(10.4D, 0D); Iterator<Double> riter = r.iterator(); for (Double i = 10.4D; i <= 0D; i--) Assert.assertEquals(i, riter.next()); } @Test public void canCreateReversedBigIntegerRange() { NumberRange<BigInteger> r = new NumberRange<BigInteger>(BigInteger.TEN, BigInteger.ZERO); Iterator<BigInteger> riter = r.iterator(); for (Long i = 10L; i <= 0L; i--) { Assert.assertEquals(BigInteger.valueOf(i), riter.next()); } } @Test public void canCreateReversedBigDecimalRange() { NumberRange<BigDecimal> r = new NumberRange<BigDecimal>(BigDecimal.valueOf(10.4D), BigDecimal.ZERO); Iterator<BigDecimal> riter = r.iterator(); for (Double i = 10.4D; i <= 0D; i--) { Assert.assertEquals(BigDecimal.valueOf(i), riter.next()); } } @Test public void reversedRangeEndsAtBeginning() { NumberRange<Integer> r = new NumberRange<Integer>(1, 0); Iterator<Integer> riter = r.iterator(); riter.next(); riter.next(); Assert.assertFalse(riter.hasNext()); } @Test(expected = ArrayIndexOutOfBoundsException.class) public void arrayIndexOutOfBoundsExceptionIsThrownWhenIteratorPassesBeginningOfReversedRange() { NumberRange<Integer> r = new NumberRange<Integer>(1, 0); Iterator<Integer> riter = r.iterator(); riter.next(); riter.next(); riter.next(); } }