package Ġmy cord a . app . chaos Ċ Ċ import Ġcom . nat pr y ce . ham k rest . assertion . assertThat Ċ import Ġcom . nat pr y ce . ham k rest . equalTo Ċ import Ġcom . nat pr y ce . ham k rest . greater Than Ċ import Ġcom . nat pr y ce . ham k rest . less Than Ċ import Ġmy cord a . app . clock . Platform Tick Ċ import Ġmy cord a . app . clock . Platform Timer Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . fail Ċ import Ġjava . lang . Exception Ċ Ċ class ĠCh aos Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġfail ĠN Ġpercent Ġof Ġthe Ġtime `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġch aos Ġ= ĠCh aos ( listOf ( Fail N Percent ( 1 0 ))) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstatistic ally , Ġno Ġchance Ġof Ġpassing Ġ 1 0 0 Ġtimes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 .. 1 0 0 ). forEach Ġ{ Ġ_ Ġ-> Ġch aos . chaos () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Should Ġhave Ġthrown Ġan Ġexception ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( ex . message , ĠequalTo (" un luck y , Ġp unk ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġhave Ġstatistic ally Ġsensible Ġpass Ġand Ġfailure Ġrates `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġch aos Ġ= ĠCh aos ( listOf ( Fail N Percent ( 1 0 ))) ĊĠĠĠĠĠĠĠ Ġval Ġattempts Ġ= Ġ 2 0 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġvariance Ġ= Ġ 2 . 0 ĊĊĠĠĠĠĠĠĠ Ġ// Ġrun Ġenough Ġtimes Ġto Ġget Ġsome Ġgood Ġstats ĊĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġcollect Pass Fail Stats ( attempts , Ġch aos ) ĊĠĠĠĠĠĠĠ Ġval Ġpass Percent Ġ= Ġ( pair . first Ġ* Ġ 1 0 0 . 0 ) Ġ/ Ġattempts ĊĠĠĠĠĠĠĠ Ġval Ġfail Percent Ġ= Ġ( pair . second Ġ* Ġ 1 0 0 . 0 ) Ġ/ Ġattempts ĊĊĠĠĠĠĠĠĠ Ġ// Ġare Ġthese Ġstatistic ally Ġsensible Ġresults ? ĊĠĠĠĠĠĠĠ ĠassertThat ( pass Percent , Ġgreater Than ( 9 0 Ġ- Ġvariance )) Ġ{ Ġ" pass Ġrate Ġof Ġ$ pass Percent % Ġis Ġoutside Ġbounds " Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( pass Percent , Ġless Than ( 9 0 Ġ+ Ġvariance )) Ġ{ Ġ" pass Ġrate Ġof Ġ$ pass Percent % Ġis Ġoutside Ġbounds " Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( fail Percent , Ġgreater Than ( 1 0 Ġ- Ġvariance )) Ġ{ Ġ" fail Ġrate Ġof Ġ$ fail Percent % Ġis Ġoutside Ġbounds " Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( fail Percent , Ġless Than ( 1 0 Ġ+ Ġvariance )) Ġ{ Ġ" fail Ġrate Ġof Ġ$ fail Percent % Ġis Ġoutside Ġbounds " Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġhave Ġstatistic ally Ġsensible Ġdelay Ġrates `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax Ticks Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġval Ġattempts Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġvariance Ġ= ĠPlatform Timer . clock Tick () ĊĠĠĠĠĠĠĠ Ġvar Ġmax Delay Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġvar Ġmin Delay Ġ= ĠLong . MAX _ VALUE ĊĊĠĠĠĠĠĠĠ Ġval Ġch aos Ġ= ĠCh aos ( Delay U pto NT icks ( Platform Tick . of ( max Ticks ))) ĊĊĠĠĠĠĠĠĠ Ġ// Ġrun Ġenough Ġtimes Ġto Ġget Ġsome Ġgood Ġstats ĊĠĠĠĠĠĠĠ Ġ( 1 .. attempts ). forEach Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSystem . nano Time () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġch aos . chaos () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelay Ms Ġ= Ġ( System . nano Time () Ġ- Ġstart ) Ġ/ Ġ 1 0 0 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( delay Ms Ġ< Ġmin Delay ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Delay Ġ= Ġdelay Ms ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( delay Ms Ġ> Ġmax Delay ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Delay Ġ= Ġdelay Ms ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġare Ġthese Ġstatistic ally Ġsensible Ġresults ? ĊĠĠĠĠĠĠĠ ĠassertThat ( min Delay , Ġless Than ( variance )) Ġ{ Ġ" min Delay Ġof Ġ${ min Delay } ms Ġis Ġoutside Ġbounds " Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Delay , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgreater Than (( Platform Timer . clock Tick () Ġ* Ġmax Ticks ) Ġ- Ġvariance ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ" max Delay Ġof Ġ${ max Delay } ms Ġis Ġoutside Ġbounds " Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġhave Ġno Ġcha otic Ġbehaviour Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġch aos Ġ= ĠCh aos () ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 .. 1 0 0 0 ). forEach Ġ{ Ġ_ Ġ-> Ġch aos . chaos () Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Should Ġnot Ġbe Ġany Ġcha otic Ġbehaviour ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġlong Ġenough Ġto Ġbe Ġreliable , Ġshort Ġenough Ġto Ġdetect Ġunexpected Ġdelays ĊĠĠĠĠĠĠĠ Ġval Ġtime Taken Ġ= ĠSystem . currentTimeMillis () Ġ- Ġstart ĊĠĠĠĠĠĠĠ ĠassertThat ( time Taken , Ġless Than ( Platform Timer . clock Tick () Ġ* Ġ 5 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġsupport Ġmultiple Ġchannels `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġch aos Ġ= ĠCh aos ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" errors " Ġto ĠlistOf ( Fail N Percent ( 1 0 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" delay s " Ġto ĠlistOf ( Delay U pto NT icks ( Platform Tick . of ( 5 ))), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" noop " Ġto ĠlistOf ( No op ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 .. 1 0 0 ). forEach Ġ{ Ġ_ Ġ-> Ġch aos . chaos (" errors ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Should Ġhave Ġthrown Ġan Ġexception ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignore Me : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġ( 1 .. 1 0 0 ). forEach Ġ{ Ġ_ Ġ-> Ġch aos . chaos (" delay s ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġticks Taken Ġ= Ġ( System . currentTimeMillis () Ġ- Ġstart ) Ġ/ ĠPlatform Timer . clock Tick () ĊĠĠĠĠĠĠĠ ĠassertThat ( ticks Taken , Ġgreater Than ( 1 0 0 )) ĊĠĠĠĠĠĠĠ ĠassertThat ( ticks Taken , Ġless Than ( 5 0 0 )) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġch aos . chaos (" noop ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġch aos . chaos (" unknown Channel ") ĠĠ Ġ// Ġjust Ġprints Ġa Ġwarning ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" unexpected Ġexception : Ġ${ ex . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġfail Ġaccording Ġto Ġthe Ġpattern `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= Ġ" F . F . F .... F " Ġ// Ġ 6 Ġpass , Ġ 4 Ġfail ĊĊĠĠĠĠĠĠĠ Ġ// Ġrun Ġagainst Ġthe Ġpattern ĊĠĠĠĠĠĠĠ Ġval Ġstats 1 Ġ= Ġcollect Pass Fail Stats ( 1 0 , ĠCh aos ( listOf ( Fail With Pattern ( pattern )))) ĊĠĠĠĠĠĠĠ ĠassertThat ( stats 1 . first , ĠequalTo ( 6 )) ĊĠĠĠĠĠĠĠ ĠassertThat ( stats 1 . second , ĠequalTo ( 4 )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġonce Ġpattern Ġis Ġex hausted Ġjust Ġreturn Ġpass ĊĠĠĠĠĠĠĠ Ġval Ġstats 2 Ġ= Ġcollect Pass Fail Stats ( 1 1 , ĠCh aos ( listOf ( Fail With Pattern ( pattern )))) ĊĠĠĠĠĠĠĠ ĠassertThat ( stats 2 . first , ĠequalTo ( 7 )) ĊĠĠĠĠĠĠĠ ĠassertThat ( stats 2 . second , ĠequalTo ( 4 )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġrun Ġusing Ġdefault Ġpattern Ġof Ġpass / fail Ġrepeated ĊĠĠĠĠĠĠĠ Ġval Ġstats 3 Ġ= Ġcollect Pass Fail Stats ( 1 0 1 , ĠCh aos ( listOf ( Fail With Pattern ()))) ĊĠĠĠĠĠĠĠ ĠassertThat ( stats 3 . first , ĠequalTo ( 5 1 )) ĊĠĠĠĠĠĠĠ ĠassertThat ( stats 3 . second , ĠequalTo ( 5 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcollect Pass Fail Stats ( ĊĠĠĠĠĠĠĠ Ġattempts : ĠInt , ĊĠĠĠĠĠĠĠ Ġch aos : ĠCh aos ĊĠĠĠ Ġ): ĠPair < Int , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpass Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġfail Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ( 1 .. attempts ). forEach Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġch aos . chaos () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpass Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( pass Count , Ġfail Count ) ĊĠĠĠ Ġ} Ċ }