package Ġcom . sk sam uel . kot est . property . ar bitrary Ċ Ċ import Ġio . kot est . assertions . throw ables . should Not Throw Any Ċ import Ġio . kot est . core . spec . style . Fun Spec Ċ import Ġio . kot est . matchers . collections . should Contain Exactly Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . kot est . matchers . types . should Not Be Same Instance As Ċ import Ġio . kot est . property . Ar b Ċ import Ġio . kot est . property . Edge Config Ċ import Ġio . kot est . property . Random Source Ċ import Ġio . kot est . property . ar bitrary .* Ċ Ċ class ĠFlat Map Test Ġ: ĠFun Spec () Ġ{ ĊĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġtest (" Ar b . flatMap Ġshould Ġcompute Ġprob abil istic Ġedge Ġcases ") Ġ{ ĊĊĠĠĠĠĠĠĠĠ Ġval Ġar b String Ġ= ĠA rb . int ( 1 .. 1 0 ). with Edge cases ( 1 , Ġ 2 ). flatMap Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA rb . double (). with Edge cases ( 1 . 0 , Ġ 2 . 0 ). flatMap Ġ{ Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA rb . string (). with Edge cases (" foo ", Ġ" bar "). map Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ a Ġ$ b Ġ$ c " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġval Ġedges Ġ= Ġar b String ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. generate ( Random Source . see ded ( 1 2 3 4 L ), ĠEdge Config ( edge cases Generation Probability Ġ= Ġ 1 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . value Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĊĠĠĠĠĠĠĠĠ Ġedges Ġshould Contain Exactly ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 Ġ 2 . 0 Ġbar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 Ġ 2 . 0 Ġbar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 Ġ 1 . 0 Ġfoo ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 Ġ 2 . 0 Ġfoo ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 Ġ 1 . 0 Ġbar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 Ġ 1 . 0 Ġbar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 Ġ 2 . 0 Ġbar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 Ġ 1 . 0 Ġfoo ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 Ġ 2 . 0 Ġbar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 Ġ 2 . 0 Ġfoo " ĊĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġtest (" Ar b . flatMap Ġshould Ġreplace Ġnull Ġedge Ġcases Ġwith Ġsamples ") Ġ{ ĊĊĠĠĠĠĠĠĠĠ Ġval Ġar b String Ġ= ĠA rb . int ( 1 .. 2 ). with Edge cases ( emptyList ()). flatMap Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA rb . int ( 3 .. 4 ). with Edge cases ( emptyList ()). flatMap Ġ{ Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA rb . string (). with Edge cases (" foo ", Ġ" bar "). map Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ a Ġ$ b Ġ$ c " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠ Ġval Ġedges Ġ= Ġar b String ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. edge cases ( 1 0 0 , ĠRandom Source . see ded ( 1 2 3 4 L )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĊĠĠĠĠĠĠĠĠ Ġedges Ġshould Contain Exactly ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 Ġ 4 Ġbar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 Ġ 3 Ġfoo ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 Ġ 4 Ġfoo ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 Ġ 3 Ġbar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 Ġ 3 Ġfoo ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 Ġ 4 Ġfoo ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 Ġ 3 Ġbar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 Ġ 4 Ġbar ", ĊĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠ Ġtest (" Ar b . flatMap Ġshould Ġgenerate Ġdependent ĠA rb ") Ġ{ ĊĠĠĠĠĠĠĠĠ ĠA rb . int ( 1 .. 1 0 ). flatMap Ġ{ ĠA rb . int ( 1 .. it Ġ* Ġit ) Ġ}. take ( 1 5 , ĠRandom Source . see ded ( 3 2 4 2 3 4 4 L )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () Ġshould Contain Exactly ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġtest (" Ar b . flatMap Ġcomposition Ġshould Ġnot Ġex haust Ġcall Ġstack ") Ġ{ ĊĠĠĠĠĠĠĠĠ Ġvar Ġar b : ĠA rb < Int > Ġ= ĠA rb . int (- 3 .. 3 ) ĊĠĠĠĠĠĠĠĠ Ġrepeat ( 1 0 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar b Ġ= Ġar b . flatMap Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA rb . int (- 3 .. 3 ). flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA rb . of ( value Ġ+ Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġshould Not Throw Any Ġ{ Ġar b . single ( Random Source . see ded ( 1 2 3 4 L )) Ġ} ĊĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ 4 9 ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġtest (" should Ġyield Ġa Ġnew Ġimmutable Ġar b ") Ġ{ ĊĠĠĠĠĠĠĠĠ Ġval Ġfirst Ar b : ĠA rb < Int > Ġ= Ġ ĠA rb . int (- 3 .. 3 ) ĊĠĠĠĠĠĠĠĠ Ġval Ġsecond Ar b : ĠA rb < Int > Ġ= Ġfirst Ar b . flatMap Ġ{ ĠA rb . int ( 1 0 .. 3 0 ) Ġ} ĊĠĠĠĠĠĠĠĠ Ġval Ġthird Ar b : ĠA rb < String > Ġ= Ġsecond Ar b . flatMap Ġ{ ĠA rb . string ( 3 , ĠCode point . al phanumeric ()) Ġ} ĊĊĠĠĠĠĠĠĠĠ Ġfirst Ar b Ġshould Not Be Same Instance As Ġsecond Ar b ĊĠĠĠĠĠĠĠĠ Ġfirst Ar b Ġshould Not Be Same Instance As Ġthird Ar b ĊĠĠĠĠĠĠĠĠ Ġsecond Ar b Ġshould Not Be Same Instance As Ġthird Ar b ĊĊĠĠĠĠĠĠĠĠ Ġfirst Ar b . single ( Random Source . see ded ( 1 2 3 4 L )) ĠshouldBe Ġ 3 ĊĠĠĠĠĠĠĠĠ Ġsecond Ar b . single ( Random Source . see ded ( 1 2 3 4 L )) ĠshouldBe Ġ 2 8 ĊĠĠĠĠĠĠĠĠ Ġthird Ar b . single ( Random Source . see ded ( 1 2 3 4 L )) ĠshouldBe Ġ" t ID " ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} Ċ } Ċ