diff options
author | Seth Tisue <seth@tisue.net> | 2015-06-30 16:32:40 -0400 |
---|---|---|
committer | Seth Tisue <seth@tisue.net> | 2015-06-30 16:32:40 -0400 |
commit | 43e115e120b151259e47de1878fdbe0d400f75b5 (patch) | |
tree | adbe9e3d935575e3ada7a43713664e4aaa052633 | |
parent | 80ee730a4380709eaaf6ce3d80e52d641dd7d86d (diff) | |
parent | 66bdc5200f5270f4064c6b92192a43db34136714 (diff) | |
download | scala-43e115e120b151259e47de1878fdbe0d400f75b5.tar.gz scala-43e115e120b151259e47de1878fdbe0d400f75b5.tar.bz2 scala-43e115e120b151259e47de1878fdbe0d400f75b5.zip |
Merge pull request #4585 from ruippeixotog/fix-mutable-treemap-clear
Fix size update on `mutable.TreeMap#clear()`
-rw-r--r-- | src/library/scala/collection/mutable/RedBlackTree.scala | 2 | ||||
-rw-r--r-- | src/library/scala/collection/mutable/TreeMap.scala | 4 | ||||
-rw-r--r-- | test/files/scalacheck/MutableTreeMap.scala | 4 |
3 files changed, 6 insertions, 4 deletions
diff --git a/src/library/scala/collection/mutable/RedBlackTree.scala b/src/library/scala/collection/mutable/RedBlackTree.scala index 7f12264d45..a3be011ae2 100644 --- a/src/library/scala/collection/mutable/RedBlackTree.scala +++ b/src/library/scala/collection/mutable/RedBlackTree.scala @@ -55,7 +55,9 @@ private[collection] object RedBlackTree { // ---- size ---- def size(node: Node[_, _]): Int = if (node eq null) 0 else 1 + size(node.left) + size(node.right) + def size(tree: Tree[_, _]): Int = tree.size def isEmpty(tree: Tree[_, _]) = tree.root eq null + def clear(tree: Tree[_, _]): Unit = { tree.root = null; tree.size = 0 } // ---- search ---- diff --git a/src/library/scala/collection/mutable/TreeMap.scala b/src/library/scala/collection/mutable/TreeMap.scala index 244cc18735..b96cef5bee 100644 --- a/src/library/scala/collection/mutable/TreeMap.scala +++ b/src/library/scala/collection/mutable/TreeMap.scala @@ -64,7 +64,7 @@ sealed class TreeMap[A, B] private (tree: RB.Tree[A, B])(implicit val ordering: def keysIteratorFrom(start: A) = RB.keysIterator(tree, Some(start)) def valuesIteratorFrom(start: A) = RB.valuesIterator(tree, Some(start)) - override def size = tree.size + override def size = RB.size(tree) override def isEmpty = RB.isEmpty(tree) override def contains(key: A) = RB.contains(tree, key) @@ -78,7 +78,7 @@ sealed class TreeMap[A, B] private (tree: RB.Tree[A, B])(implicit val ordering: override def foreach[U](f: ((A, B)) => U): Unit = RB.foreach(tree, f) override def transform(f: (A, B) => B) = { RB.transform(tree, f); this } - override def clear(): Unit = tree.root = null + override def clear(): Unit = RB.clear(tree) override def stringPrefix = "TreeMap" diff --git a/test/files/scalacheck/MutableTreeMap.scala b/test/files/scalacheck/MutableTreeMap.scala index ac073b1c42..b072307a63 100644 --- a/test/files/scalacheck/MutableTreeMap.scala +++ b/test/files/scalacheck/MutableTreeMap.scala @@ -163,7 +163,7 @@ package scala.collection.mutable { property("clear") = forAll { (map: mutable.TreeMap[K, V]) => map.clear() - map.isEmpty + map.isEmpty && map.size == 0 } property("serializable") = forAll { (map: mutable.TreeMap[K, V]) => @@ -303,7 +303,7 @@ package scala.collection.mutable { property("clear") = forAll { (map: mutable.TreeMap[K, V], from: Option[K], until: Option[K]) => val mapView = map.rangeImpl(from, until) mapView.clear() - map.isEmpty && mapView.isEmpty + map.isEmpty && mapView.isEmpty && map.size == 0 && mapView.size == 0 } property("serializable") = forAll { (map: mutable.TreeMap[K, V], from: Option[K], until: Option[K]) => |