package Ġio . github . ser pro 6 9 . k faker Ċ Ċ import Ġjava . util .* Ċ import Ġkotlin . experimental . and Ċ import Ġkotlin . experimental . or Ċ import Ġkotlin . random . as Kotlin Random Ċ Ċ /** Ċ Ġ* ĠWrapper Ġaround Ġ[ Random ] Ġthat Ġalso Ġcontains Ġsome Ġadditional Ġfunctions Ġnot Ġcovered Ġby Ġ[ Random ]. Ċ Ġ* Ċ Ġ* ĠIf Ġtwo Ġinstances Ġof Ġthis Ġ[ Random Service ] Ġare Ġcreated Ġwith Ġthe Ġsame Ġseed , Ċ Ġ* Ġand Ġthe Ġsame Ġsequence Ġof Ġmethod Ġcalls Ġis Ġmade Ġfor Ġeach , Ċ Ġ* Ġthen Ġthey Ġwill Ġgenerate Ġand Ġreturn Ġidentical Ġsequences Ġof Ġvalues . Ċ Ġ* Ċ Ġ* ĠInstances Ġof Ġ[ Random Service ] Ġare Ġnot Ġcrypto graph ically Ġsecure Ġby Ġdefault . Ċ Ġ* ĠConsider Ġpassing Ġ[ java . security . Secure Random ] Ġto Ġthe Ġconstructor Ġof Ġthis Ġ[ Random Service ] Ċ Ġ* Ġto Ġget Ġa Ġcrypto graph ically Ġsecure Ġpseudo - random Ġgenerator . Ċ Ġ*/ Ċ class ĠRandom Service Ġinternal Ġconstructor ( private Ġval Ġrandom : ĠRandom ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġalphabet ic Source Ġ= Ġ" abcdefgh ijkl mnopqrst uvw xyz " ĊĠĠĠ Ġprivate Ġval Ġal phanumeric Source Ġ= Ġ(' A ' .. ' Z ') Ġ+ Ġ(' a ' .. ' z ') Ġ+ Ġ(' 0 ' .. ' 9 ') ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġnext Ġp seud or andom , Ġuniform ly Ġdistributed Ġ[ Int ] Ġvalue Ġfrom Ġthis Ġ[ random ] Ġnumber Ġgenerator 's Ġsequence . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext Int () Ġ= Ġrandom . nextInt () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġp seud or andom , Ġuniform ly Ġdistributed Ġ[ Int ] Ġvalue Ġbetween Ġ` 0 ` Ġ( inclusive ) ĊĠĠĠĠ Ġ* Ġand Ġthe Ġspecified Ġ[ bound ] Ġ( exclusive ), ĊĠĠĠĠ Ġ* Ġdrawn Ġfrom Ġthis Ġ[ random ] Ġnumber Ġgenerator 's Ġsequence . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext Int ( bound : ĠInt ) Ġ= Ġrandom . nextInt ( bound ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġp seud or andom , Ġuniform ly Ġdistributed Ġ[ Int ] Ġvalue Ġwithin Ġthe Ġspecified Ġint Ġ[ range ] Ġ( inclusive ), ĊĠĠĠĠ Ġ* Ġdrawn Ġfrom Ġthis Ġ[ random ] Ġnumber Ġgenerator 's Ġsequence . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext Int ( int Range : ĠInt Range ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlower Bound Ġ= Ġrequire NotNull ( int Range . min OrNull ()) ĊĠĠĠĠĠĠĠ Ġval Ġupper Bound Ġ= Ġrequire NotNull ( int Range . max OrNull ()) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnext Int ( lower Bound , Ġupper Bound ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġp seud or andom , Ġuniform ly Ġdistributed Ġ[ Int ] Ġvalue Ġbetween Ġ[ min ] Ġ( inclusive ) Ġand Ġ[ max ] Ġ( inclusive ), ĊĠĠĠĠ Ġ* Ġdrawn Ġfrom Ġthis Ġ[ random ] Ġnumber Ġgenerator 's Ġsequence . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext Int ( min : ĠInt , Ġmax : ĠInt ) Ġ= Ġrandom . nextInt ( max Ġ- Ġmin Ġ+ Ġ 1 ) Ġ+ Ġmin ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġa Ġpseudo - random ly Ġselected Ġvalue Ġfrom Ġthe Ġ[ list ] Ġof Ġvalues . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġrandom Value ( list : ĠList < T >) Ġ= Ġlist [ nextInt ( list . size )] ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġa Ġpseudo - random ly Ġselected Ġvalue Ġfrom Ġthe Ġ[ array ] Ġof Ġvalues . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġrandom Value ( array : ĠArray < T >) Ġ= Ġarray [ nextInt ( array . size )] ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġnext Ġp seud or andom , Ġuniform ly Ġdistributed Ġ[ Char ] Ġvalue ĊĠĠĠĠ Ġ* Ġthat Ġcorresponds Ġto Ġa Ġletter Ġin Ġthe ĠEnglish Ġalphabet . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġupper Ġreturns Ġthe Ġ[ Char ] Ġin Ġupper - case Ġif Ġset Ġto Ġ` true `, Ġand Ġin Ġlower - case Ġotherwise ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext Letter ( upper : ĠBoolean ): ĠChar Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġif Ġ( upper ) Ġalphabet ic Source . uppercase () Ġelse Ġalphabet ic Source ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsource [ nextInt ( source . length )] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġ[ String ] Ġwith Ġthe Ġspecified Ġ[ length ] Ġconsisting Ġof Ġa Ġpseudo - random ly Ġgenerated ĠEnglish Ġalphabet Ġand Ġnumbers . ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġempty Ġstring Ġfor Ġa Ġ` length Ġ< Ġ 1 `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrandom Al phanumeric ( length : ĠInt Ġ= Ġ 1 0 ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( length Ġ< Ġ 1 ) Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġreturn Ġ( 1 .. length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġal phanumeric Source . random ( this . random . as Kotlin Random ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġnext Ġp seud or andom , Ġuniform ly Ġdistributed Ġ[ Boolean ] Ġvalue ĊĠĠĠĠ Ġ* Ġfrom Ġthis Ġrandom Ġnumber Ġgenerator 's Ġsequence . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġvalues Ġ` true ` Ġand Ġ` false ` Ġare Ġproduced Ġwith Ġ( approx imately ) Ġequal Ġprobability . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext Boolean () Ġ= Ġrandom . next Boolean () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġnext Ġp seud or andom , Ġuniform ly Ġdistributed Ġ[ Long ] Ġvalue Ġfrom Ġthis Ġ[ random ] Ġnumber Ġgenerator 's Ġsequence . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext Long () Ġ= Ġrandom . next Long () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġp seud or andom , Ġuniform ly Ġdistributed Ġ[ Long ] Ġvalue Ġbetween Ġ` 0 ` Ġ( inclusive ), ĊĠĠĠĠ Ġ* Ġand Ġthe Ġspecified Ġ[ bound ] Ġvalue Ġ( exclusive ), ĊĠĠĠĠ Ġ* Ġdrawn Ġfrom Ġthis Ġ[ random ] Ġnumber Ġgenerator 's Ġsequence . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġ` bound Ġ< Ġ 0 ` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext Long ( bound : ĠLong ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( bound Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġvalue : ĠLong ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbits Ġ= Ġ( next Long (). sh l ( 1 )). shr ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġbits Ġ% Ġbound ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( bits Ġ- Ġvalue Ġ+ Ġ( bound Ġ- Ġ 1 ) Ġ< Ġ 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġthrow ĠIllegalArgumentException (" Bound Ġbound Ġmust Ġbe Ġgreater Ġthan Ġ 0 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġnext Ġp seud or andom , Ġuniform ly Ġdistributed Ġ[ Float ] Ġvalue Ġbetween Ġ` 0 . 0 ` Ġand Ġ` 1 . 0 ` ĊĠĠĠĠ Ġ* Ġfrom Ġthis Ġ[ random ] Ġnumber Ġgenerator 's Ġsequence . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext Float () Ġ= Ġrandom . next Float () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġnext Ġp seud or andom , Ġuniform ly Ġdistributed Ġ[ Double ] Ġvalue Ġbetween Ġ` 0 . 0 ` Ġand Ġ` 1 . 0 ` ĊĠĠĠĠ Ġ* Ġfrom Ġthis Ġ[ random ] Ġnumber Ġgenerator 's Ġsequence . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext Double () Ġ= Ġrandom . next Double () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġnext Ġp seud or andom , Ġuniform ly Ġdistributed Ġ[ Char ] Ġvalue , ĊĠĠĠĠ Ġ* Ġfrom Ġthis Ġ[ random ] Ġnumber Ġgenerator 's Ġsequence . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext Char () Ġ= Ġnext Int (). to Char () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġ[ String ] Ġwith Ġthe Ġspecified Ġ[ length ] Ġconsisting Ġof Ġpseudo - random ly Ġgenerated Ġcharacters . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġnext String ( length : ĠInt Ġ= Ġ 1 0 0 ) Ġ= ĠList ( length ) Ġ{ Ġnext Char (). toString () Ġ}. join ToString ("") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġrandomly Ġselected Ġenum Ġentry Ġof Ġtype Ġ[ E ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠE Ġ: ĠEnum < E >> Ġnext Enum (): ĠE Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx : ĠInt Ġ= Ġnext Int ( enum Values < E >(). size ) ĊĠĠĠĠĠĠĠ Ġreturn Ġenum Values < E >() [ x ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġpseudo - random ly Ġselected Ġenum Ġentry Ġof Ġtype Ġ[ E ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< E Ġ: ĠEnum < E >> Ġnext Enum ( enum : ĠClass < E >): ĠE Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrandom Value ( enum . enum Constants ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġpseudo - random ly Ġselected Ġenum Ġentry Ġfrom Ġan Ġ[ Array ] Ġof Ġ[ E ] Ġtype Ġ[ values ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< E Ġ: ĠEnum < E >> Ġnext Enum ( values : ĠArray < E >): ĠE Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrandom Value ( values ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġpseudo - random ly Ġselected Ġ[ enum ] Ġclass Ġof Ġtype Ġ[ E ] Ġbased Ġon Ġ[ predicate ] Ġfor Ġ[ E ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġtail rec Ġfun Ġ< E Ġ: ĠEnum < E >> Ġnext Enum ( enum : ĠClass < E >, Ġpredicate : Ġ( E ) Ġ-> ĠBoolean ): ĠE Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġenum Class Ġ= Ġnext Enum ( enum ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( predicate ( enum Class )) Ġenum Class Ġelse Ġnext Enum ( enum , Ġpredicate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġrandomly Ġselected Ġenum Ġentry Ġof Ġtype Ġ[ E ] Ġexcluding Ġa Ġparticular Ġclass Ġby Ġit 's ĠclassName . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠE Ġ: ĠEnum < E >> Ġnext Enum ( exclude Name : ĠString ): ĠE Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe : ĠE Ġ= Ġnext Enum () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . name . lowercase () Ġ!= Ġexclude Name . lowercase ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġnext Ġp seud or andom Ġ[ UUID ] Ġas Ġ[ String ] Ġtaking Ġthe Ġseed Ġof Ġthis Ġ[ random ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext UUID (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrandom Bytes Ġ= ĠByteArray ( 1 6 ) ĊĠĠĠĠĠĠĠ Ġrandom . next Bytes ( random Bytes ) ĊĠĠĠĠĠĠĠ Ġrandom Bytes [ 6 ] Ġ= Ġrandom Bytes [ 6 ] Ġand Ġ 0 x 0 f Ġ// Ġclear Ġversion ĊĠĠĠĠĠĠĠ Ġrandom Bytes [ 6 ] Ġ= Ġrandom Bytes [ 6 ] Ġor Ġ 0 x 4 0 Ġ// Ġset Ġto Ġversion ĊĠĠĠĠĠĠĠ Ġrandom Bytes [ 8 ] Ġ= Ġrandom Bytes [ 8 ] Ġand Ġ 0 x 3 f Ġ// Ġclear Ġvariant ĊĠĠĠĠĠĠĠ Ġrandom Bytes [ 8 ] Ġ= Ġrandom Bytes [ 8 ] Ġor Ġ 0 x 8 0 . to Byte () Ġ// Ġset Ġto ĠI ET F Ġvariant ĊĠĠĠĠĠĠĠ Ġreturn ĠUUID . name UUID From Bytes ( random Bytes ). toString () ĊĠĠĠ Ġ} Ċ } Ċ