/* Ċ Ġ* ĠĠĠ ĠCopyright Ġ 2 0 1 9 ĠS age ĠB ion etwork s Ċ Ġ* Ċ Ġ* ĠĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* ĠĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* ĠĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* ĠĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġorg . sage base . cr f . step . active Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġorg . junit . Test Ċ Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . sage base . cr f . linear Algebra .* Ċ import Ġkotlin . math . round ToInt Ċ Ċ class ĠHeart Rate Sample Processor Test Ġ{ ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Conv () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġu Ġ= ĠArray ( 1 0 ) Ġ{ Ġii Ġ-> Ġii . toDouble () Ġ+ Ġ 1 . 0 Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠArray ( 1 5 ) Ġ{ Ġii Ġ-> Ġii . toDouble () Ġ+ Ġ 1 . 0 Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput 1 Ġ= ĠLinear Algebra . conv ( u , Ġv , ĠLinear Algebra . Convolution Type . SAME ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Answer 1 Ġ= ĠarrayOf ( 1 2 0 . 0 , Ġ 1 6 5 . 0 , Ġ 2 2 0 . 0 , Ġ 2 7 5 . 0 , Ġ 3 3 0 . 0 , Ġ 3 8 5 . 0 , Ġ 4 4 0 . 0 , Ġ 4 9 5 . 0 , Ġ 5 3 4 . 0 , Ġ 5 5 6 . 0 ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( expected Answer 1 , Ġoutput 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput 2 Ġ= ĠLinear Algebra . conv ( v , Ġu , ĠLinear Algebra . Convolution Type . SAME ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Answer 2 Ġ= ĠarrayOf ( 5 6 . 0 , Ġ 8 4 . 0 , Ġ 1 2 0 . 0 , Ġ 1 6 5 . 0 , Ġ 2 2 0 . 0 , Ġ 2 7 5 . 0 , Ġ 3 3 0 . 0 , Ġ 3 8 5 . 0 , Ġ 4 4 0 . 0 , Ġ 4 9 5 . 0 , Ġ 5 3 4 . 0 , Ġ 5 5 6 . 0 , Ġ 5 6 0 . 0 , Ġ 5 4 5 . 0 , Ġ 5 1 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( expected Answer 2 , Ġoutput 2 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinput 1 Ġ= Ġu . zero Pad Before ( 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġinput 2 Ġ= Ġu . zero Pad After ( 9 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Answer 3 Ġ= ĠarrayOf ( 1 . 0 , Ġ 4 . 0 , Ġ 1 0 . 0 , Ġ 2 0 . 0 , Ġ 3 5 . 0 , Ġ 5 6 . 0 , Ġ 8 4 . 0 , Ġ 1 2 0 . 0 , Ġ 1 6 5 . 0 , Ġ 2 2 0 . 0 , Ġ 2 6 4 . 0 , Ġ 2 9 6 . 0 , Ġ 3 1 5 . 0 , Ġ 3 2 0 . 0 , Ġ 3 1 0 . 0 , Ġ 2 8 4 . 0 , Ġ 2 4 1 . 0 , Ġ 1 8 0 . 0 , Ġ 1 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġconv No Pad Ġ= ĠLinear Algebra . conv ( u , Ġu ) ĊĠĠĠĠĠĠĠ Ġval Ġconv Pad Ġ= ĠLinear Algebra . conv ( input 1 , Ġinput 2 , ĠLinear Algebra . Convolution Type . SAME ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( expected Answer 3 , Ġconv No Pad ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( expected Answer 3 , Ġconv Pad ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest X Cor r () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠArray ( 1 0 ) Ġ{ Ġii Ġ-> Ġii . toDouble () Ġ+ Ġ 1 . 0 Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠLinear Algebra . x corr ( input ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Answer Ġ= ĠarrayOf ( 1 0 . 0 , Ġ 2 9 . 0 , Ġ 5 6 . 0 , Ġ 9 0 . 0 , Ġ 1 3 0 . 0 , Ġ 1 7 5 . 0 , Ġ 2 2 4 . 0 , Ġ 2 7 6 . 0 , Ġ 3 3 0 . 0 , Ġ 3 8 5 . 0 , Ġ 3 3 0 . 0 , Ġ 2 7 6 . 0 , Ġ 2 2 4 . 0 , Ġ 1 7 5 . 0 , Ġ 1 3 0 . 0 , Ġ 9 0 . 0 , Ġ 5 6 . 0 , Ġ 2 9 . 0 , Ġ 1 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( expected Answer , Ġoutput ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Params () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 6 , Ġprocessor . high Pass Parameters . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 6 , Ġprocessor . low Pass Parameters . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Invalid Sampling Rate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ ĠassertFalse ( processor . isValid Sampling Rate ( 2 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Low Pass Filter Params () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ Ġval ĠtestData Ġ= ĠtestData () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 6 , Ġprocessor . low Pass Parameters . size ) ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= Ġprocessor . low Pass Parameters [ testData . rounded Sampling Rate ()] ĊĠĠĠĠĠĠĠ ĠassertNotNull ( filter ) ĊĠĠĠĠĠĠĠ Ġif Ġ( filter Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġcompare ( testData . a _ low pass , Ġfilter . a Params , Ġaccuracy Ġ= Ġ 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ Ġcompare ( testData . b _ low pass , Ġfilter . b Params , Ġaccuracy Ġ= Ġ 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest High Pass Filter Params () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ Ġval ĠtestData Ġ= ĠtestData () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 6 , Ġprocessor . high Pass Parameters . size ) ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= Ġprocessor . high Pass Parameters [ testData . rounded Sampling Rate ()] ĊĠĠĠĠĠĠĠ ĠassertNotNull ( filter ) ĊĠĠĠĠĠĠĠ Ġif Ġ( filter Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġcompare ( testData . a _ high pass , Ġfilter . a Params , Ġaccuracy Ġ= Ġ 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ Ġcompare ( testData . b _ high pass , Ġfilter . b Params , Ġaccuracy Ġ= Ġ 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Low Pass Filter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ Ġval ĠtestData Ġ= ĠtestData () ĊĠĠĠĠĠĠĠ Ġval ĠisValid Ġ= Ġprocessor . isValid Sampling Rate ( testData . rounded Sampling Rate ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( isValid ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġprocessor . pass Filter ( testData . input , Ġsampling Rate Ġ= ĠtestData . rounded Sampling Rate (), Ġtype Ġ= ĠFilter Type . low ) ĊĠĠĠĠĠĠĠ Ġcompare ( testData . low pass , Ġresult , Ġaccuracy Ġ= Ġ 0 . 0 0 0 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest High Pass Filter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ Ġval ĠtestData Ġ= ĠtestData () ĊĠĠĠĠĠĠĠ Ġval ĠisValid Ġ= Ġprocessor . isValid Sampling Rate ( testData . rounded Sampling Rate ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( isValid ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġprocessor . pass Filter ( testData . input , Ġsampling Rate Ġ= ĠtestData . rounded Sampling Rate (), Ġtype Ġ= ĠFilter Type . high ) ĊĠĠĠĠĠĠĠ Ġcompare ( testData . high pass , Ġresult , Ġaccuracy Ġ= Ġ 0 . 0 0 0 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Mean Center ing Filter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ Ġval ĠtestData Ġ= ĠtestData () ĊĠĠĠĠĠĠĠ Ġval Ġm cf Ġ= Ġprocessor . mean Center ing Filter ( testData . input , Ġsampling Rate Ġ= ĠtestData . rounded Sampling Rate ()) ĊĠĠĠĠĠĠĠ Ġcompare ( testData . mc filter , Ġm cf , Ġaccuracy Ġ= Ġ 0 . 0 0 0 0 0 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Aut oc orre lation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ Ġval ĠtestData Ġ= ĠtestData () ĊĠĠĠĠĠĠĠ Ġval Ġac f Ġ= Ġprocessor . autoc orre lation ( testData . input ) ĊĠĠĠĠĠĠĠ Ġcompare ( testData . acf , Ġac f , Ġaccuracy Ġ= Ġ 0 . 0 0 0 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Calculate Sampling Rate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ Ġval Ġtest HR Data Ġ= Ġtest HR Data () ĊĠĠĠĠĠĠĠ Ġval Ġsampling Rate Ġ= Ġprocessor . calculate Sampling Rate ( test HR Data . hr _ data . toList ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 9 . 9 8 0 , Ġsampling Rate , Ġ 0 . 0 0 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Calculate Sampling Rate _ 1 2 hz () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ Ġval Ġtest HR Data Ġ= Ġtest HR Data 1 2 hz () ĊĠĠĠĠĠĠĠ Ġval Ġsampling Rate Ġ= Ġprocessor . calculate Sampling Rate ( test HR Data . hr _ data . toList ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 2 . 7 2 8 , Ġsampling Rate , Ġ 0 . 0 0 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Mean Order Value () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 5 , Ġprocessor . mean Filter Order ( 1 2 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 5 , Ġprocessor . mean Filter Order ( 1 5 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 9 , Ġprocessor . mean Filter Order ( 1 6 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 9 , Ġprocessor . mean Filter Order ( 1 8 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 3 , Ġprocessor . mean Filter Order ( 1 9 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 3 , Ġprocessor . mean Filter Order ( 3 2 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 6 5 , Ġprocessor . mean Filter Order ( 3 3 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 6 5 , Ġprocessor . mean Filter Order ( 6 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Calculated Lag () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ Ġval ĠtestData Ġ= ĠtestData () ĊĊĠĠĠĠĠĠĠ Ġval Ġmin Lag Ġ= Ġprocessor . calculate Min Lag ( testData . sampling Rate ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( testData . min Lag (), Ġmin Lag ) ĊĠĠĠĠĠĠĠ Ġval Ġmax Lag Ġ= Ġprocessor . calculate Max Lag ( testData . sampling Rate ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( testData . max Lag (), Ġmax Lag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest E ar lier Pe aks () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġtest E ar lier Pe aks Example () ĊĠĠĠĠĠĠĠ Ġval Ġsampling Rate Ġ= Ġdata . generated Sampling Rate () ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġprocessor . preprocess Samples ( data . x , Ġsampling Rate ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( output ) ĊĠĠĠĠĠĠĠ Ġcompare ( data . xac f , Ġoutput !!. x . drop ( 1 ). toDouble Array (), Ġaccuracy Ġ= Ġ 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . min Lag (), Ġoutput . min Lag ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . max Lag (), Ġoutput . max Lag ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . x Min (), Ġoutput . x . min () !! , Ġ 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . x Max (), Ġoutput . x . max () !! , 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . x Max (), Ġdata . xac f . max () !! , 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ Ġcompare ( data . y _ output (), Ġoutput . y . drop ( 1 ). toDouble Array (), Ġaccuracy Ġ= Ġ 0 . 0 0 0 0 0 0 0 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġprocessor . get Bounds ( output . y , Ġsampling Rate ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . initial Guess (), Ġbounds . hr _ initial _ guess , 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . y Min (), Ġbounds . y _ min , 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . y Max (), Ġbounds . y _ max , 0 . 0 0 0 0 0 0 0 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpe aks Ġ= Ġprocessor . get Alias ing Peak Location ( bounds . hr _ initial _ guess , Ġbounds . y _ max _ pos , Ġoutput . min Lag , Ġoutput . max Lag ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( peaks ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( data . ali ased _ peak . N peaks . first (), Ġpe aks !!. n Pe aks ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . ali ased _ peak . ear lier _ peak . toList (), Ġpe aks !!. ear lier ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . ali ased _ peak . later _ peak . toList (), Ġpe aks !!. later ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ( hr , Ġconfidence ) Ġ= Ġprocessor . calculate HR From Filtered Samples ( data . x , Ġsampling Rate ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . estimated HR (), Ġhr , Ġ 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . estimated Confidence (), Ġconfidence , 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Later Pe aks () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġtest Later Pe aks Example () ĊĠĠĠĠĠĠĠ Ġval Ġsampling Rate Ġ= Ġdata . generated Sampling Rate () ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġprocessor . preprocess Samples ( data . x , Ġsampling Rate ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( output ) ĊĠĠĠĠĠĠĠ Ġcompare ( data . xac f , Ġoutput !!. x . drop ( 1 ). toDouble Array (), Ġaccuracy Ġ= Ġ 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . min Lag (), Ġoutput . min Lag ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . max Lag (), Ġoutput . max Lag ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . x Min (), Ġoutput . x . min () !! , Ġ 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . x Max (), Ġoutput . x . max () !! , 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . x Max (), Ġdata . xac f . max () !! , 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ Ġcompare ( data . y _ output (), Ġoutput . y . drop ( 1 ). toDouble Array (), Ġaccuracy Ġ= Ġ 0 . 0 0 0 0 0 0 0 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġprocessor . get Bounds ( output . y , Ġsampling Rate ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . initial Guess (), Ġbounds . hr _ initial _ guess , 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . y Min (), Ġbounds . y _ min , 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . y Max (), Ġbounds . y _ max , 0 . 0 0 0 0 0 0 0 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpe aks Ġ= Ġprocessor . get Alias ing Peak Location ( bounds . hr _ initial _ guess , Ġbounds . y _ max _ pos , Ġoutput . min Lag , Ġoutput . max Lag ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( peaks ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( data . ali ased _ peak . N peaks . first (), Ġpe aks !!. n Pe aks ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . ali ased _ peak . ear lier _ peak . toList (), Ġpe aks !!. ear lier ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . ali ased _ peak . later _ peak . toList (), Ġpe aks !!. later ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ( hr , Ġconfidence ) Ġ= Ġprocessor . calculate HR From Filtered Samples ( data . x , Ġsampling Rate ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . estimated HR (), Ġhr , Ġ 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data . estimated Confidence (), Ġconfidence , 0 . 0 0 0 0 0 0 0 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Est imated HR _ Red () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ Ġval Ġtest HR Data Ġ= Ġtest HR Data () ĊĊĠĠĠĠĠĠĠ Ġval Ġsampling Rate Ġ= Ġprocessor . calculate Sampling Rate ( test HR Data . hr _ data . toList ()) ĊĠĠĠĠĠĠĠ Ġval Ġrounded Rate Ġ= Ġsampling Rate . round ToInt () ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Chunks : ĠArray < Double Array > Ġ= Ġtest HR Data . flip ( test HR Data . hr _ data _ chunks . red ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Outputs : ĠArray < H RT uple > Ġ= Ġtest HR Data . hr _ estim ates . red ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġassumption ĊĠĠĠĠĠĠĠ ĠassertEquals ( input Chunks . size , Ġexpected Outputs . size ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOnly Ġcheck Ġsome Ġof Ġthe Ġresults Ġb / c Ġthe Ġcalculations Ġare Ġfor Ġa Ġrest ing Ġheart Ġrate Ġand Ġall Ġuse ĊĠĠĠĠĠĠĠ Ġ// Ġinitial Ġestimate Ġor Ġelse Ġthey Ġare Ġinvalid Ġ( Initial Ġwindows ). ĊĠĠĠĠĠĠĠ Ġfor Ġ( ii Ġin Ġ 0 Ġuntil ĠMath . min ( 1 0 , Ġexpected Outputs . size )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// let Ġfiltered Data Ġ= Ġprocessor . get Filtered Signal ( input Chunks [ ii ], Ġsampling Rate : Ġrounded Sampling Rate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfiltered Data Ġ= Ġprocessor . get Filtered Signal ( input Chunks [ ii ]. toList (), Ġrounded Rate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( hr , Ġconfidence ) Ġ= Ġprocessor . calculate HR From Filtered Samples ( filtered Data , Ġsampling Rate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected HR Ġ= Ġexpected Outputs [ ii ]. hr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Confidence Ġ= Ġexpected Outputs [ ii ]. confidence ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected HR , Ġhr , 0 . 0 0 0 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected Confidence , Ġconfidence , Ġ 0 . 0 0 0 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Est imated HR _ Green () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ Ġval Ġtest HR Data Ġ= Ġtest HR Data () ĊĊĠĠĠĠĠĠĠ Ġval Ġsampling Rate Ġ= Ġprocessor . calculate Sampling Rate ( test HR Data . hr _ data . toList ()) ĊĠĠĠĠĠĠĠ Ġval Ġrounded Rate Ġ= Ġsampling Rate . round ToInt () ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Chunks : ĠArray < Double Array > Ġ= Ġtest HR Data . flip ( test HR Data . hr _ data _ chunks . green ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Outputs : ĠArray < H RT uple > Ġ= Ġtest HR Data . hr _ estim ates . green ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġassumption ĊĠĠĠĠĠĠĠ ĠassertEquals ( input Chunks . size , Ġexpected Outputs . size ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOnly Ġcheck Ġsome Ġof Ġthe Ġresults Ġb / c Ġthe Ġcalculations Ġare Ġfor Ġa Ġrest ing Ġheart Ġrate Ġand Ġall Ġuse ĊĠĠĠĠĠĠĠ Ġ// Ġinitial Ġestimate Ġor Ġelse Ġthey Ġare Ġinvalid Ġ( Initial Ġwindows ). ĊĠĠĠĠĠĠĠ Ġfor Ġ( ii Ġin Ġ 0 Ġuntil ĠMath . min ( 1 0 , Ġexpected Outputs . size )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfiltered Data Ġ= Ġprocessor . get Filtered Signal ( input Chunks [ ii ]. toList (), Ġrounded Rate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( hr , Ġconfidence ) Ġ= Ġprocessor . calculate HR From Filtered Samples ( filtered Data , Ġsampling Rate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected HR Ġ= Ġexpected Outputs [ ii ]. hr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Confidence Ġ= Ġexpected Outputs [ ii ]. confidence ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected HR , Ġhr , 0 . 0 0 0 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected Confidence , Ġconfidence , Ġ 0 . 0 0 0 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Est imated HR _ 1 2 hz () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ Ġval Ġtest HR Data Ġ= Ġtest HR Data 1 2 hz () ĊĊĠĠĠĠĠĠĠ Ġval Ġsampling Rate Ġ= Ġprocessor . calculate Sampling Rate ( test HR Data . hr _ data . toList ()) ĊĠĠĠĠĠĠĠ Ġval Ġrounded Rate Ġ= Ġsampling Rate . round ToInt () ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Chunks : ĠArray < Double Array > Ġ= Ġtest HR Data . flip ( test HR Data . hr _ data _ chunks . red ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Outputs : ĠArray < H RT uple > Ġ= Ġtest HR Data . hr _ estim ates . red ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġassumption ĊĠĠĠĠĠĠĠ ĠassertEquals ( input Chunks . size , Ġexpected Outputs . size ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOnly Ġcheck Ġsome Ġof Ġthe Ġresults Ġb / c Ġthe Ġcalculations Ġare Ġfor Ġa Ġrest ing Ġheart Ġrate Ġand Ġall Ġuse ĊĠĠĠĠĠĠĠ Ġ// Ġinitial Ġestimate Ġor Ġelse Ġthey Ġare Ġinvalid Ġ( Initial Ġwindows ). ĊĠĠĠĠĠĠĠ Ġfor Ġ( ii Ġin Ġ 0 Ġuntil ĠMath . min ( 1 0 , Ġexpected Outputs . size )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfiltered Data Ġ= Ġprocessor . get Filtered Signal ( input Chunks [ ii ]. toList (), Ġrounded Rate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( hr , Ġconfidence ) Ġ= Ġprocessor . calculate HR From Filtered Samples ( filtered Data , Ġsampling Rate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected HR Ġ= Ġexpected Outputs [ ii ]. hr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Confidence Ġ= Ġexpected Outputs [ ii ]. confidence ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected HR , Ġhr , 0 . 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected Confidence , Ġconfidence , Ġ 0 . 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Process Samples () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠHeart Rate Sample Processor () ĊĠĠĠĠĠĠĠ Ġval Ġtest HR Data Ġ= Ġtest HR Data () ĊĠĠĠĠĠĠĠ Ġval Ġestimated Sampling Rate Ġ= Ġ 6 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġ// ĠBecause Ġthis Ġtest Ġtakes Ġa Ġwhile Ġto Ġrun , Ġand Ġit 's Ġusing Ġdata Ġfrom Ġa Ġrest ing Ġheart Ġrate , ĊĠĠĠĠĠĠĠ Ġ// Ġonly Ġprocess Ġa Ġsubset Ġof Ġthe Ġdata . Ġsy o ung Ġ 0 4 / 1 6 / 2 0 1 9 ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġ 3 0 ĊĠĠĠĠĠĠĠ Ġval Ġexpected HR Values Ġ= ĠarrayOf < Heart Rate BPM >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeart Rate BPM ( 4 6 . 3 2 0 0 7 1 2 4 9 3 , 6 9 . 2 6 5 3 7 8 5 7 6 4 7 6 8 5 , 0 . 8 6 6 5 7 2 8 4 0 0 2 5 0 3 5 1 ," green "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeart Rate BPM ( 4 7 . 3 2 0 6 7 7 2 4 9 3 , 6 9 . 2 6 5 3 7 7 8 1 3 7 9 3 9 5 , 0 . 8 6 4 0 0 4 4 5 6 4 8 8 0 1 6 ," green "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeart Rate BPM ( 4 8 . 3 2 1 2 8 3 2 9 1 3 , 6 7 . 9 5 8 4 8 3 1 3 9 9 7 8 5 , 0 . 8 7 6 8 3 3 3 1 9 3 7 1 6 4 2 5 ," green "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeart Rate BPM ( 4 9 . 3 2 1 8 8 9 2 0 8 3 , 6 9 . 2 6 5 3 7 7 8 0 9 1 9 9 4 5 , 0 . 8 7 9 7 0 1 1 8 0 3 3 9 6 2 8 4 ," red "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeart Rate BPM ( 5 0 . 3 2 2 4 9 5 2 0 8 3 , 6 7 . 9 5 8 4 8 3 6 9 8 9 4 4 1 2 , 0 . 8 9 9 4 4 9 2 0 6 6 2 8 2 0 3 4 ," green "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeart Rate BPM ( 5 1 . 3 2 3 1 0 0 9 9 9 3 , 6 7 . 9 5 8 4 8 4 6 4 1 0 7 1 6 , 0 . 9 1 1 5 5 4 8 7 0 8 1 8 0 1 4 9 ," green "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeart Rate BPM ( 5 2 . 3 2 3 7 0 7 1 6 6 3 , 6 7 . 9 5 8 4 8 4 2 6 6 9 2 5 2 8 , 0 . 9 0 9 0 9 5 1 1 3 4 9 3 9 6 4 5 ," green "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeart Rate BPM ( 5 3 . 3 2 4 3 1 3 1 2 4 3 , 6 7 . 9 5 8 4 8 4 2 6 6 9 2 5 2 8 , 0 . 9 0 1 6 6 6 4 6 4 7 1 3 8 1 4 2 ," green "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeart Rate BPM ( 5 4 . 3 2 4 9 1 9 1 2 4 3 , 6 7 . 9 5 8 4 8 4 2 6 6 9 2 5 2 5 , 0 . 8 9 8 5 7 3 9 9 8 8 7 4 0 5 9 9 ," red "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeart Rate BPM ( 5 5 . 3 2 5 5 2 5 1 6 6 3 , 6 7 . 9 5 8 4 8 3 7 0 3 4 5 1 8 9 , 0 . 9 0 9 5 0 2 2 7 4 9 6 2 0 5 6 4 ," green "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeart Rate BPM ( 5 6 . 3 2 6 1 3 1 0 4 1 3 , 6 7 . 9 5 8 4 8 4 8 3 0 3 9 8 6 9 , 0 . 8 9 5 8 1 7 0 6 4 5 9 7 2 3 6 8 ," green "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeart Rate BPM ( 5 7 . 3 2 6 7 3 7 0 4 1 3 , 6 7 . 9 5 8 4 8 4 4 5 1 7 4 4 5 7 , 0 . 8 9 5 6 1 7 4 8 3 8 0 8 4 8 6 5 ," green "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeart Rate BPM ( 5 8 . 3 2 7 3 4 3 0 4 1 3 , 6 7 . 9 5 8 4 8 4 6 4 1 0 7 1 6 4 , 0 . 8 9 8 6 4 1 8 9 8 7 0 4 3 3 9 1 ," green "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeart Rate BPM ( 5 9 . 3 2 7 9 4 9 1 2 4 3 , 6 7 . 9 5 8 4 8 4 0 7 7 5 9 8 2 4 , 0 . 8 8 9 6 0 1 6 6 9 3 8 7 6 4 6 5 ," green "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeart Rate BPM ( 6 0 . 3 2 8 5 5 5 1 2 4 3 , 6 7 . 9 5 8 4 8 4 0 7 7 5 9 8 2 , 0 . 8 8 9 5 3 3 2 5 8 1 5 8 6 1 6 4 ," green "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeart Rate BPM ( 6 1 . 3 2 9 1 6 1 0 8 3 3 , 6 7 . 9 5 8 4 8 3 6 9 8 9 4 4 1 , 0 . 8 9 0 1 1 7 1 1 2 8 3 8 3 6 5 9 ," red ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdrop Ġ= Ġ( start Ġ* Ġestimated Sampling Rate ). round ToInt () ĊĠĠĠĠĠĠĠ Ġval Ġsamples Ġ= Ġtest HR Data . hr _ data . drop ( drop ) ĊĠĠĠĠĠĠĠ Ġvar Ġexpected Idx Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ// ĠTest Ġexpectations Ġto Ġsee Ġthat Ġthey Ġmatch Ġthe ĠSwift Ġimplementation ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 8 0 0 , Ġdrop ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 8 6 0 , Ġsamples . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 1 . 2 4 4 2 7 4 4 9 9 3 , Ġsamples . first (). timestamp , Ġ 0 . 0 0 0 0 0 0 1 ) ĊĊĠĠĠĠĠĠĠ Ġsamples . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessor . add Sample ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( processor . is Ready To Process ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhr = Ġprocessor . process Samples () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected HR Values [ expected Idx ]. bpm , Ġhr . bpm , Ġ 0 . 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected HR Values [ expected Idx ]. confidence , Ġhr . confidence , Ġ 0 . 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected HR Values [ expected Idx ]. timestamp , Ġhr . timestamp , Ġ 0 . 0 0 0 0 0 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected HR Values [ expected Idx ]. channel , Ġhr . channel ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Idx ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠHelper Ġfunctions ĊĊĠĠĠ Ġfun Ġcompare ( array 1 : ĠDouble Array , Ġarray 2 : ĠDouble Array , Ġaccuracy : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( array 1 . size , Ġarray 2 . size ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( idx Ġin Ġ 0 Ġuntil Ġarray 1 . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl hv Ġ= Ġarray 1 [ idx ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr hv Ġ= Ġarray 2 [ idx ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Math . abs ( lh v Ġ- Ġr hv ) Ġ> Ġaccuracy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Expected Ġ${ lh v } Ġnot Ġequal Ġto Ġ${ rh v } Ġat Ġindex Ġ${ idx }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠtestData (): ĠProcessor TestData Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġthis . java Class . class Loader . getResource (" io _ examples . json "). read Text () ĊĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠ Ġval ĠtestData Ġ= Ġgson . fromJson ( json , ĠProcessor TestData :: class . java ) ĊĠĠĠĠĠĠĠ Ġreturn ĠtestData ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest E ar lier Pe aks Example (): ĠTest HR Pe aks Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġthis . java Class . class Loader . getResource (" io _ example _ ear lier _ peak . json "). read Text () ĊĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠ Ġval ĠtestData Ġ= Ġgson . fromJson ( json , ĠTest HR Pe aks :: class . java ) ĊĠĠĠĠĠĠĠ Ġreturn ĠtestData ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Later Pe aks Example (): ĠTest HR Pe aks Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġthis . java Class . class Loader . getResource (" io _ example _ later _ peak . json "). read Text () ĊĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠ Ġval ĠtestData Ġ= Ġgson . fromJson ( json , ĠTest HR Pe aks :: class . java ) ĊĠĠĠĠĠĠĠ Ġreturn ĠtestData ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest HR Data (): ĠHR Processor TestData Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġthis . java Class . class Loader . getResource (" io _ examples _ whole . json "). read Text () ĊĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠ Ġval ĠtestData Ġ= Ġgson . fromJson ( json , ĠHR Processor TestData :: class . java ) ĊĠĠĠĠĠĠĠ Ġreturn ĠtestData ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest HR Data 1 2 hz (): ĠHR Processor TestData Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġthis . java Class . class Loader . getResource (" io _ examples _ whole _ 1 2 hz . json "). read Text () ĊĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠ Ġval ĠtestData Ġ= Ġgson . fromJson ( json , ĠHR Processor TestData :: class . java ) ĊĠĠĠĠĠĠĠ Ġreturn ĠtestData ĊĠĠĠ Ġ} Ċ }