package Ġcom . github . qu ill r aven . f le ks Ċ Ċ import Ġcom . github . qu ill r aven . f le ks . collection . compare Entity Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . assert All Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ import Ġjava . lang . reflect . Invocation TargetException Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertSame Ċ Ċ private Ġclass ĠSystem Test Interval System Each Frame Ġ: ĠInterval System ( ĊĠĠĠ Ġinterval Ġ= ĠEach Frame Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġnum Dis poses Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġnum Calls Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġon Tick () Ġ{ ĊĠĠĠĠĠĠĠ Ġ++ num Calls ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Dispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġnum Dis poses ++ ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠSystem Test Interval System Fixed Ġ: ĠInterval System ( ĊĠĠĠ Ġinterval Ġ= ĠFixed ( 0 . 2 5 f ) Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġnum Calls Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġlast Alpha Ġ= Ġ 0 f ĊĊĠĠĠ Ġoverride Ġfun Ġon Tick () Ġ{ ĊĠĠĠĠĠĠĠ Ġ++ num Calls ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Alpha ( alpha : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Alpha Ġ= Ġalpha ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠSystem Test Interval System Multiple C strs ( ĊĠĠĠ Ġval Ġarg : ĠString Ġ= Ġ"" Ċ ) Ġ: ĠInterval System () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Tick () Ġ= ĠUnit Ċ } Ċ Ċ private Ġdata Ġclass ĠSystem Test Component ( var Ġx : ĠFloat Ġ= Ġ 0 f ) Ċ Ċ private Ġclass ĠSystem Test Iter ating System No Family Ġ: ĠIter ating System () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Tick Entity ( entity : ĠEntity ) Ġ= ĠUnit Ċ } Ċ Ċ private Ġclass ĠSystem Test Init Block Ġ: ĠInterval System () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsome Value : ĠFloat Ġ= Ġworld . deltaTime ĊĊĠĠĠ Ġoverride Ġfun Ġon Tick () Ġ= ĠUnit Ċ } Ċ Ċ private Ġclass ĠSystem Test OnInit Block Ġ: ĠInterval System () Ġ{ ĊĠĠĠ Ġvar Ġsome Value : ĠFloat Ġ= Ġ 4 2 f ĊĊĠĠĠ Ġoverride Ġfun Ġon Init () Ġ{ ĊĠĠĠĠĠĠĠ Ġsome Value Ġ= Ġworld . deltaTime ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Tick () Ġ= ĠUnit Ċ } Ċ Ċ @ All Of ([ System Test Component :: class ]) Ċ private Ġclass ĠSystem Test Iter ating System Mapper ( ĊĠĠĠ Ġval Ġmapper : ĠComponent Mapper < System Test Component > Ċ ) Ġ: ĠIter ating System ( interval Ġ= ĠFixed ( 0 . 2 5 f )) Ġ{ ĊĠĠĠ Ġvar Ġnum Entity Calls Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġnum Alpha Calls Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġlast Alpha Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġentity To Configure : ĠEntity ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Tick Entity ( entity : ĠEntity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentity To Configure ?. let Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Entity ( e ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapper . remove ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ++ num Entity Calls ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Alpha Entity ( entity : ĠEntity , Ġalpha : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Alpha Ġ= Ġalpha ĊĠĠĠĠĠĠĠ Ġ++ num Alpha Calls ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ All Of ([ System Test Component :: class ]) Ċ private Ġclass ĠSystem Test Iter ating System Sort Automatic ( ĊĠĠĠ Ġval Ġmapper : ĠComponent Mapper < System Test Component > Ċ ) Ġ: ĠIter ating System ( ĊĠĠĠ Ġcompare Entity Ġ{ Ġe 1 , Ġe 2 Ġ-> Ġmapper [ e 2 ]. x . compareTo ( mapper [ e 1 ]. x ) Ġ} Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġnum Entity Calls Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġlast Entity Process Ġ= ĠEntity (- 1 ) ĊĠĠĠ Ġvar Ġentity ToRemove : ĠEntity ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Tick Entity ( entity : ĠEntity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentity ToRemove ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġworld . remove ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity ToRemove Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlast Entity Process Ġ= Ġentity ĊĠĠĠĠĠĠĠ Ġ++ num Entity Calls ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ All Of ([ System Test Component :: class ]) Ċ private Ġclass ĠSystem Test Fixed System Removal ( ĊĠĠĠ Ġprivate Ġval Ġmapper : ĠComponent Mapper < System Test Component > Ċ ) Ġ: ĠIter ating System ( interval Ġ= ĠFixed ( 1 f )) Ġ{ ĊĠĠĠ Ġvar Ġnum Entity Calls Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġlast Entity Process Ġ= ĠEntity (- 1 ) ĊĠĠĠ Ġvar Ġentity ToRemove : ĠEntity ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Tick Entity ( entity : ĠEntity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentity ToRemove ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġworld . remove ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity ToRemove Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Alpha Entity ( entity : ĠEntity , Ġalpha : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġnext Ġline Ġwould Ġcause Ġan Ġexception Ġif Ġwe Ġdon 't Ġupdate Ġthe Ġfamily Ġproperly Ġin Ġalpha ĊĠĠĠĠĠĠĠ Ġ// Ġbecause Ġcomponent Ġremoval Ġis Ġinstant ly ĊĠĠĠĠĠĠĠ Ġmapper [ entity ]. x ++ ĊĠĠĠĠĠĠĠ Ġlast Entity Process Ġ= Ġentity ĊĠĠĠĠĠĠĠ Ġ++ num Entity Calls ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ All Of ([ System Test Component :: class ]) Ċ private Ġclass ĠSystem Test Iter ating System Sort Manual ( ĊĠĠĠ Ġval Ġmapper : ĠComponent Mapper < System Test Component > Ċ ) Ġ: ĠIter ating System ( ĊĠĠĠ Ġcompare Entity Ġ{ Ġe 1 , Ġe 2 Ġ-> Ġmapper [ e 2 ]. x . compareTo ( mapper [ e 1 ]. x ) Ġ}, ĊĠĠĠ Ġsorting Type Ġ= ĠManual Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġnum Entity Calls Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġlast Entity Process Ġ= ĠEntity (- 1 ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Tick Entity ( entity : ĠEntity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Entity Process Ġ= Ġentity ĊĠĠĠĠĠĠĠ Ġ++ num Entity Calls ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ None Of ([ System Test Component :: class ]) Ċ @ Any Of ([ System Test Component :: class ]) Ċ private Ġclass ĠSystem Test Iter ating System Injectable ( ĊĠĠĠ Ġval Ġinject able : ĠString Ċ ) Ġ: ĠIter ating System () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Tick Entity ( entity : ĠEntity ) Ġ= ĠUnit Ċ } Ċ Ċ @ None Of ([ System Test Component :: class ]) Ċ @ Any Of ([ System Test Component :: class ]) Ċ private Ġclass ĠSystem Test Iter ating System Qualified Injectable ( ĊĠĠĠ Ġval Ġinject able : ĠString , ĊĠĠĠ Ġ@ Qualifier (" q 1 ") Ġval Ġinject able 2 : ĠString Ċ ) Ġ: ĠIter ating System () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Tick Entity ( entity : ĠEntity ) Ġ= ĠUnit Ċ } Ċ Ċ internal Ġclass ĠSystem Test Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġsystem Service ( ĊĠĠĠĠĠĠĠ Ġsystem Types : ĠList < K Class < out ĠInterval System >>, ĊĠĠĠĠĠĠĠ Ġinject ables : ĠMap < String , ĠInjectable > Ġ= Ġempty Map (), ĊĠĠĠĠĠĠĠ Ġworld : ĠWorld Ġ= ĠWorld Ġ{ Ġ} ĊĠĠĠ Ġ) Ġ= ĠSystem Service ( ĊĠĠĠĠĠĠĠ Ġworld , ĊĠĠĠĠĠĠĠ Ġsystem Types , ĊĠĠĠĠĠĠĠ Ġinject ables ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` system Ġwith Ġinterval ĠEach Frame Ġgets Ġcalled Ġevery Ġtime `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= ĠSystem Test Interval System Each Frame () ĊĊĠĠĠĠĠĠĠ Ġsystem . on Update () ĊĠĠĠĠĠĠĠ Ġsystem . on Update () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġsystem . num Calls ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` system Ġwith Ġinterval ĠEach Frame Ġreturns Ġworld 's Ġdelta Ġtime `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= ĠSystem Test Interval System Each Frame (). apply Ġ{ Ġthis . world Ġ= ĠWorld Ġ{} Ġ} ĊĠĠĠĠĠĠĠ Ġsystem . world . update ( 4 2 f ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 2 f , Ġsystem . deltaTime ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` system Ġwith Ġfixed Ġinterval Ġof Ġ 0 , 2 5 f Ġgets Ġcalled Ġfour Ġtimes Ġwhen Ġdelta Ġtime Ġis Ġ 1 , 1 f `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= ĠSystem Test Interval System Fixed (). apply Ġ{ Ġthis . world Ġ= ĠWorld Ġ{} Ġ} ĊĠĠĠĠĠĠĠ Ġsystem . world . update ( 1 . 1 f ) ĊĊĠĠĠĠĠĠĠ Ġsystem . on Update () ĊĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( 4 , Ġsystem . num Calls ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( 0 . 1 f Ġ/ Ġ 0 . 2 5 f , Ġsystem . last Alpha , Ġ 0 . 0 0 0 1 f ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` system Ġwith Ġfixed Ġinterval Ġreturns Ġstep Ġrate Ġas Ġdelta Ġtime `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= ĠSystem Test Interval System Fixed () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 . 2 5 f , Ġsystem . deltaTime , Ġ 0 . 0 0 0 1 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` create ĠInterval System Ġwith Ġno - args `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected World Ġ= ĠWorld Ġ{} ĊĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġsystem Service ( listOf ( System Test Interval System Each Frame :: class ), Ġworld Ġ= Ġexpected World ) ĊĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( 1 , Ġservice . systems . size ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertNotNull ( service . system < System Test Interval System Each Frame >()) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertSame ( expected World , Ġservice . system < System Test Interval System Each Frame >(). world ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` create ĠIter ating System Ġwith Ġa ĠComponent Mapper Ġarg `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected World Ġ= ĠWorld Ġ{} ĊĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġsystem Service ( listOf ( System Test Iter ating System Mapper :: class ), Ġworld Ġ= Ġexpected World ) ĊĊĠĠĠĠĠĠĠ Ġval Ġactual System Ġ= Ġservice . system < System Test Iter ating System Mapper >() ĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( 1 , Ġservice . systems . size ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertSame ( expected World , Ġactual System . world ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( System Test Component :: class . java . name , Ġactual System . mapper . cstr . name ) Ġ}, ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` create ĠIter ating System Ġwith Ġan Ġinject able Ġarg `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected World Ġ= ĠWorld Ġ{} ĊĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġsystem Service ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( System Test Iter ating System Injectable :: class ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( String :: class . qualified Name !! Ġto ĠInjectable (" 4 2 ")), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected World ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġactual System Ġ= Ġservice . system < System Test Iter ating System Injectable >() ĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( 1 , Ġservice . systems . size ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertSame ( expected World , Ġactual System . world ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals (" 4 2 ", Ġactual System . inject able ) Ġ}, ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` create ĠIter ating System Ġwith Ġqualified Ġargs `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected World Ġ= ĠWorld Ġ{} ĊĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġsystem Service ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( System Test Iter ating System Qualified Injectable :: class ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( String :: class . qualified Name !! Ġto ĠInjectable (" 4 2 "), Ġ" q 1 " Ġto ĠInjectable (" 4 3 ")), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected World ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġactual System Ġ= Ġservice . system < System Test Iter ating System Qualified Injectable >() ĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( 1 , Ġservice . systems . size ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertSame ( expected World , Ġactual System . world ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals (" 4 2 ", Ġactual System . inject able ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals (" 4 3 ", Ġactual System . inject able 2 ) Ġ}, ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` cannot Ġcreate ĠIter ating System Ġwithout Ġfamily Ġannotations `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThrows < F le ks System Creation Exception > Ġ{ Ġsystem Service ( listOf ( System Test Iter ating System No Family :: class )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` cannot Ġcreate ĠIter ating System Ġwith Ġmissing Ġinject ables `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThrows < F le ks Reflection Exception > Ġ{ Ġsystem Service ( listOf ( System Test Iter ating System Injectable :: class )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` cannot Ġcreate Ġsystem Ġwith Ġmultiple Ġconstructors `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThrows < F le ks Reflection Exception > Ġ{ Ġsystem Service ( listOf ( System Test Interval System Multiple C strs :: class )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Iter ating System Ġcalls Ġon Tick Ġand Ġon Alpha Ġfor Ġeach Ġentity Ġof Ġthe Ġsystem `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġworld Ġ= ĠWorld Ġ{} ĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġsystem Service ( listOf ( System Test Iter ating System Mapper :: class ), Ġworld Ġ= Ġworld ) ĊĠĠĠĠĠĠĠ Ġworld . entity Ġ{ Ġadd < System Test Component >() Ġ} ĊĠĠĠĠĠĠĠ Ġworld . entity Ġ{ Ġadd < System Test Component >() Ġ} ĊĠĠĠĠĠĠĠ Ġworld . update ( 0 . 3 f ) ĊĊĠĠĠĠĠĠĠ Ġservice . update () ĊĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= Ġservice . system < System Test Iter ating System Mapper >() ĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( 2 , Ġsystem . num Entity Calls ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( 2 , Ġsystem . num Alpha Calls ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( 0 . 0 5 f Ġ/ Ġ 0 . 2 5 f , Ġsystem . last Alpha , Ġ 0 . 0 0 0 1 f ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` configure Ġentity Ġduring Ġiteration `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġworld Ġ= ĠWorld Ġ{} ĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġsystem Service ( listOf ( System Test Iter ating System Mapper :: class ), Ġworld Ġ= Ġworld ) ĊĠĠĠĠĠĠĠ Ġworld . update ( 0 . 3 f ) ĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġworld . entity Ġ{ Ġadd < System Test Component >() Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= Ġservice . system < System Test Iter ating System Mapper >() ĊĠĠĠĠĠĠĠ Ġsystem . entity To Configure Ġ= Ġentity ĊĊĠĠĠĠĠĠĠ Ġservice . update () ĊĊĠĠĠĠĠĠĠ ĠassertFalse Ġ{ Ġentity Ġin Ġsystem . mapper Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` sort Ġentities Ġautomatically `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġworld Ġ= ĠWorld Ġ{} ĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġsystem Service ( listOf ( System Test Iter ating System Sort Automatic :: class ), Ġworld Ġ= Ġworld ) ĊĠĠĠĠĠĠĠ Ġworld . entity Ġ{ Ġadd < System Test Component > Ġ{ Ġx Ġ= Ġ 1 5 f Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġworld . entity Ġ{ Ġadd < System Test Component > Ġ{ Ġx Ġ= Ġ 1 0 f Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected Entity Ġ= Ġworld . entity Ġ{ Ġadd < System Test Component > Ġ{ Ġx Ġ= Ġ 5 f Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġservice . update () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Entity , Ġservice . system < System Test Iter ating System Sort Automatic >(). last Entity Process ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` sort Ġentities Ġprogram matically `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġworld Ġ= ĠWorld Ġ{} ĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġsystem Service ( listOf ( System Test Iter ating System Sort Manual :: class ), Ġworld Ġ= Ġworld ) ĊĠĠĠĠĠĠĠ Ġworld . entity Ġ{ Ġadd < System Test Component > Ġ{ Ġx Ġ= Ġ 1 5 f Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġworld . entity Ġ{ Ġadd < System Test Component > Ġ{ Ġx Ġ= Ġ 1 0 f Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected Entity Ġ= Ġworld . entity Ġ{ Ġadd < System Test Component > Ġ{ Ġx Ġ= Ġ 5 f Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= Ġservice . system < System Test Iter ating System Sort Manual >() ĊĊĠĠĠĠĠĠĠ Ġsystem . do Sort Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġservice . update () ĊĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertEquals ( expected Entity , Ġsystem . last Entity Process ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertFalse ( system . do Sort ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` cannot Ġget Ġa Ġnon - existing Ġsystem `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġsystem Service ( listOf ( System Test Iter ating System Sort Automatic :: class )) ĊĊĠĠĠĠĠĠĠ ĠassertThrows < F le ks NoSuch System Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . system < System Test Interval System Each Frame >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` update Ġonly Ġcalls Ġenabled Ġsystems `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġsystem Service ( listOf ( System Test Interval System Each Frame :: class )) ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= Ġservice . system < System Test Interval System Each Frame >() ĊĠĠĠĠĠĠĠ Ġsystem . enabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġservice . update () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġsystem . num Calls ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` re moving Ġan Ġentity Ġduring Ġupdate Ġis Ġdelayed `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġworld Ġ= ĠWorld Ġ{} ĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġsystem Service ( listOf ( System Test Iter ating System Sort Automatic :: class ), Ġworld Ġ= Ġworld ) ĊĠĠĠĠĠĠĠ Ġworld . entity Ġ{ Ġadd < System Test Component > Ġ{ Ġx Ġ= Ġ 1 5 f Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġentity ToRemove Ġ= Ġworld . entity Ġ{ Ġadd < System Test Component > Ġ{ Ġx Ġ= Ġ 1 0 f Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġworld . entity Ġ{ Ġadd < System Test Component > Ġ{ Ġx Ġ= Ġ 5 f Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= Ġservice . system < System Test Iter ating System Sort Automatic >() ĊĠĠĠĠĠĠĠ Ġsystem . entity ToRemove Ġ= Ġentity ToRemove ĊĊĠĠĠĠĠĠĠ Ġ// Ġcall Ġit Ġtwice Ġ- Ġfirst Ġcall Ġstill Ġiter ates Ġover Ġall Ġthree Ġentities ĊĠĠĠĠĠĠĠ Ġ// Ġwhile Ġthe Ġsecond Ġcall Ġwill Ġonly Ġiterate Ġover Ġthe Ġremaining Ġtwo Ġentities ĊĠĠĠĠĠĠĠ Ġservice . update () ĊĠĠĠĠĠĠĠ Ġservice . update () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 , Ġsystem . num Entity Calls ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` re moving Ġan Ġentity Ġduring Ġalpha Ġis Ġdelayed `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġworld Ġ= ĠWorld Ġ{} ĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġsystem Service ( listOf ( System Test Fixed System Removal :: class ), Ġworld Ġ= Ġworld ) ĊĠĠĠĠĠĠĠ Ġ// Ġset Ġdelta Ġtime Ġto Ġ 1 f Ġfor Ġthe Ġfixed Ġinterval ĊĠĠĠĠĠĠĠ Ġworld . update ( 1 f ) ĊĠĠĠĠĠĠĠ Ġworld . entity Ġ{ Ġadd < System Test Component > Ġ{ Ġx Ġ= Ġ 1 5 f Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġentity ToRemove Ġ= Ġworld . entity Ġ{ Ġadd < System Test Component > Ġ{ Ġx Ġ= Ġ 1 0 f Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġworld . entity Ġ{ Ġadd < System Test Component > Ġ{ Ġx Ġ= Ġ 5 f Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= Ġservice . system < System Test Fixed System Removal >() ĊĠĠĠĠĠĠĠ Ġsystem . entity ToRemove Ġ= Ġentity ToRemove ĊĊĠĠĠĠĠĠĠ Ġ// Ġcall Ġit Ġtwice Ġ- Ġfirst Ġcall Ġstill Ġiter ates Ġover Ġall Ġthree Ġentities ĊĠĠĠĠĠĠĠ Ġ// Ġwhile Ġthe Ġsecond Ġcall Ġwill Ġonly Ġiterate Ġover Ġthe Ġremaining Ġtwo Ġentities ĊĠĠĠĠĠĠĠ Ġservice . update () ĊĠĠĠĠĠĠĠ Ġservice . update () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 , Ġsystem . num Entity Calls ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` dispose Ġservice `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġsystem Service ( listOf ( System Test Interval System Each Frame :: class )) ĊĊĠĠĠĠĠĠĠ Ġservice . dispose () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġservice . system < System Test Interval System Each Frame >(). num Dis poses ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` init Ġblock Ġof Ġa Ġsystem Ġconstructor Ġhas Ġno Ġaccess Ġto Ġthe Ġworld `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThrows < Invocation TargetException > Ġ{ Ġsystem Service ( listOf ( System Test Init Block :: class )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` on Init Ġblock Ġis Ġcalled Ġfor Ġany Ġnewly Ġcreated Ġsystem `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġsystem Service ( listOf ( System Test OnInit Block :: class )) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġservice . system < System Test OnInit Block >(). some Value ) ĊĠĠĠ Ġ} Ċ } Ċ