//@ file : Suppress (" USE LESS _ IS _ CHECK ") Ċ // Ċ // package Ġcom . sk sam uel . kot est . properties Ċ // Ċ // import Ġcom . sk sam uel . kot est . properties . X . A Ċ // import Ġcom . sk sam uel . kot est . properties . X . B Ċ // import Ġio . kot est . inspect ors . for All Ċ // import Ġio . kot est . matchers . b ooleans . shouldBe True Ċ // import Ġio . kot est . matchers . collections . contain Ċ // import Ġio . kot est . matchers . collections . should Contain Ċ // import Ġio . kot est . matchers . collections . should Contain All Ċ // import Ġio . kot est . matchers . collections . should Contain Any Of Ċ // import Ġio . kot est . matchers . collections . should Have At Most Size Ċ // import Ġio . kot est . matchers . comp ar ables . be GreaterThan Ċ // import Ġio . kot est . matchers . comp ar ables . gte Ċ // import Ġio . kot est . matchers . comp ar ables . lt Ċ // import Ġio . kot est . matchers . double s . shouldBe GreaterThan OrEqual Ċ // import Ġio . kot est . matchers . double s . shouldBe LessThan OrEqual Ċ // import Ġio . kot est . matchers . float s . shouldBe GreaterThan OrEqual Ċ // import Ġio . kot est . matchers . float s . shouldBe LessThan OrEqual Ċ // import Ġio . kot est . matchers . ints . shouldBe LessThan OrEqual Ċ // import Ġio . kot est . matchers . sequences . should Contain All In Any Order Ċ // import Ġio . kot est . matchers . string . include Ċ // import Ġio . kot est . properties . Gen Ċ // import Ġio . kot est . properties . assert All Ċ // import Ġio . kot est . properties . bind Ċ // import Ġio . kot est . properties . choose Ċ // import Ġio . kot est . properties . constant Ċ // import Ġio . kot est . properties . create Ċ // import Ġio . kot est . properties . default Ċ // import Ġio . kot est . properties . double Ċ // import Ġio . kot est . properties . duration Ċ // import Ġio . kot est . properties . file Ċ // import Ġio . kot est . properties . for All Ċ // import Ġio . kot est . properties . for ClassName Ċ // import Ġio . kot est . properties . from Ċ // import Ġio . kot est . properties . generate Infinite Sequence Ċ // import Ġio . kot est . properties . int Ċ // import Ġio . kot est . properties . list Ċ // import Ġio . kot est . properties . local Date Ċ // import Ġio . kot est . properties . local DateTime Ċ // import Ġio . kot est . properties . local Time Ċ // import Ġio . kot est . properties . map Ċ // import Ġio . kot est . properties . negative Inte gers Ċ // import Ġio . kot est . properties . next Ċ // import Ġio . kot est . properties . next Print able String Ċ // import Ġio . kot est . properties . numeric Doubles Ċ // import Ġio . kot est . properties . numeric Float s Ċ // import Ġio . kot est . properties . one Of Ċ // import Ġio . kot est . properties . period Ċ // import Ġio . kot est . properties . positive Inte gers Ċ // import Ġio . kot est . properties . samples Ċ // import Ġio . kot est . properties . set Ċ // import Ġio . kot est . properties . take Ċ // import Ġio . kot est . properties . unique Random s Ċ // import Ġio . kot est . shouldBe Ċ // import Ġio . kot est . should Have Ċ // import Ġio . kot est . should Not Be Ċ // import Ġio . kot est . should Throw Ċ // import Ġio . kot est . specs . Word Spec Ċ // import Ġio . kot est . tables . headers Ċ // import Ġio . kot est . tables . row Ċ // import Ġio . kot est . tables . table Ċ // import Ġjava . io . File Ċ // import Ġjava . time . Duration Ċ // import Ġjava . time . LocalDate Ċ // import Ġjava . time . LocalDateTime Ċ // import Ġjava . time . Local Time Ċ // import Ġjava . time . Period Ċ // import Ġjava . util . Random Ċ // Ċ // class ĠGen Test Ġ: ĠWord Spec () Ġ{ Ċ // Ġ Ġinit Ġ{ Ċ // ĠĠĠ Ġ" next Print able String " Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġ" give Ġout Ġa Ġargument Ġlong Ġstring ". config ( inv ocations Ġ= Ġ 1 0 0 , Ġthreads Ġ= Ġ 8 ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= Ġkotlin . random . Random . Default Ċ // ĠĠĠĠĠĠĠ Ġvar Ġrand Ġ= Ġrandom . nextInt ( 1 0 0 0 0 ) Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( rand Ġ<= Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠ Ġrand Ġ= Ġ 0 Ġ- Ġrand Ċ // ĠĠĠĠĠĠĠ Ġval Ġstring Ġ= Ġrandom . next Print able String ( rand ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġstring . forEach Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġit . toInt () ĠshouldBe Ġg te ( 3 2 ) Ċ // ĠĠĠĠĠĠĠĠĠ Ġit . toInt () ĠshouldBe Ġlt ( 1 2 7 ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġstring . length ĠshouldBe Ġrand Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġ" Gen . for ClassName " Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġ" g ives Ġthe Ġright Ġresult " Ġ{ Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġtable 1 Ġ= Ġtable ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġheaders (" name "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" java . lang . String "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" java . lang . Integer "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" java . lang . Short "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" java . lang . Byte "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" java . lang . Long "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" java . lang . Boolean "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" java . lang . Float "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" java . lang . Double ") Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġio . kot est . tables . for All ( table 1 ) Ġ{ Ġclazz Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠ ĠGen . for ClassName ( clazz ). random (). first OrNull ()?. java Class ?. name ĠshouldBe Ġclazz Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġtable 2 Ġ= Ġtable ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġheaders (" name "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" kotlin . String "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" kotlin . Short "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" kotlin . Byte "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" kotlin . Long "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" kotlin . Boolean "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" kotlin . Float "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" kotlin . Double ") Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġio . kot est . tables . for All ( table 2 ) Ġ{ Ġclazz Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= Ġclazz . split (". "). last () Ċ // ĠĠĠĠĠĠĠĠĠ ĠGen . for ClassName ( clazz ). random (). first OrNull ()?. java Class ?. name ĠshouldBe Ġ" java . lang .$ tmp " Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ ĠGen . for ClassName (" kotlin . Int "). random (). first OrNull ()?. java Class ?. name ĠshouldBe Ġ" java . lang . Integer " Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ" throw Ġan Ġexception , Ġwith Ġa Ġwrong Ġclass " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġshould Throw < IllegalArgumentException > Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ ĠGen . for ClassName (" This . is . not . a . valid . class ") Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġ" Gen . create " Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġ" create Ġa ĠGenerator Ġwith Ġthe Ġgiven Ġfunction " Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠGen . create Ġ{ Ġ 5 Ġ}. random (). take ( 1 0 ). toList () ĠshouldBe ĠList ( 1 0 ) Ġ{ Ġ 5 Ġ} Ċ // ĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 Ċ // ĠĠĠĠĠĠĠ Ġval Ġgen Ġ= ĠGen . create Ġ{ Ġi ++ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġgen . random (). take ( 1 5 0 ). toList () ĠshouldBe ĠList ( 1 5 0 ) Ġ{ Ġit Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġ" Gen . default " Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġ" generate Ġthe Ġdefaults Ġfor Ġlist " Ġ{ Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġgen Ġ= ĠGen . default < List < Int >>() Ċ // ĠĠĠĠĠĠĠ Ġfor All ( 1 0 , Ġgen ) Ġ{ Ġinst Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠ Ġinst . for All Ġ{ Ġi Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ( i Ġis ĠInt ) ĠshouldBe Ġtrue Ċ // ĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠ Ġtrue Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" generate Ġthe Ġdefaults Ġfor Ġset " Ġ{ Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġgen Ġ= ĠGen . default < Set < String >>() Ċ // ĠĠĠĠĠĠĠ Ġfor All ( gen ) Ġ{ Ġinst Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠ Ġinst . for All Ġ{ Ġi Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ( i Ġis ĠString ) ĠshouldBe Ġtrue Ċ // ĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠ Ġtrue Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" use Ġfor Class Ġfor Ġeverything Ġelse " Ġ{ Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġtable Ġ= Ġtable ( headers (" name "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" java . lang . String "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" kotlin . String "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" java . lang . Integer "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" kotlin . Int "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" java . lang . Short "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" kotlin . Short "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" java . lang . Byte "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" kotlin . Byte "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" java . lang . Long "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" kotlin . Long "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" java . lang . Boolean "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" kotlin . Boolean "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" java . lang . Float "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" kotlin . Float "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" java . lang . Double "), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" kotlin . Double ")) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġio . kot est . tables . for All ( table ) Ġ{ Ġclazz Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= Ġclazz . split (".") Ċ // ĠĠĠĠĠĠĠĠĠ ĠGen . for ClassName ( clazz ). random (). first OrNull ()?. java Class ?. name Ġshould Have Ġinclude ( tmp [ tmp . size Ġ- Ġ 1 ]) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ" throw Ġan Ġexe ption , Ġwith Ġa Ġwrong Ġclass " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġshould Throw < IllegalArgumentException > Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ ĠGen . for ClassName (" This . is . not . a . valid . class ") Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Const Gen Ġ" Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġ" always Ġgenerate Ġthe Ġsame Ġthing " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġfor All ( Gen . constant ( 5 )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġit Ġ== Ġ 5 Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . or Null Ġ" Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġ" have Ġboth Ġvalues Ġand Ġnull s Ġgenerated " Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠGen . constant ( 5 ). or Null (). constants (). toSet () ĠshouldBe Ġset Of ( 5 , Ġnull ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġfun Ġ< T > ĠGen < T >. toList ( size : ĠInt ): ĠList < T > Ġ= Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠArrayList < T >( size ). also Ġ{ Ġlist Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( size ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ+= Ġrandom (). take ( 1 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ ĠGen . constant ( 5 ). or Null (). take ( 1 0 0 ). toList (). toSet () ĠshouldBe Ġset Of ( 5 , Ġnull ) Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . filter Ġ" Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġ" prevent Ġvalues Ġfrom Ġbeing Ġgenerated " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġfor All ( Gen . from ( listOf ( 1 , Ġ 2 , Ġ 5 )). filter Ġ{ Ġit Ġ!= Ġ 2 Ġ}) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġit Ġ!= Ġ 2 Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . map Ġ" Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġ" correct ly Ġtransform Ġthe Ġvalues " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġfor All ( Gen . constant ( 5 ). map Ġ{ Ġit Ġ+ Ġ 7 Ġ}) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġit Ġ== Ġ 1 2 Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . from Ġ" Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġ" correct ly Ġhandle Ġnull Ġvalues " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠlistOf ( null , Ġ 1 , 2 , 3 ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġgen Ġ= ĠGen . from ( list ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġfirst Elements Ġ= Ġgen . random (). take ( 1 0 0 ). toList () Ċ // ĠĠĠĠĠĠĠ Ġfirst Elements Ġshould Have Ġcontain ( null Ġas ĠInt ?) Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . constant " Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġ" handle Ġnull Ġvalue " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġfor All ( Gen . constant ( null Ġas ĠInt ? )) Ġ{ n Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠ Ġn Ġ== Ġnull Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . one Of " Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġ" correct ly Ġhandle Ġmultiple Ġgenerators " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġgen Ġ= ĠGen . one Of ( Gen . positive Inte gers (), ĠGen . negative Inte gers ()) Ċ // ĠĠĠĠĠĠĠ Ġvar Ġpositive Numbers Ġ= Ġ 0 Ċ // ĠĠĠĠĠĠĠ Ġvar Ġnegative Numbers Ġ= Ġ 0 Ċ // ĠĠĠĠĠĠĠ Ġfor All ( gen ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ> Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġpositive Numbers ++ Ċ // ĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it Ġ< Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġnegative Numbers ++ Ċ // ĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠ Ġit Ġshould Not Be Ġ 0 Ċ // ĠĠĠĠĠĠĠĠĠ Ġtrue Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġpositive Numbers ĠshouldBe Ġbe GreaterThan ( 1 ) Ċ // ĠĠĠĠĠĠĠ Ġnegative Numbers ĠshouldBe Ġbe GreaterThan ( 1 ) Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ" support Ġcovariance " Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠGen . one Of ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠGen . bind ( Gen . int (), ĠX :: A ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠGen . bind ( Gen . int (), ĠX :: B ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠGen . bind ( Gen . int (), ĠX :: C ) Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . numeric Doubles ( min , Ġmax )" Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġval Ġmin Ġ= Ġ 1 . 0 Ċ // ĠĠĠĠĠ Ġval Ġmax Ġ= Ġ 1 0 0 . 0 Ċ // Ċ // ĠĠĠĠĠ Ġ" Should Ġgenerate Ġonly Ġnumbers " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 1 0 _ 0 0 0 , ĠGen . numeric Doubles ( min , Ġmax )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġit . is Finite (). shouldBe True () Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" Should Ġgenerate Ġeverything Ġ>= Ġmin " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġvar Ġmin Generated Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 1 0 _ 0 0 0 , ĠGen . numeric Doubles ( min , Ġmax )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġif ( it Ġ== Ġmin ) Ġmin Generated Ġ= Ġtrue Ċ // ĠĠĠĠĠĠĠĠĠ Ġit ĠshouldBe GreaterThan OrEqual Ġmin Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġmin Generated . shouldBe True () Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" Should Ġgenerate Ġeverything Ġ<= Ġmax " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 1 0 _ 0 0 0 , ĠGen . numeric Doubles ( min , Ġmax )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġit ĠshouldBe LessThan OrEqual Ġmax Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . numeric Float s ( min , Ġmax )" Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġval Ġmin Ġ= Ġ 1 . 0 f Ċ // ĠĠĠĠĠ Ġval Ġmax Ġ= Ġ 1 0 0 . 0 f Ċ // Ċ // ĠĠĠĠĠ Ġ" Should Ġgenerate Ġonly Ġnumbers " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 1 0 _ 0 0 0 , ĠGen . numeric Float s ( min , Ġmax )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġit . is Finite (). shouldBe True () Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" Should Ġgenerate Ġeverything Ġ>= Ġmin " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 1 0 _ 0 0 0 , ĠGen . numeric Float s ( min , Ġmax )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġit ĠshouldBe GreaterThan OrEqual Ġmin Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" Should Ġgenerate Ġeverything Ġ<= Ġmax " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 1 0 _ 0 0 0 , ĠGen . numeric Float s ( min , Ġmax )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġit ĠshouldBe LessThan OrEqual Ġmax Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ Ċ // Ċ // ĠĠĠ Ġ" Gen . duration ( max Duration )" Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġ" Generate Ġonly Ġdur ations Ġ<= Ġmax Duration " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġmax Duration Ġ= ĠDuration . of Seconds ( 1 2 0 ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 1 0 _ 0 0 0 , ĠGen . duration ( max Duration )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġit Ġ<= Ġmax Duration Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" Generate Ġall Ġpossible Ġdur ations Ġin Ġthe Ġinterval Ġ[ 0 , Ġmax Duration [" Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġmax Duration Ġ= ĠDuration . of Seconds ( 1 2 0 ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġseconds List Ġ= Ġmutable Set Of < Long >() Ċ // Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 1 0 _ 0 0 0 , ĠGen . duration ( max Duration )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġseconds List Ġ+= Ġit . seconds Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġseconds List ĠshouldBe Ġ( 0 L .. 1 1 9 L ). toSet () Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" Be Ġthe Ġdefault Ġgenerator Ġfor ĠDuration " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 1 0 ) Ġ{ Ġ_: ĠDuration Ġ-> Ġ/* ĠNo Ġuse . ĠW on 't Ġreach Ġhere Ġif Ġunsupported Ġ*/ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ Ċ // Ċ // ĠĠĠ Ġ" Gen . take ( n )" Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġval Ġmocked Gen Ġ= Ġobject Ġ: ĠGen < Int > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconstants () Ġ= ĠlistOf ( 1 , Ġ 2 ) Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrandom ( seed : ĠLong ?) Ġ= Ġgenerate Infinite Sequence Ġ{ Ġ 3 Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġval Ġmocked Gen 2 Ġ= Ġobject Ġ: ĠGen < String > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconstants () Ġ= ĠlistOf (" 1 ", Ġ" 2 ", Ġ" 3 ", Ġ" 4 ") Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrandom ( seed : ĠLong ?) Ġ= Ġgenerate Infinite Sequence Ġ{ Ġ" 4 2 " Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" Take Ġconstants Ġfirst " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġmocked Gen . take ( 2 ) ĠshouldBe ĠlistOf ( 1 , Ġ 2 ) Ċ // ĠĠĠĠĠĠĠ Ġmocked Gen 2 . take ( 4 ) ĠshouldBe ĠlistOf (" 1 ", Ġ" 2 ", Ġ" 3 ", Ġ" 4 ") Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" Populate Ġwith Ġconstants Ġ+ Ġrandom Ġvalues Ġif Ġconstants Ġare Ġnot Ġenough " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġmocked Gen . take ( 5 ) ĠshouldBe ĠlistOf ( 1 , Ġ 2 , Ġ 3 , Ġ 3 , Ġ 3 ) Ċ // ĠĠĠĠĠĠĠ Ġmocked Gen 2 . take ( 8 ) ĠshouldBe ĠlistOf (" 1 ", Ġ" 2 ", Ġ" 3 ", Ġ" 4 ", Ġ" 4 2 ", Ġ" 4 2 ", Ġ" 4 2 ", Ġ" 4 2 ") Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" Throw Ġexception Ġif Ġthe Ġgenerator Ġcan 't Ġgenerate Ġthe Ġamount Ġrequested " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġsmall Gen Ġ= Ġobject Ġ: ĠGen < String > Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconstants () Ġ= ĠlistOf (" 1 ", Ġ" 2 ", Ġ" 3 ", Ġ" 4 ") Ċ // ĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrandom ( seed : ĠLong ?) Ġ= Ġsequence Of (" 4 2 ") Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġthrown Ġ= Ġshould Throw < IllegalStateException > Ġ{ Ġsmall Gen . take ( 1 0 ) Ġ} Ċ // ĠĠĠĠĠĠĠ Ġthrown . message ĠshouldBe Ġ" Gen Ġcould Ġonly Ġgenerate Ġ 5 Ġvalues Ġwhile Ġyou Ġrequested Ġ 1 0 ." Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" Return Ġan Ġempty Ġlist Ġif Ġamount Ġis Ġ 0 " Ġ{ Ċ // ĠĠĠĠĠĠĠĠ Ġmocked Gen . take ( 0 ). size ĠshouldBe Ġ 0 Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" Throw Ġexception Ġif Ġamount Ġ< Ġ 0 " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġshould Throw < IllegalArgumentException > Ġ{ Ġmocked Gen . take (- 1 ) Ġ} Ċ // ĠĠĠĠĠĠĠ Ġshould Throw < IllegalArgumentException > Ġ{ Ġmocked Gen . take (- 1 0 0 ) Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . next ( predicate )" Ġshould Ġ{ Ċ // Ċ // ĠĠĠĠĠ Ġval Ġmocked Gen Ġ= Ġobject Ġ: ĠGen < Int > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconstants () Ġ= ĠlistOf ( 1 , Ġ 2 ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġseq Ġ= ĠlistOf ( 3 , Ġ 4 , Ġ 5 , Ġ 6 ) Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrandom ( seed : ĠLong ?) Ġ= Ġgenerate Infinite Sequence Ġ{ Ġseq . random () Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" Take Ġa Ġrandom Ġvalue Ġstraight Ġfrom Ġrandom () Ġby Ġdefault " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġaccumulated Values Ġ= Ġmutable Set Of < Int >() Ċ // ĠĠĠĠĠĠĠ Ġrepeat ( 1 0 0 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġaccumulated Values . add ( mocked Gen . next ()) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġaccumulated Values ĠshouldBe Ġset Of ( 3 , Ġ 4 , Ġ 5 , Ġ 6 ) Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" Allow s Ġto Ġspecify Ġa Ġpredicate Ġto Ġfilter Ġon Ġthe Ġvalue " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġaccumulated Values Ġ= Ġmutable Set Of < Int >() Ċ // ĠĠĠĠĠĠĠ Ġrepeat ( 1 0 0 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġaccumulated Values . add ( mocked Gen . next Ġ{ Ġit Ġ> Ġ 4 Ġ}) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġaccumulated Values ĠshouldBe Ġset Of ( 5 , Ġ 6 ) Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . list ( maxSize )" Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġ" Generate Ġlists Ġof Ġlength Ġup Ġto Ġ 1 0 0 Ġby Ġdefault " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 1 0 _ 0 0 0 , ĠGen . list ( Gen . double ())) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġit . should Have At Most Size ( 1 0 0 ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ" Generate Ġlists Ġup Ġto Ġthe Ġgiven Ġlength " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 5 0 , ĠGen . choose ( 1 , Ġ 5 0 0 )) Ġ{ Ġsize : ĠInt Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠ Ġassert All ( 1 0 0 0 , ĠGen . list ( Gen . double (), Ġsize )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġit . should Have At Most Size ( size ) Ċ // ĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . set ( maxSize )" Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġ" Generate Ġsets Ġof Ġlength Ġup Ġto Ġ 1 0 0 Ġby Ġdefault " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 1 0 _ 0 0 0 , ĠGen . set ( Gen . double ())) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġit . should Have At Most Size ( 1 0 0 ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ" Generate Ġsets Ġup Ġto Ġthe Ġgiven Ġlength " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 5 0 , ĠGen . choose ( 1 , Ġ 5 0 0 )) Ġ{ Ġsize : ĠInt Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠ Ġassert All ( 1 0 0 0 , ĠGen . set ( Gen . double (), Ġsize )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġit . should Have At Most Size ( size ) Ċ // ĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . map ( key Gen , Ġvalue Gen , ĠmaxSize )" Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġval Ġkey Gen Ġ= ĠGen . int () Ċ // ĠĠĠĠĠ Ġval Ġvalue Gen Ġ= ĠGen . double () Ċ // ĠĠĠĠĠ Ġ" Generate Ġmaps Ġof Ġup Ġto Ġ 1 0 0 Ġelements Ġby Ġdefault " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 1 0 _ 0 0 0 , ĠGen . map ( key Gen , Ġvalue Gen )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġit . size . shouldBe LessThan OrEqual ( 1 0 0 ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ" Generate Ġmaps Ġof Ġup Ġto Ġthe Ġgiven Ġsize " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 5 0 , ĠGen . choose ( 1 , Ġ 5 0 0 )) Ġ{ Ġsize : ĠInt Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠ Ġassert All ( 1 0 0 0 , ĠGen . map ( key Gen , Ġvalue Gen , Ġsize )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġit . size . shouldBe LessThan OrEqual ( size ) Ċ // ĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . map ( key Value Gen , ĠmaxSize )" Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġval Ġkey Value Gen Ġ= ĠGen . int (). map Ġ{ ĠPair ( it , Ġit . toString ()) Ġ} Ċ // ĠĠĠĠĠ Ġ" Generate Ġmaps Ġof Ġup Ġto Ġ 1 0 0 Ġelements Ġby Ġdefault " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 1 0 _ 0 0 0 , ĠGen . map ( key Value Gen )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġit . size . shouldBe LessThan OrEqual ( 1 0 0 ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ" Generate Ġmaps Ġof Ġup Ġto Ġthe Ġgiven Ġsize " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġassert All ( 5 0 , ĠGen . choose ( 1 , Ġ 5 0 0 )) Ġ{ Ġsize : ĠInt Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠ Ġassert All ( 1 0 0 0 , ĠGen . map ( key Value Gen , Ġsize )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġit . size . shouldBe LessThan OrEqual ( size ) Ċ // ĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . samples ( sample Values )" Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġ" create Ġgen Ġfor Ġmore Ġthan Ġone Ġsample Ġvalues " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġgen Samples Ġ= ĠGen . samples ( 1 , Ġ 2 , Ġ 3 ) Ċ // ĠĠĠĠĠĠĠ Ġgen Samples . random (). take ( 1 0 ). toList () ĠshouldBe ĠlistOf ( 1 , Ġ 2 , Ġ 3 , Ġ 1 , Ġ 2 , Ġ 3 , Ġ 1 , Ġ 2 , Ġ 3 , Ġ 1 ) Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ" create Ġgen Ġfor Ġno Ġsample Ġvalues " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġempty Gen Sample Ġ= ĠGen . samples < Any >() Ċ // ĠĠĠĠĠĠĠ Ġempty Gen Sample . random (). take ( 1 0 ). toList () ĠshouldBe Ġempty List < Any >() Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ" create Ġgen Ġfor Ġnullable Ġtype " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġgen With Nullable Values Ġ= ĠGen . samples ( 1 , Ġ 2 , Ġnull , Ġ 4 ) Ċ // ĠĠĠĠĠĠĠ Ġgen With Nullable Values . random (). take ( 9 ). toList () ĠshouldBe ĠlistOf ( 1 , Ġ 2 , Ġnull , Ġ 4 , Ġ 1 , Ġ 2 , Ġnull , Ġ 4 , Ġ 1 ) Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . file ( directory Name , Ġrecursive )" Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġ" g ives Ġan Ġempty Ġsequence " Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠGen . file (" non - existing - dir "). random (). toList () ĠshouldBe Ġempty List () Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ" g ives Ġfiles Ġfrom Ġa Ġgiven Ġdirectory Ġwithout Ġrecursive Ġsearch " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġrandom TopLevel File In Jvm Test Ġ= ĠGen . file (" src / jvm Test "). random (). take ( 2 0 ). toList () Ċ // ĠĠĠĠĠĠĠ Ġval Ġtop Level Files In Jvm Test Ġ= ĠFile (" src / jvm Test "). list Files () !!. toList () Ċ // Ċ // ĠĠĠĠĠĠĠ Ġrandom TopLevel File In Jvm Test Ġshould Contain All Ġtop Level Files In Jvm Test Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ" g ives Ġfiles Ġfrom Ġa Ġgiven Ġdirectory Ġwith Ġrecursive Ġsearch " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġreflection Test Directory Ġ= Ġ" src / jvm Test / kotlin / com / sk sam uel / kot est / matchers / reflection " Ċ // ĠĠĠĠĠĠĠ Ġval Ġrandom Files From Reflection Directory Ġ= ĠGen . file ( reflection Test Directory , Ġrecursive Ġ= Ġtrue ). random (). take ( 1 0 0 ). toList () Ċ // ĠĠĠĠĠĠĠ Ġval Ġclasses Files In Reflection Test Directory Ġ= ĠFile ("$ reflection Test Directory / classes "). list Files () !!. toList () Ċ // Ċ // ĠĠĠĠĠĠĠ Ġrandom Files From Reflection Directory Ġshould Contain Any Of Ġclasses Files In Reflection Test Directory Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . concat ( gen )" Ġshould Ġ{ Ċ // ĠĠĠĠĠ Ġval Ġgen Of Class A Ġ= Ġobject Ġ: ĠGen < X > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconstants (): ĠIterable < X > Ġ= Ġempty List () Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrandom ( seed : ĠLong ?): ĠSequence < X > Ġ= Ġsequence Of ( A ( 1 ), ĠA ( 2 ), ĠA ( 3 )) Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġval Ġgen Of Class B Ġ= Ġobject Ġ: ĠGen < X > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconstants (): ĠIterable < X > Ġ= Ġempty List () Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrandom ( seed : ĠLong ?): ĠSequence < X > Ġ= Ġsequence Of ( B ( 1 ), ĠB ( 2 ), ĠB ( 3 )) Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" given Ġelements Ġfrom Ġit Ġself Ġwhen Ġits Ġelements Ġare Ġnot Ġex hausted " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġthree Elements From Concat en ated Gen Ġ= Ġgen Of Class A . concat ( gen Of Class B ). random (). take ( 3 ). toList () Ċ // ĠĠĠĠĠĠĠ Ġthree Elements From Concat en ated Gen ĠshouldBe ĠlistOf ( A ( 1 ), ĠA ( 2 ), ĠA ( 3 )) Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠ Ġ" given Ġelements Ġfrom Ġthe Ġother Ġgen Ġwhen Ġits Ġelements Ġare Ġex hausted " Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġsix Elements From Concat en ated Gen Ġ= Ġgen Of Class A . concat ( gen Of Class B ). random (). take ( 6 ). toList () Ċ // ĠĠĠĠĠĠĠ Ġsix Elements From Concat en ated Gen ĠshouldBe ĠlistOf ( A ( 1 ), ĠA ( 2 ), ĠA ( 3 ), ĠB ( 1 ), ĠB ( 2 ), ĠB ( 3 )) Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ" Gen . unique Random s " Ġshould Ġ{ Ċ // Ċ // ĠĠĠĠĠ Ġ" return Ġunique Ġvalues Ġfrom Ġ` random `" Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġa 1 Ġ= ĠA ( 1 ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġb 1 Ġ= ĠB ( 1 ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġgenerator Ġ= Ġobject : ĠGen < X > Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconstants (): ĠIterable < X > Ġ= Ġempty List () Ċ // ĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrandom ( seed : ĠLong ?): ĠSequence < X > Ġ= Ġsequence Of ( a 1 , Ġa 1 , Ġb 1 ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġunique Elements Ġ= Ġgenerator . unique Random s () Ċ // ĠĠĠĠĠĠĠ Ġunique Elements Ġshould Contain All In Any Order Ġsequence Of ( a 1 , b 1 ) Ċ // ĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ} Ċ // Ġ Ġ} Ċ //} Ċ // Ċ // sealed Ġclass ĠX Ġ{ Ċ // Ġ Ġdata Ġclass ĠA ( val Ġa : ĠInt ) Ġ: ĠX () Ċ // Ġ Ġdata Ġclass ĠB ( val Ġb : ĠInt ) Ġ: ĠX () Ċ // Ġ Ġdata Ġclass ĠC ( val Ġc : ĠInt ) Ġ: ĠX () Ċ //} Ċ // Ċ