Skip to content

Commit 43e115e

Browse files
committed
Merge pull request scala#4585 from ruippeixotog/fix-mutable-treemap-clear
Fix size update on `mutable.TreeMap#clear()`
2 parents 80ee730 + 66bdc52 commit 43e115e

File tree

3 files changed

+6
-4
lines changed

3 files changed

+6
-4
lines changed

src/library/scala/collection/mutable/RedBlackTree.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ private[collection] object RedBlackTree {
5555
// ---- size ----
5656

5757
def size(node: Node[_, _]): Int = if (node eq null) 0 else 1 + size(node.left) + size(node.right)
58+
def size(tree: Tree[_, _]): Int = tree.size
5859
def isEmpty(tree: Tree[_, _]) = tree.root eq null
60+
def clear(tree: Tree[_, _]): Unit = { tree.root = null; tree.size = 0 }
5961

6062
// ---- search ----
6163

src/library/scala/collection/mutable/TreeMap.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ sealed class TreeMap[A, B] private (tree: RB.Tree[A, B])(implicit val ordering:
6464
def keysIteratorFrom(start: A) = RB.keysIterator(tree, Some(start))
6565
def valuesIteratorFrom(start: A) = RB.valuesIterator(tree, Some(start))
6666

67-
override def size = tree.size
67+
override def size = RB.size(tree)
6868
override def isEmpty = RB.isEmpty(tree)
6969
override def contains(key: A) = RB.contains(tree, key)
7070

@@ -78,7 +78,7 @@ sealed class TreeMap[A, B] private (tree: RB.Tree[A, B])(implicit val ordering:
7878

7979
override def foreach[U](f: ((A, B)) => U): Unit = RB.foreach(tree, f)
8080
override def transform(f: (A, B) => B) = { RB.transform(tree, f); this }
81-
override def clear(): Unit = tree.root = null
81+
override def clear(): Unit = RB.clear(tree)
8282

8383
override def stringPrefix = "TreeMap"
8484

test/files/scalacheck/MutableTreeMap.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ package scala.collection.mutable {
163163

164164
property("clear") = forAll { (map: mutable.TreeMap[K, V]) =>
165165
map.clear()
166-
map.isEmpty
166+
map.isEmpty && map.size == 0
167167
}
168168

169169
property("serializable") = forAll { (map: mutable.TreeMap[K, V]) =>
@@ -303,7 +303,7 @@ package scala.collection.mutable {
303303
property("clear") = forAll { (map: mutable.TreeMap[K, V], from: Option[K], until: Option[K]) =>
304304
val mapView = map.rangeImpl(from, until)
305305
mapView.clear()
306-
map.isEmpty && mapView.isEmpty
306+
map.isEmpty && mapView.isEmpty && map.size == 0 && mapView.size == 0
307307
}
308308

309309
property("serializable") = forAll { (map: mutable.TreeMap[K, V], from: Option[K], until: Option[K]) =>

0 commit comments

Comments
 (0)