Skip to content

Commit ab06ce8

Browse files
authored
Merge pull request scala#5213 from som-snytt/issue/stringof-pariterable
SI-9737 [no-merge] Backport stringOf ParIterable
2 parents f775e1f + be9c0fe commit ab06ce8

File tree

2 files changed

+59
-2
lines changed

2 files changed

+59
-2
lines changed

src/library/scala/runtime/ScalaRunTime.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
package scala
1010
package runtime
1111

12-
import scala.collection.{ Seq, IndexedSeq, TraversableView, AbstractIterator }
12+
import scala.collection.{ Seq, IndexedSeq, TraversableView, AbstractIterator, GenIterable }
1313
import scala.collection.mutable.WrappedArray
1414
import scala.collection.immutable.{ StringLike, NumericRange, List, Stream, Nil, :: }
1515
import scala.collection.generic.{ Sorted, IsTraversableLike }
@@ -325,7 +325,7 @@ object ScalaRunTime {
325325
case x if useOwnToString(x) => x.toString
326326
case x: AnyRef if isArray(x) => arrayToString(x)
327327
case x: scala.collection.Map[_, _] => x.iterator take maxElements map mapInner mkString (x.stringPrefix + "(", ", ", ")")
328-
case x: Iterable[_] => x.iterator take maxElements map inner mkString (x.stringPrefix + "(", ", ", ")")
328+
case x: GenIterable[_] => x.iterator take maxElements map inner mkString (x.stringPrefix + "(", ", ", ")")
329329
case x: Traversable[_] => x take maxElements map inner mkString (x.stringPrefix + "(", ", ", ")")
330330
case x: Product1[_] if isTuple(x) => "(" + inner(x._1) + ",)" // that special trailing comma
331331
case x: Product if isTuple(x) => x.productIterator map inner mkString ("(", ",", ")")

test/junit/scala/runtime/ScalaRunTimeTest.scala

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,61 @@ class ScalaRunTimeTest {
6767
val c = new C()
6868
assertFalse(c.toString, isTuple(c))
6969
}
70+
71+
@Test
72+
def testStringOf() {
73+
import ScalaRunTime.stringOf
74+
import scala.collection._
75+
import parallel.ParIterable
76+
77+
assertEquals("null", stringOf(null))
78+
assertEquals( "\"\"", stringOf(""))
79+
80+
assertEquals("abc", stringOf("abc"))
81+
assertEquals("\" abc\"", stringOf(" abc"))
82+
assertEquals("\"abc \"", stringOf("abc "))
83+
84+
assertEquals("""Array()""", stringOf(Array.empty[AnyRef]))
85+
assertEquals("""Array()""", stringOf(Array.empty[Int]))
86+
assertEquals("""Array(1, 2, 3)""", stringOf(Array(1, 2, 3)))
87+
assertEquals("""Array(a, "", " c", null)""", stringOf(Array("a", "", " c", null)))
88+
assertEquals("""Array(Array("", 1, Array(5)), Array(1))""",
89+
stringOf(Array(Array("", 1, Array(5)), Array(1))))
90+
91+
val map = Map(1->"", 2->"a", 3->" a", 4->null)
92+
assertEquals(s"""${map.stringPrefix}(1 -> "", 2 -> a, 3 -> " a", 4 -> null)""", stringOf(map))
93+
assertEquals(s"""${map.stringPrefix}(1 -> "", 2 -> a)""", stringOf(map, 2))
94+
95+
val iterable = Iterable("a", "", " c", null)
96+
assertEquals(s"""${iterable.stringPrefix}(a, "", " c", null)""", stringOf(iterable))
97+
assertEquals(s"""${iterable.stringPrefix}(a, "")""", stringOf(iterable, 2))
98+
99+
val parIterable = ParIterable("a", "", " c", null)
100+
assertEquals(s"""${parIterable.stringPrefix}(a, "", " c", null)""", stringOf(parIterable))
101+
assertEquals(s"""${parIterable.stringPrefix}(a, "")""", stringOf(parIterable, 2))
102+
103+
val traversable = new Traversable[Int] {
104+
def foreach[U](f: Int => U): Unit = (0 to 3).foreach(f)
105+
}
106+
assertEquals(s"${traversable.stringPrefix}(0, 1, 2, 3)", stringOf(traversable))
107+
assertEquals(s"${traversable.stringPrefix}(0, 1)", stringOf(traversable, 2))
108+
109+
val tuple1 = Tuple1(0)
110+
assertEquals("(0,)", stringOf(tuple1))
111+
assertEquals("(0,)", stringOf(tuple1, 0))
112+
113+
val tuple2 = Tuple2(0, 1)
114+
assertEquals("(0,1)", stringOf(tuple2))
115+
assertEquals("(0,1)", stringOf(tuple2, 0))
116+
117+
val tuple3 = Tuple3(0, 1, 2)
118+
assertEquals("(0,1,2)", stringOf(tuple3))
119+
assertEquals("(0,1,2)", stringOf(tuple3, 0))
120+
121+
val x = new Object {
122+
override def toString(): String = "this is the stringOf string"
123+
}
124+
assertEquals(stringOf(x), "this is the stringOf string")
125+
assertEquals(stringOf(x, 2), "this is the stringOf string")
126+
}
70127
}

0 commit comments

Comments
 (0)