/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 - 2 0 1 8 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġkotlinx . collections . immutable . stress Tests . immutable Set Ċ Ċ import Ġkotlinx . collections . immutable . stress Tests . Object Wrapper Ċ import Ġkotlinx . collections . immutable . stress Tests . Wrapper Generator Ċ import Ġkotlinx . collections . immutable . persistent HashSet Of Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . Assert .* Ċ import Ġjava . util .* Ċ Ċ class ĠPersistent HashSet Builder Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠisEmpty Tests () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġpersistent HashSet Of < Int >(). builder () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( builder . isEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġelements ToAdd Ġ= Ġ 1 0 0 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġrepeat ( times Ġ= Ġelements ToAdd ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( builder . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrepeat ( times Ġ= Ġelements ToAdd Ġ- Ġ 1 ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . remove ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( builder . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . remove ( elements ToAdd Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( builder . isEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsize Tests () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġpersistent HashSet Of < Int >(). builder () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( builder . size Ġ== Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġelements ToAdd Ġ= Ġ 1 0 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġrepeat ( times Ġ= Ġelements ToAdd ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( index Ġ+ Ġ 1 , Ġbuilder . size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( index Ġ+ Ġ 1 , Ġbuilder . size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrepeat ( times Ġ= Ġelements ToAdd ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . remove ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( elements ToAdd Ġ- Ġindex Ġ- Ġ 1 , Ġbuilder . size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . remove ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( elements ToAdd Ġ- Ġindex Ġ- Ġ 1 , Ġbuilder . size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstored Elements Tests () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġpersistent HashSet Of < Int >(). builder () ĊĠĠĠĠĠĠĠ ĠassertTrue ( builder . isEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġmutable Set Ġ= Ġmutable Set Of < Int >() ĊĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠRandom () ĊĊĠĠĠĠĠĠĠ Ġval Ġelements ToAdd Ġ= Ġ 2 0 0 0 ĊĠĠĠĠĠĠĠ Ġrepeat ( times Ġ= Ġelements ToAdd ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġrandom . nextInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Set . add ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add ( element ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( builder . sorted (), Ġmutable Set . sorted ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmutable Set . to Mutable Set (). forEach Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Set . remove ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . remove ( element ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( builder . sorted (), Ġmutable Set . sorted ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( builder . isEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġiterator Tests () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġpersistent HashSet Of < Int >(). builder () ĊĠĠĠĠĠĠĠ ĠassertFalse ( builder . iterator (). hasNext ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġmutable Set Ġ= Ġmutable Set Of < Int >() ĊĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠRandom () ĊĊĠĠĠĠĠĠĠ Ġval Ġelements ToAdd Ġ= Ġ 2 0 0 0 ĊĠĠĠĠĠĠĠ Ġrepeat ( times Ġ= Ġelements ToAdd ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġrandom . nextInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Set . add ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add ( element ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġiterator Ġ= Ġbuilder . iterator () ĊĠĠĠĠĠĠĠ Ġmutable Set . to Mutable Set (). forEach Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Set . remove ( element ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdid Remove Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! did Remove Ġ&& Ġiterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( iterator . next () Ġ== Ġelement ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdid Remove Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! did Remove ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator Ġ= Ġbuilder . iterator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( did Remove ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( mutable Set . size , Ġbuilder . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( mutable Set . sorted (), Ġbuilder . sorted ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( builder . isEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġremove Tests () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġpersistent HashSet Of < Int >(). builder () ĊĊĠĠĠĠĠĠĠ Ġval Ġelements ToAdd Ġ= Ġ 1 0 0 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġrepeat ( times Ġ= Ġelements ToAdd ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add ( index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrepeat ( times Ġ= Ġelements ToAdd ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( elements ToAdd Ġ- Ġindex , Ġbuilder . size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( builder . contains ( index )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . remove ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( builder . contains ( index )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcontains Tests () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġpersistent HashSet Of < String >(). builder () ĊĊĠĠĠĠĠĠĠ Ġval Ġelements ToAdd Ġ= Ġ 1 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġrepeat ( times Ġ= Ġelements ToAdd ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add ( index . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( builder . contains ( i . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrepeat ( times Ġ= Ġelements ToAdd ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġelements ToAdd Ġ- Ġ 1 Ġdown To Ġindex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( builder . contains ( i . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . remove ( index . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġadd Tests () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġset Ġ= Ġpersistent HashSet Of < Int >(). builder () ĊĊĠĠĠĠĠĠĠ Ġval Ġelements ToAdd Ġ= Ġ 5 0 0 0 ĊĠĠĠĠĠĠĠ Ġrepeat ( times Ġ= Ġelements ToAdd ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . add ( index Ġ* Ġ 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġindex Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( set . contains ( i Ġ+ Ġindex )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset . remove ( i Ġ+ Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( set . contains ( i Ġ+ Ġindex )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( set . contains ( i Ġ+ Ġindex Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset . add ( i Ġ+ Ġindex Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( set . contains ( i Ġ+ Ġindex Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrepeat ( times Ġ= Ġelements ToAdd ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġindex Ġuntil Ġelements ToAdd Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġelements ToAdd Ġ- Ġindex Ġ+ Ġi ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( set . contains ( expected )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( set . contains ( expected Ġ- Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset . remove ( expected ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset . add ( expected Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( set . contains ( expected Ġ- Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . remove ( elements ToAdd Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcollision Tests () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġpersistent HashSet Of < Object Wrapper < Int >> (). builder () ĊĊĠĠĠĠĠĠĠ Ġval Ġe Gen Ġ= ĠWrapper Generator < Int >( 2 0 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġfun Ġwrapper ( element : ĠInt ): ĠObject Wrapper < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġe Gen . wrapper ( element ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġelements ToAdd Ġ= Ġ 1 0 0 0 0 0 ĠĠ Ġ/// Ġshould Ġbe Ġmore Ġthan Ġe Gen . hashCode Upper Bound ĊĠĠĠĠĠĠĠ Ġrepeat ( times Ġ= Ġelements ToAdd ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add ( wrapper ( index )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( builder . contains ( wrapper ( index ))) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( index Ġ+ Ġ 1 , Ġbuilder . size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add ( wrapper ( index )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( index Ġ+ Ġ 1 , Ġbuilder . size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcollisions Ġ= Ġe Gen . wrapper sBy HashCode ( wrapper ( index ). hashCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( coll isions . contains ( wrapper ( index ))) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( key Ġin Ġcollisions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( builder . contains ( wrapper ( index ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrepeat ( times Ġ= Ġelements ToAdd ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcollisions Ġ= Ġe Gen . wrapper sBy HashCode ( wrapper ( index ). hashCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( coll isions . contains ( wrapper ( index ))) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! builder . contains ( wrapper ( index ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( wrapper Ġin Ġcollisions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( builder . contains ( wrapper )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( wrapper Ġin Ġcollisions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( builder . contains ( wrapper )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( builder . remove ( Object Wrapper ( wrapper . obj . inv (), Ġwrapper . hashCode ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( builder . contains ( wrapper )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( builder . remove ( wrapper )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( builder . contains ( wrapper )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( builder . isEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrandom Operations Tests () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Gen Ġ= Ġmutable ListOf ( List ( 2 0 ) Ġ{ Ġpersistent HashSet Of < Object Wrapper < Int >>() Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġmutable ListOf ( List ( 2 0 ) Ġ{ Ġset Of < Object Wrapper < Int >>() Ġ}) ĊĊĠĠĠĠĠĠĠ Ġrepeat ( times Ġ= Ġ 1 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠRandom () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuild ers Ġ= Ġmap Gen . last (). map Ġ{ Ġit . builder () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsets Ġ= Ġbuild ers . map Ġ{ Ġit . to Mutable Set () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperation Count Ġ= Ġ 2 0 0 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash Codes Ġ= ĠList ( operation Count Ġ/ Ġ 2 ) Ġ{ Ġrandom . nextInt () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( times Ġ= Ġoperation Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġrandom . nextInt ( sets . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset Ġ= Ġsets [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġbuild ers [ index ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperation Type Ġ= Ġrandom . next Double () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠhashCode Index Ġ= Ġrandom . nextInt ( hash Codes . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= ĠObject Wrapper ( random . nextInt (), Ġhash Codes [ hashCode Index ]) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshould Remove Ġ= Ġoperation Type Ġ< Ġ 0 . 3 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Remove Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( set . remove ( element ), Ġbuilder . remove ( element )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( set . add ( element ), Ġbuilder . add ( element )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( set . size , Ġbuilder . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( set . contains ( element ), Ġbuilder . contains ( element )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( set . sorted (), Ġbuilder . sorted ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Gen . add ( Ġbuild ers . map Ġ{ Ġit . build () Ġ} Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected . add ( Ġmap Gen . last (). map Ġ{ Ġit . to Mutable Set () Ġ} Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( sets . max By Ġ{ Ġit . size Ġ} ?. size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmap Gen . forEach Indexed Ġ{ Ġindex , Ġmaps Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected [ index ]. map Ġ{ Ġit . sorted () Ġ}, Ġmaps . map Ġ{ Ġit . sorted () Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }