package Ġio . sm al libs . pil in . standard Ċ Ċ import Ġio . sm al libs . pil in . l aws . Functor .` map Ġ( f Ġcompose Ġg ) Ġ= Ġmap Ġf Ġcompose Ġmap Ġg ` Ċ import Ġio . sm al libs . pil in . l aws . Functor .` map Ġid Ġ= Ġid ` Ċ import Ġio . sm al libs . pil in . standard . Either . T . Left Ċ import Ġio . sm al libs . pil in . standard . Either . T . Right Ċ import Ġio . sm al libs . pil in . standard . Identity . Id Ċ import Ġio . sm al libs . pil in . standard . Option . T . None Ċ import Ġio . sm al libs . pil in . standard . Option . T . Some Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Test Ċ import Ġorg . quick the ories . With Quick The ories Ċ Ċ internal Ġclass ĠFun ctor Test Ġ: ĠWith Quick The ories Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġstr : Ġsuspend Ġ( Int ) Ġ-> ĠString Ġ= Ġ{ Ġi Ġ-> Ġi . toString () Ġ} ĊĠĠĠ Ġprivate Ġval Ġint : Ġsuspend Ġ( String ) Ġ-> ĠInt Ġ= Ġ{ Ġi Ġ-> Ġi . toInt () Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ`( Identity ) Ġmap Ġid Ġ= Ġid Ġ` () Ġ{ ĊĠĠĠĠĠĠĠ Ġqt (). for All ( inte gers (). all ()). check Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĠIdentity . functor .` map Ġid Ġ= Ġid `( Id ( a )) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ`( Option ) Ġmap Ġid Ġ= Ġid Ġ` () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĠOption . functor .` map Ġid Ġ= Ġid `( None < Int >()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġqt (). for All ( inte gers (). all ()). check Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĠOption . functor .` map Ġid Ġ= Ġid `( Some ( a )) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ`( Either ) Ġmap Ġid Ġ= Ġid Ġ` () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĠEither . functor < Unit >(). ` map Ġid Ġ= Ġid `( Left < Unit , ĠInt >( Unit )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġqt (). for All ( inte gers (). all ()). check Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĠEither . functor < Unit >(). ` map Ġid Ġ= Ġid `( Right ( a )) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ`( Identity ) Ġmap Ġ( incr Ġcompose ĠtoString ) Ġ= Ġ( map Ġincr ) Ġcompose Ġ( map ĠtoString ) Ġ` () Ġ{ ĊĠĠĠĠĠĠĠ Ġqt (). for All ( inte gers (). all ()). check Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĠIdentity . functor .` map Ġ( f Ġcompose Ġg ) Ġ= Ġmap Ġf Ġcompose Ġmap Ġg `( int , Ġstr , ĠId ( a )) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ`( Option ) Ġmap Ġ( incr Ġcompose ĠtoString ) Ġ= Ġ( map Ġincr ) Ġcompose Ġ( map ĠtoString ) Ġ` () Ġ{ ĊĠĠĠĠĠĠĠ Ġqt (). for All ( inte gers (). all ()). check Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĠOption . functor .` map Ġ( f Ġcompose Ġg ) Ġ= Ġmap Ġf Ġcompose Ġmap Ġg `( int , Ġstr , ĠSome ( a )) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ`( Either ) Ġmap Ġ( incr Ġcompose ĠtoString ) Ġ= Ġ( map Ġincr ) Ġcompose Ġ( map ĠtoString ) Ġ` () Ġ{ ĊĠĠĠĠĠĠĠ Ġqt (). for All ( inte gers (). all ()). check Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĠEither . functor < Unit >(). ` map Ġ( f Ġcompose Ġg ) Ġ= Ġmap Ġf Ġcompose Ġmap Ġg `( int , Ġstr , ĠRight ( a )) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }