package Ġio . kot est . property . ar bitrary Ċ Ċ import Ġio . kot est . properties . Gen Ċ import Ġio . kot est . property . Random Source Ċ import Ġio . kot est . property . Sample Ċ import Ġio . kot est . property . Shrink er Ċ import Ġio . kot est . property . sample Of Ċ import Ġkotlin . jvm . Jvm Over loads Ċ Ċ /** Ċ Ġ* ĠReturns Ġan Ġ[ Ar b ] Ġwhose Ġvalues Ġare Ġchosen Ġrandomly Ġfrom Ġthose Ġin Ġthe Ġsupplied Ġcollection . Ċ Ġ* ĠMay Ġnot Ġcover Ġall Ġitems . ĠIf Ġyou Ġwant Ġan Ġex haustive Ġselection Ġfrom Ġthe Ġlist , Ġsee Ġ[ Ex haustive . collection ] Ċ Ġ*/ Ċ fun Ġ< T > ĠA rb . Companion . collection ( collection : ĠCollection < T >): ĠA rb < T > Ġ= Ġar b Ġ{ Ġcollection . random ( it . random ) Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġan Ġ[ Ar b ] Ġwhose Ġof Ġvalues Ġare Ġa Ġset Ġof Ġvalues Ġgenerated Ġby Ġthe Ġgiven Ġar b . Ċ Ġ* ĠThe Ġsize Ġof Ġeach Ġset Ġis Ġdetermined Ġrandomly Ġup Ġto Ġthe Ġspecified Ġ[ max ]. Ċ Ġ*/ Ċ @ Jvm Over loads Ċ fun Ġ< T > ĠGen . Companion . set ( arb : ĠA rb < T >, ĠmaxSize : ĠInt Ġ= Ġ 1 0 0 ): ĠA rb < Set < T >> Ġ= Ġobject Ġ: ĠA rb < Set < T >> Ġ{ ĊĊĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġrequire ( maxSize Ġ>= Ġ 0 ) Ġ{ Ġ" maxSize Ġmust Ġbe Ġpositive " Ġ} ĊĠĠ Ġ} ĊĊĠĠ Ġoverride Ġfun Ġedge cases (): ĠList < Set < T >> Ġ= ĠlistOf ( arb . edge cases (). take ( maxSize ). toSet ()) ĊĠĠ Ġoverride Ġfun Ġsample ( rs : ĠRandom Source ): ĠSample < Set < T >> Ġ{ ĊĠĠĠĠĠ Ġval Ġsize Ġ= Ġrs . random . nextInt ( maxSize ) ĊĠĠĠĠĠ Ġval Ġset Ġ= Ġgenerate Sequence Ġ{ Ġar b . sample ( rs ) Ġ}. map Ġ{ Ġit . value Ġ}. take ( size ). toList (). toSet () ĊĠĠĠĠĠ Ġreturn ĠSample ( set ) ĊĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġan Ġ[ Ar b ] Ġwhose Ġof Ġvalues Ġare Ġa Ġlist Ġof Ġvalues Ġgenerated Ġby Ġthe Ġgiven Ġar b . Ċ Ġ* ĠThe Ġsize Ġof Ġeach Ġlist Ġis Ġdetermined Ġrandomly Ġup Ġto Ġthe Ġspecified Ġ[ max ]. Ċ Ġ* Ċ Ġ* ĠSh rink ing Ġis Ġperformed Ġby Ġremoving Ġelements Ġfrom Ġthe Ġlist Ġuntil Ġthe Ġempty Ġlist . Ċ Ġ*/ Ċ @ Jvm Over loads Ċ fun Ġ< A > ĠA rb . Companion . list ( arb : ĠA rb < A >, ĠmaxSize : ĠInt Ġ= Ġ 1 0 0 ): ĠA rb < List < A >> Ġ= Ġobject Ġ: ĠA rb < List < A >> Ġ{ ĊĊĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġrequire ( maxSize Ġ>= Ġ 0 ) Ġ{ Ġ" maxSize Ġmust Ġbe Ġpositive " Ġ} ĊĠĠ Ġ} ĊĊĠĠ Ġoverride Ġfun Ġedge cases (): ĠList < List < A >> Ġ= ĠlistOf ( arb . edge cases (). take ( maxSize ). toList ()) ĊĊĠĠ Ġoverride Ġfun Ġsample ( rs : ĠRandom Source ): ĠSample < List < A >> Ġ{ ĊĠĠĠĠĠ Ġval Ġsize Ġ= Ġrs . random . nextInt ( maxSize ) ĊĠĠĠĠĠ Ġval Ġlist Ġ= Ġgenerate Sequence Ġ{ Ġar b . sample ( rs ) Ġ}. map Ġ{ Ġit . value Ġ}. take ( size ). toList () ĊĠĠĠĠĠ Ġreturn Ġsample Of ( list , ĠList Shrink er ()) ĊĠĠ Ġ} Ċ } Ċ Ċ class ĠList Shrink er < A > Ġ: ĠSh rink er < List < A >> Ġ{ ĊĠĠ Ġoverride Ġfun Ġshrink ( value : ĠList < A >): ĠList < List < A >> Ġ{ ĊĠĠĠĠĠ Ġreturn Ġif Ġ( value . isEmpty ()) Ġempty List () Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . take Last ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . take ( value . size Ġ/ Ġ 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . take ( value . size Ġ/ Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . take ( value . size Ġ* Ġ 2 Ġ/ Ġ 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . drop Last ( 1 ) ĊĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} Ċ } Ċ