diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2015-02-19 10:24:08 -0800 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2015-02-19 10:24:08 -0800 |
commit | 812790a2dc4f961bbc8706a9e8a63887172057df (patch) | |
tree | bcb4dc633dc30f478d2ff0c1647591e9507a7c69 /test | |
parent | 2b90b890b82ea2771b7a6507424ef8494046a853 (diff) | |
parent | da2d4caae990bcb9fabb13e7a242b2b7babe0e0b (diff) | |
download | scala-812790a2dc4f961bbc8706a9e8a63887172057df.tar.gz scala-812790a2dc4f961bbc8706a9e8a63887172057df.tar.bz2 scala-812790a2dc4f961bbc8706a9e8a63887172057df.zip |
Merge pull request #4319 from axel22/fix-si-7943
Fix SI-7943 -- make `TrieMap.getOrElseUpdate` atomic.
Diffstat (limited to 'test')
-rw-r--r-- | test/files/scalacheck/Ctrie.scala | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/test/files/scalacheck/Ctrie.scala b/test/files/scalacheck/Ctrie.scala index 714f1c3b09..eef9d06f37 100644 --- a/test/files/scalacheck/Ctrie.scala +++ b/test/files/scalacheck/Ctrie.scala @@ -186,6 +186,25 @@ object Test extends Properties("concurrent.TrieMap") { }) } + property("concurrent getOrElseUpdate") = forAll(threadCounts, sizes) { + (p, sz) => + val totalInserts = new java.util.concurrent.atomic.AtomicInteger + val ct = new TrieMap[Wrap, String] + + val results = inParallel(p) { + idx => + (0 until sz) foreach { + i => + val v = ct.getOrElseUpdate(Wrap(i), idx + ":" + i) + if (v == idx + ":" + i) totalInserts.incrementAndGet() + } + } + + (totalInserts.get == sz) && ((0 until sz) forall { + case i => ct(Wrap(i)).split(":")(1).toInt == i + }) + } + } |