Skip to content

Fix HashMap behaviour when updating == but ne keys#95

Closed
retronym wants to merge 4 commits into2.12.xfrom
ticket/12047
Closed

Fix HashMap behaviour when updating == but ne keys#95
retronym wants to merge 4 commits into2.12.xfrom
ticket/12047

Conversation

@retronym
Copy link
Owner

@retronym retronym commented Jun 22, 2020

WIP for scala/bug#12047

retronym added 3 commits June 17, 2020 15:13
The test suite that aimed to bring all of our sets and maps into
line did not exercise code paths optimized for:

   collection.$op(collectionOfSameType)

This commit updates the test to:

   - add test variants that generate operands of the same type as the
     input collection
   - add "preserves identity" tests for set intersection
   - fix the resulting failures by flipping the operands
     in `RedBlackTree.{union,intersection}`

I've also added concrete test cases to `Tree{Map,Set}Test` that
are easier to review and that also exercise builders.
@retronym retronym force-pushed the ticket/12047 branch 2 times, most recently from 58fdde8 to 5151314 Compare June 22, 2020 02:37
... when the operand overwrites mapping with a key that is == but ne.

This is consistent with the super class implementation, which
was overridden in 2.12.11 for efficiency.

I also found a pair of ClassCastExceptions in the new implementations
of `HashMap.++:`, for instance:

```
case class C(a: Int)(override val toString: String); implicit val Ordering_C: Ordering[C] = Ordering.by(_.a); val c0l = C(0)("l"); val c0r = C(0)("r"); import collection.immutable._; println(HashMap((c0l, ())).++:(TreeMap((c0r, ()))))'; done
v2.12.10
Map(r -> ())
v2.12.11
java.lang.ClassCastException: scala.collection.immutable.HashMap$adder$1$ cannot be cast to scala.collection.immutable.HashMap
	at scala.collection.immutable.HashMap$adder$1$.<init>(HashMap.scala:215)
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant