diff options
author | Paul Phillips <paulp@improving.org> | 2010-09-18 17:54:12 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-09-18 17:54:12 +0000 |
commit | 76ce74d7aefda96f6148e2e4b50f3c815dd3c076 (patch) | |
tree | 13ac5ea3e6f4babd0a1a3d6da6505daea3e1f285 | |
parent | bece2590efabb3156ec89f7e31fd11d7eafdddc8 (diff) | |
download | scala-76ce74d7aefda96f6148e2e4b50f3c815dd3c076.tar.gz scala-76ce74d7aefda96f6148e2e4b50f3c815dd3c076.tar.bz2 scala-76ce74d7aefda96f6148e2e4b50f3c815dd3c076.zip |
Fixed an issue with ListSet getting confused ab...
Fixed an issue with ListSet getting confused about what goes forward and
what goes backward. No review.
-rw-r--r-- | src/library/scala/collection/immutable/ListSet.scala | 10 | ||||
-rw-r--r-- | test/files/run/bug3822.scala | 6 |
2 files changed, 12 insertions, 4 deletions
diff --git a/src/library/scala/collection/immutable/ListSet.scala b/src/library/scala/collection/immutable/ListSet.scala index 136a57c680..cea4d20595 100644 --- a/src/library/scala/collection/immutable/ListSet.scala +++ b/src/library/scala/collection/immutable/ListSet.scala @@ -31,9 +31,11 @@ object ListSet extends ImmutableSetFactory[ListSet] { * temporary space cost, but it's improbable a list backed set could * become large enough for this to matter given its pricy element lookup. */ - class ListSetBuilder[Elem] extends Builder[Elem, ListSet[Elem]] { - protected val elems = new mutable.ListBuffer[Elem] - protected val seen = new mutable.HashSet[Elem] + class ListSetBuilder[Elem](initial: ListSet[Elem]) extends Builder[Elem, ListSet[Elem]] { + def this() = this(empty[Elem]) + protected val elems = new mutable.ListBuffer[Elem] ++= initial reverse + protected val seen = new mutable.HashSet[Elem] ++= initial + def +=(x: Elem): this.type = { if (!seen(x)) { elems += x @@ -97,7 +99,7 @@ class ListSet[A] extends Set[A] */ override def ++(xs: TraversableOnce[A]): ListSet[A] = if (xs.isEmpty) this - else newBuilder ++= this ++= xs result + else new ListSet.ListSetBuilder(this) ++= xs result private[ListSet] def unchecked_+(e: A): ListSet[A] = new Node(e) private[ListSet] def unchecked_outer: ListSet[A] = diff --git a/test/files/run/bug3822.scala b/test/files/run/bug3822.scala index 7401ecbde2..c35804035e 100644 --- a/test/files/run/bug3822.scala +++ b/test/files/run/bug3822.scala @@ -7,6 +7,12 @@ object Test { assert(xs.size == 200002) assert(xs.sum == 100001) + + val ys = ListSet[Int]() + val ys1 = (1 to 12).grouped(3).foldLeft(ys)(_ ++ _) + val ys2 = (1 to 12).foldLeft(ys)(_ + _) + + assert(ys1 == ys2) } } |