import Ġio . ko ala ql . ddl . INTEGER Ċ import Ġio . ko ala ql . ddl . TIMESTAMP Ċ import Ġio . ko ala ql . ddl . Table Ċ import Ġio . ko ala ql . dsl .* Ċ import Ġjava . time . Duration Ċ import Ġjava . time . Instant Ċ import Ġkotlin . math . absolute Value Ċ import Ġkotlin . test . Test Ċ Ċ abstract Ġclass ĠDateTime Tests : ĠProvide Test Database Ġ{ ĊĠĠĠ Ġobject ĠEvent Table : ĠTable (" Event ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcolumn (" id ", ĠINTEGER . auto Increment ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġat Ġ= Ġcolumn (" at ", ĠTIMESTAMP ) ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprimary Key ( keys ( id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġinsert Ġand Ġorder Ġby Ġbig Ġinst ants `() Ġ= Ġwith C xn ( Event Table ) Ġ{ Ġcx n Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġinst ants Ġ= Ġ( 1 .. 2 0 L ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . EPOCH . plus Seconds ( it * 6 1 9 3 1 5 2 1 7 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠEvent Table ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. insert ( values ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinst ants . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset ( Event Table . at , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( cx n ) ĊĊĠĠĠĠĠĠĠ ĠEvent Table ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. orderBy ( Event Table . at . desc ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. selectAll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( cx n ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Indexed Ġ{ Ġix , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġit . get OrNull ( Event Table . at ) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( t Ġ== Ġinst ants [ inst ants . size Ġ- Ġix Ġ- Ġ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` current Ġtimestamp Ġis Ġroughly Ġthe Ġcurrent Ġtime `() Ġ= Ġwith Db Ġ{ Ġdb Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġtime Expr Ġ= Ġcurrent Timestamp () Ġas _ Ġlabel () ĊĊĠĠĠĠĠĠĠ Ġval ĠcurrentTime By Db Ġ= Ġselect ( time Expr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( db ). single (). first () ĊĊĠĠĠĠĠĠĠ Ġassert ( Duration . between ( currentTime By Db , ĠInstant . now ()). to Minutes (). absolute Value Ġ< Ġ 5 ) ĊĠĠĠ Ġ} Ċ }