/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 - 2 0 1 8 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġkotlinx . coroutines Ċ Ċ import Ġorg . junit .* Ċ import Ġorg . junit . Test Ċ import Ġjava . util . concurrent .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠUn conf ined Concurrent St ress Test Ġ: ĠTest Base () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġthreads Ġ= Ġ 4 ĊĠĠĠ Ġprivate Ġval Ġexecutor Ġ= Ġnew Fixed ThreadPool Context ( threads , Ġ" Un conf ined Concurrent St ress Test ") ĊĠĠĠ Ġprivate Ġval Ġthread Local Ġ= ĠThread Local < Int >() ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġexecutor . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( timeout Ġ= Ġ 1 0 _ 0 0 0 L ) ĊĠĠĠ Ġfun Ġtest Concurrent () Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġiterations Ġ= Ġ 1 0 _ 0 0 0 Ġ* Ġstress Test Multiplier ĊĠĠĠĠĠĠĠ Ġval Ġstart Barrier Ġ= ĠC yc lic Barrier ( threads Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġfinish Latch Ġ= ĠCount DownLatch ( threads ) ĊĊĠĠĠĠĠĠĠ Ġrepeat ( threads ) Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( executor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Barrier . await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( iterations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Local . set ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . Un conf ined ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġthread Local . get ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . Un conf ined ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( id , Ġthread Local . get ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Local . set ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Latch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstart Barrier . await () ĊĠĠĠĠĠĠĠ Ġfinish Latch . await () ĊĠĠĠ Ġ} Ċ } Ċ