/* Ċ Ġ* ĠCopyright Ġ@ Ġ 2 0 1 8 Ġ- Ġpresent Ġ 8 x 8 , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 . j its i . utils . stats Ċ Ċ import Ġio . kot est . core . spec . Isolation Mode Ċ import Ġio . kot est . core . spec . style . Should Spec Ċ import Ġio . kot est . matchers . collections . shouldBe Empty Ċ import Ġio . kot est . matchers . collections . should Contain Exactly Ċ import Ġio . kot est . matchers . collections . should Have Size Ċ import Ġorg . j its i . utils . Fake Clock Ċ import Ġorg . j its i . utils . secs Ċ import Ġjava . time . Duration Ċ import Ġjava . time . Instant Ċ Ċ class ĠTime Based Sl iding Window Test Ġ: ĠShould Spec () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġisolation Mode (): ĠI sol ation Mode ? Ġ= ĠI sol ation Mode . Instance Per Leaf ĊĊĠĠĠ Ġprivate Ġval Ġfake Clock Ġ= ĠFake Clock () ĊĊĠĠĠ Ġprivate Ġval Ġev ict ed Values Ġ= Ġmutable ListOf < Int >() ĊĊĠĠĠ Ġprivate Ġval Ġwindow Ġ= ĠTime Based Sl iding Window < Int >( ĊĠĠĠĠĠĠĠ ĠDuration . of Seconds ( 5 ), ĊĠĠĠĠĠĠĠ Ġ{ Ġev ict ed Values . add ( it ) Ġ}, ĊĠĠĠĠĠĠĠ Ġfake Clock ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext (" the Ġwindow ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" ev ict Ġvalues Ġthat Ġare Ġoutside Ġthe Ġwindow ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġ 4 Ġelements Ġat Ġtime Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 .. 3 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġev ict ed Values Ġshould Have Size Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġ 4 Ġelements Ġat Ġtime Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfake Clock . setTime ( Instant . of Epoch Second ( 6 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 4 .. 7 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfake Clock . el apse ( 1 . secs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġev ict ed Values Ġshould Have Size Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġev ict ed Values Ġshould Contain Exactly Ġmutable ListOf ( 0 , Ġ 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . values () Ġshould Contain Exactly ĠlistOf ( 4 , Ġ 5 , Ġ 6 , Ġ 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext (" a Ġwindow Ġwith Ġa Ġvalue Ġof Ġ 0 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= ĠTime Based Sl iding Window < Int >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDuration . of Seconds ( 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġev ict ed Values . add ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfake Clock ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" never Ġhave Ġany Ġvalues ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . add ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . add ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . add ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfake Clock . el apse ( Duration . of Millis ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . values (). shouldBe Empty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġev ict ed Values Ġshould Contain Exactly Ġmutable ListOf ( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ