package Ġcom . kick starter . libs Ċ Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Test Ċ Ċ class ĠEither Test Ġ{ ĊĊĠ Ġ@ Test Ġfun Ġtest Either _ Case Analysis () Ġ{ ĊĠĠĠ Ġval Ġsquare : Ġ( Int ) Ġ-> ĠInt Ġ= Ġ{ Ġit Ġ* Ġit Ġ} ĊĠĠĠ Ġval Ġlength : Ġ( String ) Ġ-> ĠInt Ġ= ĠString :: length ĊĊĠĠĠ ĠassertEquals ( 9 , ĠEither . Left < Int , ĠString >( 3 ). either ( if Left Ġ= Ġsquare , Ġif Right Ġ= Ġlength )) ĊĠĠĠ ĠassertEquals ( 5 , ĠEither . Right < Int , ĠString >(" hello "). either ( if Left Ġ= Ġsquare , Ġif Right Ġ= Ġlength )) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Either _ Is Left () Ġ{ ĊĠĠĠ Ġval Ġint Or String Ġ= ĠEither . Left < Int , ĠString >( 1 ) ĊĠĠĠ ĠassertTrue ( int Or String . is Left ()) ĊĠĠĠ ĠassertFalse ( int Or String . is Right ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Either _ Is Right () Ġ{ ĊĠĠĠ Ġval Ġint Or String Ġ= ĠEither . Right < Int , ĠString >(" hello ") ĊĠĠĠ ĠassertTrue ( int Or String . is Right ()) ĊĠĠĠ ĠassertFalse ( int Or String . is Left ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Either _ Left () Ġ{ ĊĠĠĠ Ġval Ġint Or String Ġ= ĠEither . Left < Int , ĠString >( 1 ) ĊĠĠĠ ĠassertEquals ( 1 , Ġint Or String . left ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Either _ Map () Ġ{ ĊĠĠĠ Ġval Ġdouble : Ġ( String ) Ġ-> ĠString Ġ= Ġ{ Ġit Ġ+ Ġit Ġ} ĊĊĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠ ĠEither . Right < Int , ĠString >(" hello hello "). right (), ĊĠĠĠĠĠ ĠEither . Right < Int , ĠString >(" hello "). map ( double ). right () ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Either _ Map Left () Ġ{ ĊĠĠĠ Ġval Ġsquare : Ġ( Int ) Ġ-> ĠInt Ġ= Ġ{ Ġit Ġ* Ġit Ġ} ĊĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠ ĠEither . Left < Int , ĠString >( 9 ). left (), ĊĠĠĠĠĠ ĠEither . Left < Int , ĠString >( 3 ). map Left ( square ). left () ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtest Either _ Right () Ġ{ ĊĠĠĠ Ġval Ġint Or String Ġ= ĠEither . Right < Int , ĠString >(" hello ") ĊĠĠĠ ĠassertEquals (" hello ", Ġint Or String . right ()) ĊĠ Ġ} Ċ } Ċ