Skip to content

Commit fe9b1ff

Browse files
committed
[bug#12473] Throw on unsigned type in NumericRange#reverse
1 parent 116bc18 commit fe9b1ff

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

library/src/scala/collection/immutable/NumericRange.scala

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,13 @@ sealed class NumericRange[T](
153153
override def splitAt(n: Int): (NumericRange[T], NumericRange[T]) = (take(n), drop(n))
154154

155155
override def reverse: NumericRange[T] =
156-
if (isEmpty) this else new NumericRange.Inclusive(last, start, -step)
156+
if (isEmpty) this
157+
else {
158+
val newStep = -step
159+
if (num.sign(newStep) == num.sign(step)) {
160+
throw new ArithmeticException("number type is unsigned, and .reverse requires a negative step")
161+
} else new NumericRange.Inclusive(last, start, newStep)
162+
}
157163

158164
import NumericRange.defaultOrdering
159165

0 commit comments

Comments
 (0)