Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b24a6e0

Browse files
authored
Merge pull request #6930 from NthPortal/topic/lengthCompare-fix/PR
Fix lengthCompare for indexed types
2 parents 2de8b62 + 604f8d4 commit b24a6e0

File tree

5 files changed

+22
-4
lines changed

5 files changed

+22
-4
lines changed

src/library/scala/collection/ArrayOps.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ final class ArrayOps[A](val xs: Array[A]) extends AnyVal {
221221
* x > 0 if this.length > len
222222
* }}}
223223
*/
224-
def lengthCompare(len: Int): Int = xs.length - len
224+
def lengthCompare(len: Int): Int = Integer.compare(xs.length, len)
225225

226226
/** Selects an interval of elements. The returned array is made up
227227
* of all elements `x` which satisfy the invariant:

src/library/scala/collection/IndexedSeq.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ trait IndexedSeqOps[+A, +CC[_], +C] extends Any with SeqOps[A, CC, C] { self =>
5252

5353
override def last: A = apply(length - 1)
5454

55-
override def lengthCompare(len: Int): Int = length - len
55+
override def lengthCompare(len: Int): Int = Integer.compare(length, len)
5656

5757
final override def knownSize: Int = length
5858

src/library/scala/collection/StringOps.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ final class StringOps(private val s: String) extends AnyVal {
155155
/** Get the char at the specified index. */
156156
@`inline` def apply(i: Int): Char = s.charAt(i)
157157

158+
def lengthCompare(len: Int): Int = Integer.compare(s.length, len)
159+
158160
/** Builds a new collection by applying a function to all chars of this String.
159161
*
160162
* @param f the function to apply to each char.

src/library/scala/collection/immutable/Vector.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,6 @@ final class Vector[+A] private[immutable] (private[collection] val startIndex: I
8080

8181
def length: Int = endIndex - startIndex
8282

83-
override def lengthCompare(len: Int): Int = length - len
84-
8583
private[collection] def initIterator[B >: A](s: VectorIterator[B]): Unit = {
8684
s.initFrom(this)
8785
if (dirty) s.stabilize(focus)

test/junit/scala/collection/IndexedSeqTest.scala

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ abstract class IndexedTest[T, E] {
3939
}
4040
}
4141

42+
/** check that lengthCompare compares values correctly */
43+
@Test def checkLengthCompare(): Unit = {
44+
val test = underTest(size)
45+
assert(lengthCompare(test, Int.MinValue) > 0)
46+
}
47+
4248
/**
4349
* check simple equallity of the initial data.
4450
* More a test of the infra that we use in this est than a full test of equallity
@@ -231,6 +237,8 @@ abstract class IndexedTest[T, E] {
231237
//the length of underTest
232238
def length(underTest: T): Int
233239

240+
def lengthCompare(underTest: T, len: Int): Int
241+
234242
//the value at index i of underTest
235243
def get(underTest: T, i: Int): E
236244

@@ -316,6 +324,8 @@ package IndexedTestImpl {
316324
val TYPE: Class[_]) extends IndexedTest[Array[E], E]{
317325
override final def length(underTest: Array[E]) = underTest.length
318326

327+
override final def lengthCompare(underTest: Array[E], len: Int): Int = underTest.lengthCompare(len)
328+
319329
override def get(underTest: Array[E], i: Int) = underTest(i)
320330

321331
override def slice(underTest: Array[E], from: Int, to: Int) = underTest.slice(from, to)
@@ -347,6 +357,8 @@ package IndexedTestImpl {
347357
import mutable.ArraySeq
348358
override final def length(underTest: ArraySeq[E]) = underTest.length
349359

360+
override final def lengthCompare(underTest: ArraySeq[E], len: Int): Int = underTest.lengthCompare(len)
361+
350362
override def get(underTest: ArraySeq[E], i: Int) = underTest(i)
351363

352364
override def slice(underTest: ArraySeq[E], from: Int, to: Int) = underTest.slice(from, to)
@@ -377,6 +389,8 @@ package IndexedTestImpl {
377389
abstract class MutableIndexedSeqTest[T <: mutable.Seq[E], E] extends IndexedTest[T, E] with DataProvider[E]{
378390
override final def length(underTest: T) = underTest.length
379391

392+
override final def lengthCompare(underTest: T, len: Int): Int = underTest.lengthCompare(len)
393+
380394
override def get(underTest: T, i: Int) = underTest(i)
381395

382396
override def slice(underTest: T, from: Int, to: Int) = underTest.slice(from, to).asInstanceOf[T]
@@ -407,6 +421,8 @@ package IndexedTestImpl {
407421
abstract class ImmutableIndexedSeqTest[T <: SeqOps[E, Seq, T], E] extends IndexedTest[T, E] with DataProvider[E] {
408422
override final def length(underTest: T) = underTest.length
409423

424+
override final def lengthCompare(underTest: T, len: Int): Int = underTest.lengthCompare(len)
425+
410426
override def get(underTest: T, i: Int) = underTest(i)
411427

412428
override def slice(underTest: T, from: Int, to: Int) = underTest.slice(from, to)
@@ -428,6 +444,8 @@ package IndexedTestImpl {
428444
abstract class StringOpsBaseTest extends IndexedTest[StringOps, Char] with DataProvider[Char] {
429445
override final def length(underTest: StringOps) = underTest.size
430446

447+
override final def lengthCompare(underTest: StringOps, len: Int): Int = underTest.lengthCompare(len)
448+
431449
override def get(underTest: StringOps, i: Int) = underTest(i)
432450

433451
override def slice(underTest: StringOps, from: Int, to: Int) = underTest.slice(from, to)

0 commit comments

Comments
 (0)