package Ġde . r ki . cor on aw arn app . presence tracing . check ins . split Ċ Ċ import Ġde . r ki . cor on aw arn app . presence tracing . check ins . Check In Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġok io . ByteString . Companion . encode Ċ import Ġorg . joda . time . Instant Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġtest helpers . Base Test Ċ Ċ /** Ċ Ġ* ĠTest Ġexamples Ġreference Ġ[ https :// github . com / cor ona - warn - app / c wa - app - tech - spec / blob / proposal / event - registration - mvp / Ċ Ġ* Ġdocs / spec / event - registration - client . md # split - check in - by - mid night - utc ] Ċ Ġ*/ Ċ class ĠCheck In Splitter Test Ġ: ĠBaseTest () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdefault Check In Ġ= ĠCheck In ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 L , ĊĠĠĠĠĠĠĠ Ġtrace Location Id Ġ= Ġ" trace Location Id 1 ". encode (), ĊĠĠĠĠĠĠĠ Ġversion Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Restaurant ", ĊĠĠĠĠĠĠĠ Ġaddress Ġ= Ġ" Around Ġthe Ġcorner ", ĊĠĠĠĠĠĠĠ Ġtrace Location Start Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtrace Location End Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdefault Check In Length In Minutes Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġcrypto graphic Seed Ġ= Ġ" crypto graphic Seed ". encode (), ĊĠĠĠĠĠĠĠ Ġcn PublicKey Ġ= Ġ" cn PublicKey ", ĊĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠ Ġcompleted Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġcreate Journal Entry Ġ= Ġfalse ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` same - day Ġcheck - in `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠ Ġlocal Check In Ġ= Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 4 5 ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠ Ġsplit Into Ġ= Ġ[{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 4 5 ' Ġ} Ġ// Ġno Ġsplit ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġcheck In Ġ= Ġdefault Check In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 3 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 4 5 : 0 0 Z ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck In . split By Mid night UTC (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe Ġ 1 Ġ// ĠNo Ġsplitting ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 0 ) ĠshouldBe Ġcheck In ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` end Ġtime Ġbefore Ġstart Ġtime Ġsame Ġday Ġis Ġfiltered `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠ Ġlocal Check In Ġ= Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 9 : 4 5 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 3 0 ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠ Ġsplit Into Ġ= Ġ[{ Ġ} Ġ// Ġfiltered ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġcheck In Ġ= Ġdefault Check In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 4 5 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 3 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck In . split By Mid night UTC (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe Ġ 0 Ġ// Ġinconsistent Ġdata Ġis Ġfiltered Ġout ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` end Ġtime Ġand Ġdate Ġbefore Ġstart Ġtime Ġis Ġfiltered `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠ Ġlocal Check In Ġ= Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 9 : 4 5 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 3 0 ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠ Ġsplit Into Ġ= Ġ[{ Ġ} Ġ// Ġfiltered ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġcheck In Ġ= Ġdefault Check In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 9 : 4 5 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 3 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck In . split By Mid night UTC (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe Ġ 0 Ġ// Ġinconsistent Ġdata Ġis Ġfiltered Ġout ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` end Ġtime Ġequals Ġstart Ġtime Ġreturns Ġcheck - in `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠ Ġlocal Check In Ġ= Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 3 0 ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠ Ġsplit Into Ġ= Ġ[{ Ġ} Ġ// Ġfiltered ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġcheck In Ġ= Ġdefault Check In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 3 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 3 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck In . split By Mid night UTC (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe Ġ 1 Ġ// Ġinconsistent Ġdata Ġis Ġfiltered Ġout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 0 ) ĠshouldBe Ġcheck In ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` same - start - end - times Ġcheck - in `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠ Ġlocal Check In Ġ= Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 3 0 ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠ Ġsplit Into Ġ= Ġ[{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 3 0 ' Ġ} Ġ// Ġno Ġsplit ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġcheck In Ġ= Ġdefault Check In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 3 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 3 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck In . split By Mid night UTC (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe Ġ 1 Ġ// ĠNo Ġsplitting ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 0 ) ĠshouldBe Ġcheck In ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` 2 - days Ġcheck - in `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġlocal Check In Ġ= Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 9 : 4 5 ' Ġ} ĊĠĠĠĠĠĠĠ Ġsplit Into Ġ= Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 0 : 0 0 ' Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 0 : 0 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 9 : 4 5 ' Ġ} ĊĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġval Ġcheck In Ġ= Ġdefault Check In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 3 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 9 : 4 5 : 0 0 Z ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck In . split By Mid night UTC (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 0 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 3 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 0 : 0 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 1 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 0 : 0 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 9 : 4 5 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` 3 - days Ġcheck - in `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġlocal Check In Ġ= Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 6 Ġ 0 9 : 4 5 ' Ġ} ĊĠĠĠĠĠĠĠĠ Ġsplit Into Ġ= Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 0 : 0 0 ' Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 0 : 0 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 6 Ġ 0 0 : 0 0 ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 6 Ġ 0 0 : 0 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 6 Ġ 0 9 : 4 5 ' Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġcheck In Ġ= Ġdefault Check In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 3 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 6 T 0 9 : 4 5 : 0 0 Z "), ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck In . split By Mid night UTC (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 0 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 3 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 0 : 0 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 1 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 0 : 0 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 6 T 0 0 : 0 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 2 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 6 T 0 0 : 0 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 6 T 0 9 : 4 5 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` 2 - days - different - months Ġcheck - in `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġlocal Check In Ġ= Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 2 - 2 8 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 1 Ġ 1 2 : 4 5 ' Ġ} ĊĠĠĠĠĠĠĠ Ġsplit Into Ġ= Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 2 - 2 8 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 1 Ġ 0 0 : 0 0 ' Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 1 Ġ 0 0 : 0 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 1 Ġ 1 2 : 4 5 ' Ġ} ĊĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġval Ġcheck In Ġ= Ġdefault Check In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 2 - 2 8 T 0 9 : 3 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 1 T 1 2 : 4 5 : 0 0 Z ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck In . split By Mid night UTC (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 0 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 2 - 2 8 T 0 9 : 3 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 1 T 0 0 : 0 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 1 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 1 T 0 0 : 0 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 1 T 1 2 : 4 5 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` 2 - days - different - years Ġcheck - in `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġlocal Check In Ġ= Ġ{ Ġstart : Ġ' 2 0 2 1 - 1 2 - 3 1 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 2 - 0 1 - 0 1 Ġ 1 2 : 4 5 ' Ġ} ĊĠĠĠĠĠĠĠ Ġsplit Into Ġ= Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 1 - 1 2 - 3 1 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 2 - 0 1 - 0 1 Ġ 0 0 : 0 0 ' Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 2 - 0 1 - 0 1 Ġ 0 0 : 0 0 ', Ġend : Ġ' 2 0 2 2 - 0 1 - 0 1 Ġ 1 2 : 4 5 ' Ġ} ĊĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġval Ġcheck In Ġ= Ġdefault Check In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 1 2 - 3 1 T 0 9 : 3 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 2 - 0 1 - 0 1 T 1 2 : 4 5 : 0 0 Z ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck In . split By Mid night UTC (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 0 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 1 2 - 3 1 T 0 9 : 3 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 2 - 0 1 - 0 1 T 0 0 : 0 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 1 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 2 - 0 1 - 0 1 T 0 0 : 0 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 2 - 0 1 - 0 1 T 1 2 : 4 5 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` 3 - days - different - months - le ap - year Ġcheck - in `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġlocal Check In Ġ= Ġ{ Ġstart : Ġ' 2 0 2 0 - 0 2 - 2 8 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 0 - 0 3 - 0 1 Ġ 1 2 : 4 5 ' Ġ} ĊĠĠĠĠĠĠĠ Ġsplit Into Ġ= Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 0 - 0 2 - 2 8 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 0 - 0 2 - 2 9 Ġ 0 0 : 0 0 ' Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 0 - 0 2 - 2 9 Ġ 0 0 : 0 0 ', Ġend : Ġ' 2 0 2 0 - 0 3 - 0 1 Ġ 0 0 : 0 0 ' Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 0 - 0 3 - 0 1 Ġ 0 0 : 0 0 ', Ġend : Ġ' 2 0 2 0 - 0 3 - 0 1 Ġ 1 2 : 4 5 ' Ġ} ĊĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġval Ġcheck In Ġ= Ġdefault Check In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 0 - 0 2 - 2 8 T 0 9 : 3 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 0 - 0 3 - 0 1 T 1 2 : 4 5 : 0 0 Z ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck In . split By Mid night UTC (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 0 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 0 - 0 2 - 2 8 T 0 9 : 3 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 0 - 0 2 - 2 9 T 0 0 : 0 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 1 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 0 - 0 2 - 2 9 T 0 0 : 0 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 0 - 0 3 - 0 1 T 0 0 : 0 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 2 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 0 - 0 3 - 0 1 T 0 0 : 0 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 0 - 0 3 - 0 1 T 1 2 : 4 5 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` 2 - dates Ġduration Ġlower Ġthan Ġday Ġcheck - in `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġlocal Check In Ġ= Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 9 : 1 5 ' Ġ} ĊĠĠĠĠĠĠĠ Ġsplit Into Ġ= Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 3 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 0 : 0 0 ' Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 0 : 0 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 9 : 1 5 ' Ġ} ĊĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġval Ġcheck In Ġ= Ġdefault Check In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 3 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 9 : 1 5 : 0 0 Z ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck In . split By Mid night UTC (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 0 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 3 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 0 : 0 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 1 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 0 : 0 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 9 : 1 5 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` 2 - dates Ġduration Ġlower Ġthan Ġday Ġ- Ġsame Ġstart Ġand Ġend Ġtimes Ġcheck - in `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġlocal Check In Ġ= Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 0 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 9 : 0 0 ' Ġ} ĊĠĠĠĠĠĠĠ Ġsplit Into Ġ= Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 9 : 0 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 0 : 0 0 ' Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 0 : 0 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 9 : 0 0 ' Ġ} ĊĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġval Ġcheck In Ġ= Ġdefault Check In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 0 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 9 : 0 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck In . split By Mid night UTC (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 0 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 0 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 0 : 0 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 1 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 0 : 0 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 9 : 0 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` mid night Ġtimes Ġcheck - in `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġlocal Check In Ġ= Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 0 : 0 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 0 : 0 0 ' Ġ} ĊĠĠĠĠĠĠĠ Ġsplit Into Ġ= Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 0 : 0 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 0 : 0 0 ' Ġ} Ġ// ĠNo Ġsplit ĊĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġval Ġcheck In Ġ= Ġdefault Check In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 0 : 0 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 0 : 0 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck In . split By Mid night UTC (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 0 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 0 : 0 0 : 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 0 : 0 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` 2 min - 2 dates Ġcheck - in `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġlocal Check In Ġ= Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 2 3 : 5 9 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 0 : 0 1 ' Ġ} ĊĠĠĠĠĠĠĠ Ġsplit Into Ġ= Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġstart : Ġ' 2 0 2 1 - 0 3 - 0 4 Ġ 0 0 : 0 0 ', Ġend : Ġ' 2 0 2 1 - 0 3 - 0 5 Ġ 0 0 : 0 0 ' Ġ} Ġ// ĠNo Ġsplit ĊĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġval Ġcheck In Ġ= Ġdefault Check In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 0 : 2 3 : 5 9 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 0 : 0 0 : 0 1 Z ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck In . split By Mid night UTC (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠshouldBe Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 0 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 4 T 0 0 : 2 3 : 5 9 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 0 : 0 0 : 0 0 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( 1 ) ĠshouldBe Ġcheck In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In Start Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 0 : 0 0 : 0 0 . 0 0 0 Z "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck In End Ġ= ĠInstant . parse (" 2 0 2 1 - 0 3 - 0 5 T 0 0 : 0 0 : 0 1 Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ