Skip to content

Commit f115c47

Browse files
authored
Merge pull request scala-js#4628 from sjrd/fix-arraybuilder-length-knownsize
Fix scala-js#4627: Correctly implement ArrayBuilder.{length,knownSize}.
2 parents 11e35c1 + 86972cc commit f115c47

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

scalalib/overrides-2.13/scala/collection/mutable/ArrayBuilder.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,10 @@ object ArrayBuilder {
103103
protected[this] def elems: Array[T] = throw new Error("unreachable")
104104
private var jsElems: js.Array[Any] = js.Array()
105105

106+
override def length: Int = jsElems.length
107+
108+
override def knownSize: Int = jsElems.length
109+
106110
def addOne(elem: T): this.type = {
107111
val unboxedElem =
108112
if (isCharArrayBuilder) elem.asInstanceOf[Char].toInt

test-suite/shared/src/test/scala/org/scalajs/testsuite/scalalib/ArrayBuilderTest.scala

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,11 +324,46 @@ class ArrayBuilderTest {
324324
b.addAll(arr, 3, 2)
325325
assertArrayEquals(Array[Int](4, 5), b.result())
326326
}
327+
328+
@Test def lengthAndKnownSize_Issue4627(): Unit = {
329+
assumeFalse("Needs at least Scala 2.13",
330+
scalaVersion.startsWith("2.11.") ||
331+
scalaVersion.startsWith("2.12."))
332+
333+
val b = ArrayBuilder.make[Int]
334+
assertEquals(0, b.length)
335+
assertEquals(0, b.knownSize)
336+
337+
b += 5
338+
b += 7
339+
assertEquals(2, b.length)
340+
assertEquals(2, b.knownSize)
341+
342+
b += -1
343+
b += 98
344+
b += 4
345+
assertEquals(5, b.length)
346+
assertEquals(5, b.knownSize)
347+
348+
b.clear()
349+
assertEquals(0, b.length)
350+
assertEquals(0, b.knownSize)
351+
352+
b += 4
353+
assertEquals(1, b.length)
354+
assertEquals(1, b.knownSize)
355+
}
327356
}
328357

329358
object ArrayBuilderTest {
330359
implicit class ArrayBuilderCompat[A](val __sef: ArrayBuilder[A]) extends AnyVal {
331360
def addAll(xs: Array[_ <: A], offset: Int, length: Int): Unit =
332361
throw new AssertionError("unreachable code")
362+
363+
def length: Int =
364+
throw new AssertionError("unreachable code")
365+
366+
def knownSize: Int =
367+
throw new AssertionError("unreachable code")
333368
}
334369
}

0 commit comments

Comments
 (0)