package scala.collection package mutable import org.junit.Assert._ import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.JUnit4 @RunWith(classOf[JUnit4]) class HashMapTest { @Test def getOrElseUpdate_mutationInCallback() { val hm = new mutable.HashMap[String, String]() // add enough elements to resize the hash table in the callback def add() = 1 to 100000 foreach (i => hm(i.toString) = "callback") hm.getOrElseUpdate("0", { add() "" }) assertEquals(Some(""), hm.get("0")) } @Test def getOrElseUpdate_evalOnce(): Unit = { var i = 0 val hm = new mutable.HashMap[Int, Int]() hm.getOrElseUpdate(0, {i += 1; i}) assertEquals(1, hm(0)) } @Test def getOrElseUpdate_noEval(): Unit = { val hm = new mutable.HashMap[Int, Int]() hm.put(0, 0) hm.getOrElseUpdate(0, throw new AssertionError()) } }