package Ġcat . the . ly dia . cool al ge br aly di ath anks Ċ Ċ import Ġcat . the . ly dia . cool al ge br aly di ath anks . utils . Util Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Test Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . round ToInt Ċ Ċ class ĠUtil Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpack Color 8 8 8 8 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠUtil . random U 8 () ĊĠĠĠĠĠĠĠ Ġval Ġg Ġ= ĠUtil . random U 8 () ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠUtil . random U 8 () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠUtil . rgb ( r , Ġg , Ġb ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĠColor ( Util . u 8 To Bounded ( r ), ĠUtil . u 8 To Bounded ( g ), ĠUtil . u 8 To Bounded ( b )) ĊĠĠĠĠĠĠĠ Ġval Ġpacked Ġ= ĠUtil . pack Color 8 8 8 8 ( color ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġpacked ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbounded ToU 8 () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , ĠUtil . bounded ToU 8 ( Bounded ( 0 f ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 5 5 , ĠUtil . bounded ToU 8 ( Bounded ( 1 f ))) ĊĊĠĠĠĠĠĠĠ Ġval Ġbounded Ġ= ĠUtil . random Bounded () ĊĊĠĠĠĠĠĠĠ ĠassertEquals (( bounded . value Ġ* Ġ 2 5 5 ). round ToInt (), ĠUtil . bounded ToU 8 ( bounded )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġu 8 To Bounded () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( Bounded ( 0 f ), ĠUtil . u 8 To Bounded ( 0 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Bounded ( 1 f ), ĠUtil . u 8 To Bounded ( 2 5 5 )) ĊĊĠĠĠĠĠĠĠ Ġval Ġu 8 Ġ= ĠUtil . random U 8 () ĊĠĠĠĠĠĠĠ ĠassertEquals ( Bounded ( u 8 Ġ/ Ġ 2 5 5 f ), ĠUtil . u 8 To Bounded ( u 8 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrgb () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠUtil . random Color Int () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠUtil . rgb ( Util . red ( expected ), ĠUtil . green ( expected ), ĠUtil . blue ( expected )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcolor Int To Color () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( BLACK , ĠUtil . color To Color Int ( Color ( Bounded . zero , ĠBo unded . zero , ĠBo unded . zero ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( WHITE , ĠUtil . color To Color Int ( Color ( Bounded . one , ĠBo unded . one , ĠBo unded . one ))) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin ĠCOL ORS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠUtil . red ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg Ġ= ĠUtil . green ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠUtil . blue ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtil . u 8 To Bounded ( r ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtil . u 8 To Bounded ( g ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtil . u 8 To Bounded ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠUtil . color Int To Color ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġresult ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrepeat ( 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠUtil . random Color Int () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( random , ĠUtil . color To Color Int ( Util . color Int To Color ( random ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcolor To Color Int () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( BLACK , ĠUtil . color To Color Int ( Color ( Bounded . zero , ĠBo unded . zero , ĠBo unded . zero ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( WHITE , ĠUtil . color To Color Int ( Color ( Bounded . one , ĠBo unded . one , ĠBo unded . one ))) ĊĊĠĠĠĠĠĠĠ Ġrepeat ( 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠUtil . random U 8 Color () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( random , ĠUtil . color Int To Color ( Util . color To Color Int ( random ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrandom Color Ints () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 0 , ĠUtil . random Color Ints ( 1 0 0 ). size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrandom Colors () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 0 , ĠUtil . random Colors ( 1 0 0 ). size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrandom Color Data () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 0 , ĠUtil . random Color Data ( 1 0 0 ). colors . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrandom Photo () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠUtil . random Photo ( 1 0 0 , Ġ 1 0 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 0 , Ġp . width ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 1 , Ġp . height ) ĊĠĠĠĠĠĠĠ Ġval Ġp 1 Ġ= ĠUtil . random U 8 Photo ( 1 0 0 , Ġ 1 0 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 0 , Ġp 1 . width ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 1 , Ġp 1 . height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrandom Color Cube () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠUtil . random Color Cube () ĊĠĠĠĠĠĠĠ ĠassertEquals ( Color Cube . N _ COLORS , Ġc . colors . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbounded ToU 8 Bounded () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbounded Ġ= ĠUtil . random Bounded () ĊĠĠĠĠĠĠĠ Ġval Ġu 8 Bounded Ġ= Ġbounded . clamp ToU 8 Bounded () ĊĠĠĠĠĠĠĠ Ġval Ġu 8 Ġ= Ġu 8 Bounded . to U 8 () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( u 8 Bounded . is U 8 ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( u 8 Bounded , Ġu 8 . u 8 to Bounded ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( u 8 Bounded , Ġu 8 Bounded . clamp ToU 8 Bounded ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcolor ToU 8 Color () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġrandom Color () ĊĠĠĠĠĠĠĠ Ġval Ġu 8 Color Ġ= Ġcolor . clamp ToU 8 Color () ĊĠĠĠĠĠĠĠ Ġval Ġcolor Int Ġ= Ġu 8 Color . to Color Int () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( u 8 Color . is U 8 Color ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( u 8 Color , Ġcolor Int . to Color ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( u 8 Color , Ġu 8 Color . clamp ToU 8 Color ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġis U 8 Bounded () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin Ġ 0 Ġuntil Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( Util . random U 8 Bounded (). is U 8 ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcheck Identity Cube IsIn U 8 C ubes () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Color Cube . N Ġ!= Ġ 1 6 ) Ġreturn ĊĠĠĠĠĠĠĠ ĠassertTrue ( Identity Cube . colors . all ( Color :: is U 8 Color )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsame Data () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( Util . same Color Data ( Identity Cube , ĠIdentity Cube )) ĊĠĠĠĠĠĠĠ Ġval Ġc 0 Ġ= ĠUtil . random Color Cube () ĊĠĠĠĠĠĠĠ Ġval Ġc 1 Ġ= ĠUtil . random Color Cube () ĊĠĠĠĠĠĠĠ ĠassertTrue ( Util . same Color Data ( c 0 , Ġc 0 )) ĊĠĠĠĠĠĠĠ ĠassertTrue ( Util . same Color Data ( c 1 , Ġc 1 )) ĊĠĠĠĠĠĠĠ ĠassertFalse ( Util . same Color Data ( c 0 , Ġc 1 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġphoto () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠUtil . random Photo ( 1 0 0 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( p , ĠIdentity Cube Ġ* Ġp ) ĊĠĠĠĠĠĠĠ Ġassert Not Equals ( p , ĠUtil . random Color Cube () Ġ* Ġp ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġl rid entity () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠColor Cube ( Identity Cube . colors ) ĊĠĠĠĠĠĠĠ Ġval Ġcube Ġ= ĠUtil . random Color Cube () ĊĠĠĠĠĠĠĠ Ġval Ġc 0 Ġ= ĠIdentity Cube Ġ* Ġcube ĊĠĠĠĠĠĠĠ Ġval Ġc 1 Ġ= Ġcube Ġ* ĠIdentity Cube ĊĠĠĠĠĠĠĠ ĠassertEquals ( c 0 , Ġc 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrandom Well Be hav ed Cube (): ĠColor Cube Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoff Ġ= ĠUtil . random Color () ĊĠĠĠĠĠĠĠ Ġval Ġcolor Func Ġ= ĠSimple Color Func Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBo unded ( c . r . value Ġ* Ġoff . r . value ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBo unded ( c . b . value Ġ* Ġoff . b . value ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBo unded ( c . g . value Ġ* Ġoff . g . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcolor Func . to Color Cube () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġphoto Concat () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcs Ġ= ĠlistOf ( random Well Be hav ed Cube (), Ġrandom Well Be hav ed Cube (), Ġrandom Well Be hav ed Cube (), Ġrandom Well Be hav ed Cube (), Ġrandom Well Be hav ed Cube ()) ĊĠĠĠĠĠĠĠ Ġval Ġorig Ġ= ĠUtil . random Photo ( 1 0 0 , Ġ 1 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġp 0 Ġ= Ġorig ĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġcs . as Re versed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp 0 Ġ= Ġc Ġ* Ġp 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġm append Ġ= Ġ{ Ġa : ĠColor Cube , Ġacc : ĠColor Cube Ġ-> Ġa Ġ* Ġacc Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcombined : ĠColor Cube Ġ= Ġcs . fold Right ( Identity Cube , Ġm append ) ĊĠĠĠĠĠĠĠ Ġval Ġp 1 Ġ= Ġcombined Ġ* Ġorig ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( p 0 , Ġp 1 ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġphoto Concat 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcs Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Well Be hav ed Cube (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Well Be hav ed Cube (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Well Be hav ed Cube (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Well Be hav ed Cube (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Well Be hav ed Cube () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġorig Ġ= ĠUtil . random Photo ( 1 0 0 , Ġ 1 0 0 ) Ċ Ċ // ĠĠĠĠĠĠĠ Ġvar Ġp 0 Ġ= Ġorig Ċ // ĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġcs . as Re versed ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġp 0 Ġ= Ġc Ġ* Ġp 0 Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġm append 1 Ġ= Ġ{ Ġa : ĠColor Cube , Ġacc : ĠColor Cube Ġ-> Ġa Ġ* Ġacc Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcombined 1 : ĠColor Cube Ġ= Ġcs . fold Right ( Identity Cube , Ġm append 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġm append 2 Ġ= Ġ{ Ġacc : ĠColor Cube , Ġa : ĠColor Cube Ġ-> Ġa Ġ* Ġacc Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcombined 2 : ĠColor Cube Ġ= Ġcs . fold ( Identity Cube , Ġm append 2 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġp 0 Ġ= Ġcombined 1 Ġ* Ġorig ĊĠĠĠĠĠĠĠ Ġval Ġp 1 Ġ= Ġcombined 2 Ġ* Ġorig ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( p 0 , Ġp 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBLACK Ġ= Ġ- 0 x 1 0 0 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠD K GRAY Ġ= Ġ- 0 xb bb bbc ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠGR AY Ġ= Ġ- 0 x 7 7 7 7 7 8 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLT GRAY Ġ= Ġ- 0 x 3 3 3 3 3 4 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠWH ITE Ġ= Ġ- 0 x 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠRED Ġ= Ġ- 0 x 1 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠGREEN Ġ= Ġ- 0 xff 0 1 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBL UE Ġ= Ġ- 0 xffff 0 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠY ELLOW Ġ= Ġ- 0 x 1 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCY AN Ġ= Ġ- 0 xff 0 0 0 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠM AGENT A Ġ= Ġ- 0 xff 0 1 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCOL ORS Ġ= ĠlistOf ( BLACK , ĠD K GRAY , ĠGR AY , ĠLT GRAY , ĠWH ITE , ĠRED , ĠGREEN , ĠBL UE , ĠY ELLOW , ĠCY AN , ĠM AGENT A ) ĊĠĠĠ Ġ} Ċ } Ċ