/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 - 2 0 2 1 ĠAnimated LED Strip Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġanimated led strip . test . colors Ċ Ċ import Ġanimated led strip . colors . Color Container Ċ import Ġanimated led strip . colors . Prepared Color Container Ċ import Ġanimated led strip . colors . shift Ċ import Ġio . kot est . core . spec . style . String Spec Ċ import Ġio . kot est . matchers . b ooleans . shouldBe False Ċ import Ġio . kot est . matchers . b ooleans . shouldBe True Ċ import Ġio . kot est . matchers . collections . should Contain Exactly Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . kot est . matchers . should Not Be Ċ import Ġio . kot est . matchers . types . shouldBe Same Instance As Ċ import Ġio . kot est . matchers . types . should Not Be Same Instance As Ċ import Ġio . kot est . property . Ar b Ċ import Ġio . kot est . property . ar bitrary . filter Ċ import Ġio . kot est . property . ar bitrary . int Ċ import Ġio . kot est . property . ar bitrary . list Ċ import Ġio . kot est . property . ar bitrary . next Ċ import Ġio . kot est . property . check All Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠPrepared Color Container Test Ġ: ĠString Spec ( ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" get " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck All ( Ar b . int ( 0 .. 0 x FFFFFF ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA rb . int ( 0 .. 0 x FFFFFF ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA rb . int ( 0 .. 0 x FFFFFF ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA rb . int ( 0 .. 0 x FFFFFF )) Ġ{ Ġc 1 , Ġc 2 , Ġc 3 , Ġc 4 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest CC Ġ= ĠPrepared Color Container ( listOf ( c 1 , Ġc 2 , Ġc 3 , Ġc 4 ), ĠlistOf ( c 1 , Ġc 2 , Ġc 3 , Ġc 4 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest CC [ 0 ] ĠshouldBe Ġc 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest CC [ 1 ] ĠshouldBe Ġc 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest CC [ 2 ] ĠshouldBe Ġc 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest CC [ 3 ] ĠshouldBe Ġc 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest CC [ 5 ] ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest CC . color ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" equality " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck All ( 2 5 , ĠA rb . list ( Ar b . int ( 0 , Ġ 0 x FFFFFF ), Ġ 1 .. 5 0 0 )) Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck All ( 1 0 , ĠA rb . int ( 1 .. 5 0 0 )) Ġ{ Ġlen Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest PCC Ġ= ĠColor Container ( c . to Mutable List ()). prepare ( len ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck All ( 5 , ĠA rb . int ( 1 .. 5 0 0 ). filter Ġ{ Ġit Ġ!= Ġlen Ġ}) Ġ{ Ġlen 2 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest PCC ĠshouldBe ĠColor Container ( c . to Mutable List ()). prepare ( len 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest PCC . hashCode () Ġshould Not Be ĠColor Container ( c . to Mutable List ()). prepare ( len 2 ). hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" string " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor Container ( 0 xFF 3 B 8 2 ). prepare ( 1 ). toString () ĠshouldBe Ġ"[ ff 3 b 8 2 ]" ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor Container ( 0 xFF 7 B 5 0 , Ġ 0 x FFFFFF ). prepare ( 2 ). toString () ĠshouldBe Ġ"[ ff 7 b 5 0 , Ġf fffff ]" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor Container (). prepare ( 1 ). toString () ĠshouldBe Ġ"[ 0 ]" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" contains " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck All ( Ar b . list ( Ar b . int ( 0 .. 0 x FFFFFF ), Ġ 1 .. 1 5 0 0 ), ĠA rb . int ( 1 .. 1 5 0 0 )) Ġ{ Ġc , Ġn Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest PCC Ġ= ĠColor Container ( c . to Mutable List ()). prepare ( n ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġc ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ>= Ġc . size ) Ġ( i Ġin Ġtest PCC ). shouldBe True () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin ĠA rb . list ( Ar b . int (). filter Ġ{ Ġit Ġ! in Ġc Ġ}, Ġ 1 0 .. 1 0 ). next ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( i Ġin Ġtest PCC ). shouldBe False () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" prepare " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck All ( Ar b . list ( Ar b . int ( 0 .. 0 x FFFFFF ), Ġ 1 .. 1 5 0 0 ), ĠA rb . int ( 1 .. 1 5 0 0 )) Ġ{ Ġc , Ġn Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest PCC Ġ= ĠColor Container ( c . to Mutable List ()). prepare ( n ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest PCC . prepare ( n ). colors . should Contain Exactly ( test PCC . colors ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest PCC . prepare ( n ) ĠshouldBe Same Instance As Ġtest PCC ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest PCC . prepare ( n + 1 ). colors Ġshould Not Be Ġtest PCC . colors ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest PCC . prepare ( n + 1 ) Ġshould Not Be Same Instance As Ġtest PCC ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" size " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck All ( Ar b . list ( Ar b . int ( 0 .. 0 x FFFFFF ), Ġ 1 .. 1 5 0 0 ), ĠA rb . int ( 1 .. 1 5 0 0 )) Ġ{ Ġc , Ġn Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor Container ( c . to Mutable List ()). prepare ( n ). size ĠshouldBe Ġn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" to Color Container " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck All ( Ar b . list ( Ar b . int ( 0 .. 0 x FFFFFF ), Ġ 1 .. 1 5 0 0 ), ĠA rb . int ( 1 .. 1 5 0 0 )) Ġ{ Ġc , Ġn Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest PCC Ġ= ĠColor Container ( c . to Mutable List ()). prepare ( n ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest CC Ġ= Ġtest PCC . to Color Container () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest CC . colors . should Contain Exactly ( test PCC . colors ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ!= Ġc . size ) Ġtest CC Ġshould Not Be Ġtest PCC ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġtest CC ĠshouldBe Ġtest PCC ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" original ĠColor Container " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck All ( Ar b . list ( Ar b . int ( 0 .. 0 x FFFFFF ), Ġ 1 .. 5 0 0 ), ĠA rb . int ( 1 .. 5 0 0 )) Ġ{ Ġc , Ġn Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest PCC Ġ= ĠColor Container ( c . to Mutable List ()). prepare ( n ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest CC Ġ= Ġtest PCC . original Color Container () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest CC . colors . should Contain Exactly ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest CC ĠshouldBe Ġtest PCC ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" offset Ġby ". config ( enabled Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠColor Container ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 0 0 FF , Ġ 0 x 0 0 FFFF , Ġ 0 xFF 0 0 FF , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 FF 0 0 , Ġ 0 xFF 0 0 0 0 , Ġ 0 x FFFFFF , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). prepare ( 6 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . colors Ġ== ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < Long >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 0 0 FF , Ġ 0 x 0 0 FFFF , Ġ 0 xFF 0 0 FF , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 FF 0 0 , Ġ 0 xFF 0 0 0 0 , Ġ 0 x FFFFFF , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . shift ( 0 ). colors Ġ== ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < Long >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 0 0 FF , Ġ 0 x 0 0 FFFF , Ġ 0 xFF 0 0 FF , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 FF 0 0 , Ġ 0 xFF 0 0 0 0 , Ġ 0 x FFFFFF , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . shift ( 4 ). colors Ġ== ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < Long >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 xFF 0 0 FF , Ġ 0 x 0 0 FF 0 0 , Ġ 0 xFF 0 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x FFFFFF , Ġ 0 x 0 0 0 0 FF , Ġ 0 x 0 0 FFFF , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . shift (- 4 ). colors Ġ== ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < Long >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 xFF 0 0 0 0 , Ġ 0 x FFFFFF , Ġ 0 x 0 0 0 0 FF , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 FFFF , Ġ 0 xFF 0 0 FF , Ġ 0 x 0 0 FF 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . shift ( 1 0 ). colors Ġ== ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . shift ( 4 ). colors ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . shift (- 1 0 ). colors Ġ== ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . shift (- 4 ). colors ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ ) Ċ