package Ġarrow . data Ċ Ċ import Ġarrow . core .* Ċ import Ġarrow . data . extensions . day . applic ative . applic ative Ċ import Ġarrow . data . extensions . day . com on ad . com on ad Ċ import Ġarrow . core . extensions . id . applic ative . applic ative Ċ import Ġarrow . core . extensions . id . com on ad . com on ad Ċ import Ġarrow . test . Unit Spec Ċ import Ġarrow . test . l aws . Applic ative L aws Ċ import Ġarrow . test . l aws . Com on ad L aws Ċ import Ġarrow . type classes . Eq Ċ import Ġio . kot lint est . runner . junit 4 . Kotlin TestRunner Ċ import Ġio . kot lint est . shouldBe Ċ import Ġorg . junit . runner . RunWith Ċ Ċ @ RunWith ( Kotlin TestRunner :: class ) Ċ class ĠDay Test Ġ: ĠUnit Spec () Ġ{ ĊĠ Ġinit Ġ{ ĊĊĠĠĠ Ġval Ġcf Ġ= Ġ{ Ġx : ĠInt Ġ-> ĠDay ( Id ( x ), ĠId ( 0 )) Ġ{ Ġxx , Ġyy Ġ-> Ġxx Ġ+ Ġyy Ġ} Ġ} ĊĊĠĠĠ Ġval ĠE Q : ĠEq < Day Of < For Id , ĠFor Id , ĠInt >> Ġ= ĠEq Ġ{ Ġa , Ġb Ġ-> ĊĠĠĠĠĠ Ġa . fix (). extract ( Id . com on ad (), ĠId . com on ad ()) Ġ== Ġb . fix (). extract ( Id . com on ad (), ĠId . com on ad ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtest L aws ( ĊĠĠĠĠĠ ĠApplic ative L aws . l aws ( Day . applic ative ( Id . applic ative (), ĠId . applic ative ()), ĠE Q ), ĊĠĠĠĠĠ ĠCom on ad L aws . l aws ( Day . com on ad ( Id . com on ad (), ĠId . com on ad ()), Ġcf , ĠE Q ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġget : Ġ( Int , ĠInt ) Ġ-> ĠTuple 2 < Int , ĠInt > Ġ= Ġ{ Ġleft , Ġright Ġ-> ĠTuple 2 ( left , Ġright ) Ġ} ĊĠĠĠ Ġval Ġday Ġ= ĠDay ( Id . just ( 1 ), ĠId . just ( 1 ), Ġget ) ĊĠĠĠ Ġval Ġcompare Side s Ġ= Ġ{ Ġleft : ĠInt , Ġright : ĠInt Ġ-> ĊĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġleft Ġ> Ġright Ġ-> Ġ" Left Ġis Ġgreater " ĊĠĠĠĠĠĠĠ Ġright Ġ> Ġleft Ġ-> Ġ" Right Ġis Ġgreater " ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" Both Ġsides Ġare Ġequal " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Day Ġextract Ġshould Ġreturn Ġthe Ġresult Ġof Ġcalling Ġget Ġwith Ġboth Ġsides " Ġ{ ĊĠĠĠĠĠ Ġday . extract ( Id . com on ad (), ĠId . com on ad ()) ĠshouldBe ĠTuple 2 ( 1 , Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Suppress (" Explicit It Lambda Parameter ") Ġ// ĠRequired Ġat Ġruntime Ġor Ġelse Ġtest Ġfails ĊĠĠĠ Ġ" Day Ġc of lat map Ġshould Ġtransform Ġresult Ġtype " Ġ{ ĊĠĠĠĠĠ Ġval Ġd Ġ= Ġday . co flatMap ( Id . com on ad (), ĠId . com on ad ()) Ġ{ Ġit : ĠDay Of < For Id , ĠFor Id , ĠTuple 2 Of < Int , ĠInt >> Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġ( left , Ġright ) Ġ= Ġit . fix (). extract ( Id . com on ad (), ĠId . com on ad ()). fix () ĊĠĠĠĠĠĠĠ Ġcompare Side s ( left , Ġright ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġd . extract ( Id . com on ad (), ĠId . com on ad ()) ĠshouldBe Ġ" Both Ġsides Ġare Ġequal " ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ" Day Ġmap Ġshould Ġtransform Ġresult Ġtype " Ġ{ ĊĠĠĠĠĠ Ġval Ġd Ġ= Ġday . map Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( left , Ġright ) Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġcompare Side s ( left , Ġright ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġd . extract ( Id . com on ad (), ĠId . com on ad ()) ĠshouldBe Ġ" Both Ġsides Ġare Ġequal " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Explicit It Lambda Parameter ") Ġ// ĠRequired Ġat Ġruntime Ġor Ġelse Ġtest Ġfails ĊĠĠĠ Ġ" Day Ġc of lat Map Lazy Ġshould Ġtransform Ġresult Ġtype " Ġ{ ĊĠĠĠĠĠ Ġval Ġd Ġ= Ġday . co flatMap Lazy ( Id . com on ad (), ĠId . com on ad ()) Ġ{ Ġit : ĠDay Of < For Id , ĠFor Id , ĠTuple 2 Of < Int , ĠInt >> Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġ( left , Ġright ) Ġ= Ġit . fix (). extract ( Id . com on ad (), ĠId . com on ad ()). fix () ĊĠĠĠĠĠĠĠ Ġcompare Side s ( left , Ġright ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġd . extract ( Id . com on ad (), ĠId . com on ad ()) ĠshouldBe Ġ" Both Ġsides Ġare Ġequal " ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Day Ġmap Lazy Ġshould Ġtransform Ġresult Ġtype " Ġ{ ĊĠĠĠĠĠ Ġval Ġd Ġ= Ġday . map Lazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( left , Ġright ) Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġcompare Side s ( left , Ġright ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġd . extract ( Id . com on ad (), ĠId . com on ad ()) ĠshouldBe Ġ" Both Ġsides Ġare Ġequal " ĊĠĠĠ Ġ} ĊĊĠ Ġ} Ċ } Ċ