summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2015-02-19 10:24:08 -0800
committerAdriaan Moors <adriaan.moors@typesafe.com>2015-02-19 10:24:08 -0800
commit812790a2dc4f961bbc8706a9e8a63887172057df (patch)
treebcb4dc633dc30f478d2ff0c1647591e9507a7c69 /test
parent2b90b890b82ea2771b7a6507424ef8494046a853 (diff)
parentda2d4caae990bcb9fabb13e7a242b2b7babe0e0b (diff)
downloadscala-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.scala19
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
+ })
+ }
+
}