summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksandar Pokopec <aleksandar.prokopec@epfl.ch>2010-04-25 19:58:01 +0000
committerAleksandar Pokopec <aleksandar.prokopec@epfl.ch>2010-04-25 19:58:01 +0000
commitbd66ed93afc0b6b1bb7293f7930ab6c2d2c55a49 (patch)
treef4874574c58b864b3f1fb1b93b0a197de752f3c7
parent1148683005899ec86f7b1028cd36671a1045e650 (diff)
downloadscala-bd66ed93afc0b6b1bb7293f7930ab6c2d2c55a49.tar.gz
scala-bd66ed93afc0b6b1bb7293f7930ab6c2d2c55a49.tar.bz2
scala-bd66ed93afc0b6b1bb7293f7930ab6c2d2c55a49.zip
Fixes #3350. review by extempore
-rw-r--r--src/library/scala/collection/immutable/Stream.scala10
-rw-r--r--test/files/run/stream_length.scala15
2 files changed, 25 insertions, 0 deletions
diff --git a/src/library/scala/collection/immutable/Stream.scala b/src/library/scala/collection/immutable/Stream.scala
index 50fa07c2cf..fbda0b918b 100644
--- a/src/library/scala/collection/immutable/Stream.scala
+++ b/src/library/scala/collection/immutable/Stream.scala
@@ -104,6 +104,16 @@ self =>
loop(this, "")
}
+ override def length: Int = {
+ var len = 0
+ var left = this
+ while (!left.isEmpty) {
+ len += 1
+ left = left.tail
+ }
+ len
+ }
+
/** It's an imperfect world, but at least we can bottle up the
* imperfection in a capsule.
*/
diff --git a/test/files/run/stream_length.scala b/test/files/run/stream_length.scala
new file mode 100644
index 0000000000..68e9cad5ac
--- /dev/null
+++ b/test/files/run/stream_length.scala
@@ -0,0 +1,15 @@
+
+
+object Test {
+ def walk(depth: Int, bias: String): Stream[String] = {
+ if (depth == 0)
+ Stream(bias)
+ else {
+ Stream.concat(Stream.range(1, 100).map((x: Int) => walk(depth-1, bias + x)))
+ }
+ }
+
+ def main(args: Array[String]) {
+ println("Length: " + walk(3, "---").length)
+ }
+}