Skip to content

Commit 6e6b855

Browse files
committed
Merge pull request scala#4810 from ruippeixotog/fix-mutable-setlike-clear
SI-9497 Fix SetLike#clear() default implementation
2 parents 3dc2690 + e7079ca commit 6e6b855

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

src/library/scala/collection/mutable/SetLike.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,9 @@ trait SetLike[A, +This <: SetLike[A, This] with Set[A]]
129129
/** Removes all elements from the set. After this operation is completed,
130130
* the set will be empty.
131131
*/
132-
def clear() { foreach(-=) }
132+
def clear(): Unit =
133+
for (elem <- this.toList)
134+
this -= elem
133135

134136
override def clone(): This = empty ++= repr.seq
135137

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package scala.collection.mutable
2+
3+
import org.junit.Assert._
4+
import org.junit.Test
5+
import org.junit.runner.RunWith
6+
import org.junit.runners.JUnit4
7+
8+
@RunWith(classOf[JUnit4])
9+
class SetLikeTest {
10+
11+
class MySet(self: Set[String]) extends Set[String] with SetLike[String, MySet] {
12+
override def -=(elem: String) = { self -= elem; this }
13+
override def +=(elem: String) = { self += elem; this }
14+
15+
override def empty = new MySet(self.empty)
16+
override def iterator = self.iterator
17+
override def contains(elem: String) = self.contains(elem)
18+
}
19+
20+
@Test
21+
def hasCorrectClear() {
22+
val s = new MySet(Set("EXPOSEDNODE", "CONNECTABLE"))
23+
s.clear()
24+
assertEquals(new MySet(Set()), s)
25+
}
26+
}

0 commit comments

Comments
 (0)