package Ġit . uni bo . tup ro log . un ify Ċ Ċ import Ġit . uni bo . tup ro log . core . Substitution Ċ import Ġit . uni bo . tup ro log . un ify . test utils . Un ific ator Utils . successful Un ifications Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . Future Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠTest Thread Safety Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Cached Un ific ator Thread Safety () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexec utors Ġ= ĠExec utors . new Fixed ThreadPool ( 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġresults : ĠMutable List < Future < Substitution >> Ġ= ĠCollections . synchronized List ( LinkedList ()) ĊĠĠĠĠĠĠĠ Ġval Ġun ific ator Ġ= ĠUn ific ator . cached ( Un ific ator . strict ()) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġ.. Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( equation Ġin Ġsuccessful Un ifications . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( exec utors . submit < Substitution > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun ific ator . m gu ( equation . lhs , Ġequation . rhs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġexec utors . shutdown () ĊĠĠĠĠĠĠĠ Ġexec utors . await Termination ( 1 , ĠTimeUnit . MIN UTES ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( res Ġin Ġresults ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġres . get () Ġis ĠSubst itution . Un ifier Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }