/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠSpotify ĠAB . Ċ Ġ* Ċ Ġ* ĠLicensed Ġto Ġthe ĠApache ĠSoftware ĠFoundation Ġ( ASF ) Ġunder Ġone Ċ Ġ* Ġor Ġmore Ġcontributor Ġlicense Ġagreements . Ġ ĠSee Ġthe ĠNOTICE Ġfile Ċ Ġ* Ġdistributed Ġwith Ġthis Ġwork Ġfor Ġadditional Ġinformation Ċ Ġ* Ġregarding Ġcopyright Ġownership . Ġ ĠThe ĠASF Ġlicenses Ġthis Ġfile Ċ Ġ* Ġto Ġyou Ġ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 Ġcom . spotify . diff user . f user Ċ Ċ import Ġcom . spotify . diff user . Gen Utils . integer Lists Ċ import Ġcom . spotify . diff user . f user . F user . from Ċ import Ġcom . spotify . diff user . f user . F user . from All Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Test Ċ import Ġorg . quick the ories . With Quick The ories Ċ import Ġjava . util . Random Ċ Ċ class ĠF user From All Test Ġ: ĠWith Quick The ories Ġ{ ĊĊĠĠĠ Ġclass ĠL aws Ġ: ĠF user L aws () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġidentity F user ( source : ĠSource < Int >) Ġ= Ġfrom All ( listOf < F user < Int >>( from ( source ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` from All () Ġcombin es Ġmultiple ĠF users Ġinto Ġone `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġfrom All ( f users ). connect Ġ{ Ġoutput ( it ) Ġ} Ġ== Ġf users . map Ġ{ Ġf user Ġ-> Ġf user . connect Ġ{ Ġoutput ( it ) Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġqt (). for All ( integer Lists , Ġintegers (). between ( 0 , Ġ 1 0 ), Ġlong s (). all ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. check Ġ{ Ġinput , ĠnumberOf F users , Ġseed Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrnd Ġ= ĠRandom ( seed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsources Ġ= Ġ( 1 .. numberOf F users ). map Ġ{ ĠTest Source () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf users Ġ= Ġsources . map Ġ{ Ġsource Ġ-> Ġfrom ( source ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput L hs Ġ= Ġmutable ListOf < Int >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput R hs Ġ= Ġmutable ListOf < Int >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠL HS : Ġfrom All ( f users ). connect Ġ{ Ġoutput ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdis posable L hs Ġ= Ġfrom All ( f users ). connect Ġ{ Ġoutput L hs . add ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRHS : Ġf users . map Ġ{ Ġf user Ġ-> Ġf user . connect Ġ{ Ġoutput ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdis pos ables R hs Ġ= Ġf users . map Ġ{ Ġf user Ġ-> Ġf user . connect Ġ{ Ġoutput R hs . add ( it ) Ġ} Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . forEach Ġ{ Ġn Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sources . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom Index Ġ= ĠMath . abs ( rnd . nextInt ( sources . size )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġsources [ random Index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . emit ( n ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis posable L hs . dispose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis pos ables R hs . forEach Ġ{ Ġit . dispose () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( output R hs , Ġoutput L hs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput L hs Ġ== Ġoutput R hs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` from All () Ġdis poses Ġall Ġchild ĠF users Ġwhen Ġdisposed `() Ġ{ ĊĠĠĠĠĠĠĠ Ġqt (). for All ( inte gers (). between ( 0 , Ġ 1 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. check Ġ{ ĠnumberOf F users Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsources Ġ= Ġ( 1 .. numberOf F users ). map Ġ{ ĠDis posable Source () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf users Ġ= Ġsources . map Ġ{ Ġsource Ġ-> Ġfrom ( source ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= Ġfrom All ( f users ). connect Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis posable . dispose () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsources . all Ġ{ Ġit . is Disposed Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ