package Ġcom . bug sn ag . android Ċ Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertNotNull Ċ import Ġorg . junit . Assert . assertNot Same Ċ import Ġorg . junit . Assert . assertSame Ċ import Ġorg . junit . Test Ċ import Ġjava . util . concurrent . Executors Ċ Ċ internal Ġclass ĠMetadata Concurrent Modification Test Ġ{ ĊĊĠĠĠ Ġ@ Test () ĊĠĠĠ Ġfun Ġtest Handles Concurrent Modification () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠMetadata (). copy () ĊĠĠĠĠĠĠĠ Ġval Ġexecutor Ġ= ĠExec utors . new Single Thread Executor () ĊĊĠĠĠĠĠĠĠ Ġrepeat ( 1 0 0 ) Ġ{ Ġcount Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( metadata . toMap ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata . store [" $ count "] Ġ= Ġcount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRegression Ġunit Ġtest Ġthat Ġverifies Ġsetting Ġred acted Keys ĊĠĠĠĠ Ġ* Ġconcurrent ly Ġon Ġ[ Metadata ] Ġdoes Ġnot Ġthrow Ġa ĠConcurrent Modification Exception ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test () ĊĠĠĠ Ġfun Ġtest Concurrent Modification Red acted Keys () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= Ġmutable Set Of (" alpha ", Ġ" omega ") ĊĠĠĠĠĠĠĠ Ġval Ġorig Ġ= ĠMetadata () ĊĠĠĠĠĠĠĠ Ġval Ġexecutor Ġ= ĠExec utors . new Single Thread Executor () ĊĊĠĠĠĠĠĠĠ Ġrepeat ( 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorig . red acted Keys Ġ= Ġkeys ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeys . add ("$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test () ĊĠĠĠ Ġfun Ġtest Red acted Keys Copy () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġorig Ġ= ĠMetadata () ĊĠĠĠĠĠĠĠ Ġorig . red acted Keys Ġ= Ġmutable Set Of (" alpha ", Ġ" omega ") ĊĠĠĠĠĠĠĠ Ġval Ġcopy Ġ= Ġorig . copy () ĊĠĠĠĠĠĠĠ Ġassert Not Same ( orig . red acted Keys , Ġcopy . red acted Keys ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( mutable Set Of (" alpha ", Ġ" omega "), Ġcopy . red acted Keys ) ĊĠĠĠ Ġ} Ċ } Ċ