diff options
author | Lukas Rytz <lukas.rytz@gmail.com> | 2016-12-12 16:29:49 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-12 16:29:49 +0100 |
commit | 0a3e2b62bd7dc56d9283c0b2480ccd0c03eb35b3 (patch) | |
tree | a7b6ce3bdaf16167fb4b7e5986c721f725b095bf | |
parent | 8b872daacbb41dc9947ad181ba79e660c55a6683 (diff) | |
parent | 5370f271dfcd82ae3fb6675e7f055430a281381e (diff) | |
download | scala-0a3e2b62bd7dc56d9283c0b2480ccd0c03eb35b3.tar.gz scala-0a3e2b62bd7dc56d9283c0b2480ccd0c03eb35b3.tar.bz2 scala-0a3e2b62bd7dc56d9283c0b2480ccd0c03eb35b3.zip |
Merge pull request #5531 from tabdulradi/SI-10060
SI-10060 Fixes NumricRange.max bug on empty ranges
-rw-r--r-- | src/library/scala/collection/immutable/NumericRange.scala | 4 | ||||
-rw-r--r-- | test/junit/scala/collection/immutable/RangeTest.scala | 42 |
2 files changed, 44 insertions, 2 deletions
diff --git a/src/library/scala/collection/immutable/NumericRange.scala b/src/library/scala/collection/immutable/NumericRange.scala index fdf50960a3..ef3fa99971 100644 --- a/src/library/scala/collection/immutable/NumericRange.scala +++ b/src/library/scala/collection/immutable/NumericRange.scala @@ -115,14 +115,14 @@ extends AbstractSeq[T] with IndexedSeq[T] with Serializable { override def min[T1 >: T](implicit ord: Ordering[T1]): T = if (ord eq defaultOrdering(num)) { - if (num.signum(step) > 0) start + if (num.signum(step) > 0) head else last } else super.min(ord) override def max[T1 >: T](implicit ord: Ordering[T1]): T = if (ord eq defaultOrdering(num)) { if (num.signum(step) > 0) last - else start + else head } else super.max(ord) // Motivated by the desire for Double ranges with BigDecimal precision, diff --git a/test/junit/scala/collection/immutable/RangeTest.scala b/test/junit/scala/collection/immutable/RangeTest.scala new file mode 100644 index 0000000000..a0bef72bc9 --- /dev/null +++ b/test/junit/scala/collection/immutable/RangeTest.scala @@ -0,0 +1,42 @@ +package scala.collection.immutable + +import org.junit.{Assert, Test} +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 +import scala.tools.testing.AssertUtil + +@RunWith(classOf[JUnit4]) +class RangeTest { + import Assert._ + import AssertUtil._ + + @Test + def test_SI10060_numeric_range_min_max(): Unit = { + assertEquals(Range.Long.inclusive(1, 9, 1).min, 1) + assertEquals(Range.Long.inclusive(1, 9, 1).max, 9) + assertEquals(Range.Long.inclusive(9, 1, -1).min, 1) + assertEquals(Range.Long.inclusive(9, 1, -1).max, 9) + assertThrows[java.util.NoSuchElementException](Range.Long.inclusive(1, 9, -1).min) + assertThrows[java.util.NoSuchElementException](Range.Long.inclusive(1, 9, -1).max) + assertThrows[java.util.NoSuchElementException](Range.Long.inclusive(9, 1, 1).min) + assertThrows[java.util.NoSuchElementException](Range.Long.inclusive(9, 1, 1).max) + + assertEquals(Range.Int.inclusive(1, 9, 1).min, 1) + assertEquals(Range.Int.inclusive(1, 9, 1).max, 9) + assertEquals(Range.Int.inclusive(9, 1, -1).min, 1) + assertEquals(Range.Int.inclusive(9, 1, -1).max, 9) + assertThrows[java.util.NoSuchElementException](Range.Int.inclusive(1, 9, -1).min) + assertThrows[java.util.NoSuchElementException](Range.Int.inclusive(1, 9, -1).max) + assertThrows[java.util.NoSuchElementException](Range.Int.inclusive(9, 1, 1).min) + assertThrows[java.util.NoSuchElementException](Range.Int.inclusive(9, 1, 1).max) + + assertEquals(Range.inclusive(1, 9, 1).min, 1) + assertEquals(Range.inclusive(1, 9, 1).max, 9) + assertEquals(Range.inclusive(9, 1, -1).min, 1) + assertEquals(Range.inclusive(9, 1, -1).max, 9) + assertThrows[java.util.NoSuchElementException](Range.inclusive(1, 9, -1).min) + assertThrows[java.util.NoSuchElementException](Range.inclusive(1, 9, -1).max) + assertThrows[java.util.NoSuchElementException](Range.inclusive(9, 1, 1).min) + assertThrows[java.util.NoSuchElementException](Range.inclusive(9, 1, 1).max) + } +} |